输入n个学生的姓名及其3门功课成绩(整数),要求根据3门功课的平均成绩从高分到低分输出每个学生的姓名、3门功课成绩及平均成绩,若平均分相同则按姓名的字典序输出。c语言
时间: 2023-12-17 09:02:56 浏览: 161
下面是一个简单的C语言代码实现,使用结构体存储学生信息,排序时使用快速排序算法:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_N 1000
struct student {
char name[20];
int score[3];
double avg;
};
int cmp(const void* a, const void* b) {
struct student* s1 = (struct student*)a;
struct student* s2 = (struct student*)b;
if (s1->avg != s2->avg) {
return s2->avg - s1->avg > 0 ? 1 : -1;
} else {
return strcmp(s1->name, s2->name);
}
}
int main() {
int n;
struct student stu[MAX_N];
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%s", stu[i].name);
scanf("%d%d%d", &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]);
stu[i].avg = (double)(stu[i].score[0] + stu[i].score[1] + stu[i].score[2]) / 3;
}
qsort(stu, n, sizeof(struct student), cmp);
for (int i = 0; i < n; i++) {
printf("%s %d %d %d %.2lf\n", stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].avg);
}
return 0;
}
```
输入格式为:
```
n
name1 score11 score12 score13
name2 score21 score22 score23
...
```
其中n为学生总数,name为学生姓名,score1、score2、score3为3门功课成绩。输出格式为:
```
name1 score11 score12 score13 avg1
name2 score21 score22 score23 avg2
...
```
其中avg为3门功课的平均分。
阅读全文