【问题描述】每个学生有4门功课,英语,高数,C语言,物理。所有课程都以A,B,C,D这4个等级进行评价。
请对所有学生按成绩由高到低进行排序,规则为:A个数最多的排前面,当A个数相同,比较B的个数,以此类推。
请使用结构体定义每个学生的信息。
【输入形式】第一行输入一个整数n表示学生人数。
接下来每行为:学号,名字,英语成绩,高数成绩,C语言成绩,物理成绩
【输出形式】按学生成绩由高到低的顺序输出学生信息
【样例输入】4
101 zhang A B C C
102 li B A B D
103 wang A C B B
104 dong B A B A
【样例输出】104 dong B A B A
103 wang A C B B
102 li B A B D
101 zhang A B C C
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> /*【问题描述】每个学生有4门功课,英语,高数,C语言,物理。所有课程都以A,B,C,D这4个等级进行评价。 请对所有学生按成绩由高到低进行排序,规则为:A个数最多的排前面,当A个数相同,比较B的个数,以此类推。*/ typedef struct Student { int ID; char name[20]; char sore[4]; }Student; typedef struct countnum { Student student; int num[4]; }Countnum; int main() { int n; scanf("%d", &n); Countnum arr[10] = { 0 }; for (int i = 0; i < n; i++) { scanf("%d %s %c %c %c %c", &arr[i].student.ID, arr[i].student.name, &arr[i].student.sore[0], &arr[i].student.sore[1], &arr[i].student.sore[2], &arr[i].student.sore[3]); for (int j = 0; j < 4; j++) { if (arr[i].student.sore[j] == 'A') { arr[i].num[0] += 1; } else if (arr[i].student.sore[j] == 'B') { arr[i].num[1] += 1; } else if (arr[i].student.sore[j] == 'C') { arr[i].num[2] += 1; } else { arr[i].num[3] += 1; } } } for (int i = 0; i < n-1; i++) { for (int j = 0; j < n - i - 1; j++) { countnum temp; if (arr[j].num[0] > arr[j + 1].num[0]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } else if (arr[j].num[1] > arr[j + 1].num[1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } else if (arr[j].num[2] > arr[j + 1].num[2]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } else if (arr[j].num[3] > arr[j + 1].num[3]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } for (int i = 0; i < n; i++) { printf("%d %s ", arr[i].student.ID, arr[i].student.name); printf("%c %c %c %c\n", arr[i].student.sore[0], arr[i].student.sore[1], arr[i].student.sore[2], arr[i].student.sore[3]); } return 0; }