#include <stdio.h>
#include <string.h>
#define N 20
int main()
{
char name[N][9]={"가","나","다","라","마","바","사","아","차","카","타","파","하","가가","나나","다다","라라","마마","바바","사사"};
char std_no[N][14]={"2016001","2016002","2016003","2016004","2016005","2016006","2016007","2016008","2016009","2016010"
,"2016011","2016012","2016013","2016014","2016015","2016016","2016017","2016018","2016019","2016020"};
int eng[N]={30,100,45,76,78,59,89,12,56,37,49,75,89,84,75,98,61,45,83,62};
int math[N]={12,10,100,89,78,75,98,62,95,84,75,87,45,26,58,78,51,48,78,19};
int sci[N]={78,10,75,100,89,69,89,79,49,86,15,2,48,7,59,89,48,75,89,66};
int order_e[N],order_m[N],order_s[N],rank[N];
double gpa_e[N],gpa_m[N],gpa_s[N];
int i,j,repeat,temp;
for(i=0;i<N;i++)
{
order_e[i]=i;
order_m[i]=i;
order_s[i]=i;
rank[i]=i;
}
for (repeat=1; repeat<N;repeat++)
{
for(i=0;i<N-repeat;i++)
{
if (eng[order_e[i]]>eng[order_e[i+1]])
{
temp = order_e[i];
order_e[i]=order_e[i+1];
order_e[i+1]=temp;
}
}
}
printf("영어 최고점 힉번 %-10s 이름 %-5s 영어 %d점 수학 %d점 과학 %d점\n",
std_no[order_e[19]],name[order_e[19]],eng[order_e[19]],math[order_e[19]],sci[order_e[19]]);
for (repeat=1; repeat<N;repeat++)
{
for(i=0;i<N-repeat;i++)
{
if (math[order_m[i]]>math[order_m[i+1]])
{
temp = order_m[i];
order_m[i]=order_m[i+1];
order_m[i+1]=temp;
}
}
}
printf("수학 최고점 학번 %-10s 이름 %-5s 영어 %d점 수학 %d점 과학 %d점\n",
std_no[order_m[19]],name[order_m[19]],eng[order_m[19]],math[order_m[19]],sci[order_m[19]]);
for (repeat=1; repeat<N;repeat++)
{
for(i=0;i<N-repeat;i++)
{
if (sci[order_s[i]]>sci[order_s[i+1]])
{
temp = order_s[i];
order_s[i]=order_s[i+1];
order_s[i+1]=temp;
}
}
}
printf("과학 최고점 학번 %-10s 이름 %-5s 영어 %d점 수학 %d점 과학 %d점\n",
std_no[order_s[19]],name[order_s[19]],eng[order_s[19]],math[order_s[19]],sci[order_s[19]]);
//-------------------------------------------
for(i=0;i<6;i++)
gpa_e[order_e[i]]=2.0;
for(i=6;i<14;i++)
gpa_e[order_e[i]]=3.0;
for(i=14;i<20;i++)
gpa_e[order_e[i]]=4.0;
for(i=0;i<6;i++)
gpa_m[order_m[i]]=2.0;
for(i=6;i<14;i++)
gpa_m[order_m[i]]=3.0;
for(i=14;i<20;i++)
gpa_m[order_m[i]]=4.0;
for(i=0;i<6;i++)
gpa_s[order_s[i]]=2.0;
for(i=6;i<14;i++)
gpa_s[order_s[i]]=3.0;
for(i=14;i<20;i++)
gpa_s[order_s[i]]=4.0;
//---------------------------------------------
printf("\n=================================================\n");
printf("학번 이름 영어 수학 과학 GPA 석차 \n");
printf("=================================================\n");
for(i=0;i<N;i++)
{
printf("%-10s %-5s ",std_no[i],name[i]);
if(gpa_e[i]==4.0)
printf("A ");
else if(gpa_e[i]==3.0)
printf("B ");
else
printf("C ");
if(gpa_m[i]==4.0)
printf("A ");
else if(gpa_m[i]==3.0)
printf("B ");
else
printf("C ");
if(gpa_s[i]==4.0)
printf("A ");
else if(gpa_s[i]==3.0)
printf("B ");
else
printf("C ");
printf("%.1lf ",(gpa_e[i]+gpa_m[i]+gpa_s[i])/3.0,rank[i]);
}
이렇게 하면
이렇게 잘 되는데 석차를 동점자 처리하면서 어떻게 출력하는지 잘 모르곘어 ㅜㅜ
정렬.
일단 모든 배열을 구조체의 배열로 바꿔. 그담 정렬.
제일 이해하기 쉬운 방법은 석차배열을 만들어줘 그리고 그안에 GPA로 비교해서 최고점수 1등 동점자 숫자세서 다 1등주고 다음 아직 등수체크된사람이 전체인원보다 모자르면 바로직전 검색했든 최고점보다 낮으면서 가장 높은점수를 찾고 그점수랑 같은사람들을 다 (1+여태까지 등수체크된 사람수)등을 주면됨
While(등수체크된 사람수 < 전체인원수) 이런구조로 배열이랑 등수체크된 사람수 라는 변수 바로 이전에 체크했던 최고점수을 나타내는 변수 두가 만들어서 짜면됨 다 짜줬당!
http://ideone.com/YKdoVi
대략 구조만 봐봐. 정렬하고 나서 어떻게 동석차 처리하는지.
엌 오름차순으로 했네. 뭐 패스.
http://ideone.com/tJnkHU
정렬 안하고 하는법