用c语言解决这个问题:又是一次期中考。考完之后肯定少不了成绩的排名。可是面对这么多的成绩,老师也觉得累。于是向熟悉编程的你求助。计入排名的考试只有语文数学跟英语三门。按照平均分从高到低输出。 输入要求 先输入一个整数n,表示有n个学生。(0 < n < 300) 接下来n行,每行有4个数据,分别代表学号,语文成绩,数学成绩,英语成绩。 输出要求 按照平均分从大到小输出这n个学生的语文成绩、数学成绩、英语成绩。平均分相同时,按照学号的升序来。
时间: 2024-02-20 08:00:10 浏览: 149
```c
#include <stdio.h>
#include <string.h>
#define MAX_N 300
struct student {
char id[10];
int chinese;
int math;
int english;
float avg;
};
int main() {
struct student stu[MAX_N];
int n, i, j;
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%s %d %d %d", stu[i].id, &stu[i].chinese, &stu[i].math, &stu[i].english);
stu[i].avg = (stu[i].chinese + stu[i].math + stu[i].english) / 3.0;
}
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (stu[i].avg < stu[j].avg || (stu[i].avg == stu[j].avg && strcmp(stu[i].id, stu[j].id) > 0)) {
struct student temp = stu[i];
stu[i] = stu[j];
stu[j] = temp;
}
}
}
for (i = 0; i < n; i++) {
printf("%s %d %d %d\n", stu[i].id, stu[i].chinese, stu[i].math, stu[i].english);
}
return 0;
}
```
阅读全文