用c语言编程输入n个学生的姓名及其3门功课成绩(整数),要求根据3门功课的平均成绩从高分到低分输出每个学生的姓名、3门功课成绩及平均成绩,若平均分相同则按姓名的字典序输出。 输入格式: 测试数据有多组,处理到文件尾。每组测试数据首先输入一个正整数n(1<n<100),表示学生人数;然后是n行信息,分别表示学生的姓名(长度不超过10且由英文字母构成的字符串)和3门课成绩(正整数)。 输出格式: 对于每组测试,输出排序后的学生信息,每行一个学生信息:姓名、3门课成绩、平均成绩(保留2位小数)。每行数据之间
时间: 2024-01-02 18:05:24 浏览: 156
C语言代码如下:
```
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct student {
char name[11];
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 strcmp(s1->name, s2->name);
} else {
return s2->avg - s1->avg > 0 ? 1 : -1;
}
}
int main() {
int n;
while (scanf("%d", &n) != EOF) {
struct student stu[n];
for (int i = 0; i < n; i++) {
scanf("%s %d %d %d", stu[i].name, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]);
stu[i].avg = (stu[i].score[0] + stu[i].score[1] + stu[i].score[2]) / 3.0;
}
qsort(stu, n, sizeof(struct student), cmp);
for (int i = 0; i < n; i++) {
printf("%s %d %d %d %.2f\n", stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].avg);
}
}
return 0;
}
```
C语言中可以用结构体表示学生信息,然后使用qsort函数进行排序。排序时需要注意,当平均分相同时,按照姓名的字典序排序。输出时需要保留两位小数,可以使用%.2f格式化输出。
阅读全文