#pragma hdrstop
#pragma argsused
#include <stdio.h>
#include <tchar.h>
// 10명의 학생들에 대한 국어, 영어, 수학 성적을 입력받아 총점과 평균을 구하고
// 석차를 구한 다음 석차순으로 출력하는 프로그램을 작성하라.
// 학생 구조체 선언
struct student {
int KoreanScore;
int EnglighScore;
int MathScore;
int sum;
float average;
int ranking;
int count;
};
int main() {
// 변수 선언
struct student sd[10];
int i, j, k, q;
int count = 0;
int _count = 0;
// 랭킹 초기화
for (i = 0; i < 10; i++) {
sd[i].ranking = 1;
sd[i].count = 0;
}
// 성적입력
for (i = 0; i < 10; i++) {
printf("학생 %d의 국어성적을 입력하십시오 : ", i);
scanf("%d", &sd[i].KoreanScore);
printf("학생 %d의 영어성적을 입력하십시오 : ", i);
scanf("%d", &sd[i].EnglighScore);
printf("학생 %d의 수학성적을 입력하십시오 : ", i);
scanf("%d", &sd[i].MathScore);
// 총합 평균 계산후 출력
sd[i].sum = sd[i].KoreanScore + sd[i].EnglighScore + sd[i].MathScore;
sd[i].average = sd[i].sum / 3;
printf("학생 %d 총합 %d 평균 %f\n\n", i, sd[i].sum, sd[i].average);
}
// 랭킹계산
for (i = 0; i < 10; i++) {
for (j = 0; j < 10; j++) {
if (sd[i].sum < sd[j].sum) {
++sd[i].ranking;
}
else if (sd[i].sum == sd[j].sum) {
++sd[i].count;
}
}
}
// 석차순으로 총합 평균 랭킹 출력
for (i = 0; i < 10; i++) {
for (j = 0; j < 10; j++) {
if (sd[j].ranking == i) {
for (k = 0; k < 10; k++) {
for (q = 0; q < 10; q++) {
if (sd[q].ranking == sd[k].ranking&&sd[q].sum !=sd[k].sum)
if(sd[q].sum > sd[k].sum)
{
++sd[q].ranking;
}
else
{
++sd[k].ranking;
}
}
}
sd[j].ranking -= _count;
++sd[j].ranking;
printf("학생 %d 총합 %d 평균 %f 순위 %d\n", j, sd[j].sum, sd[j].average,
sd[j].ranking);
count = 0;
}
else {
count++;
}
if (count == 11) {
_count++;
count = 0;
}
}
}
system("pause");
return 0;
}
/* 이상하개 sd[0].raking 값과 sd.[9].ranking 값이 1정도 오차가 나는 경우가 있습니다.
어떻게든 처리하고 싶은대 자꾸 코드만 꼬이내요 ㄷ;;;*/