一个班级中有N个学生(例如10个),学生的信息包括学号、姓名、英语、高数和计算机三门课程的成绩。统计每个学生的总成绩,按总分成绩从高到低对学生的信息进行排序,输出排序后的学生的信息。C语言编写
时间: 2024-05-08 18:22:25 浏览: 147
以下是一个实现该功能的 C 语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 100 // 最多学生数
#define MAX_NAME_LENGTH 20 // 姓名最大长度
// 学生结构体
struct student {
char id[10]; // 学号
char name[MAX_NAME_LENGTH]; // 姓名
int eng; // 英语成绩
int math; // 高数成绩
int comp; // 计算机成绩
int total; // 总成绩
};
// 比较函数,用于排序
int cmp(const void *a, const void *b) {
return ((struct student *)b)->total - ((struct student *)a)->total;
}
int main() {
int n; // 学生数
struct student students[MAX_STUDENTS]; // 学生数组
// 输入学生信息
printf("请输入学生数:");
scanf("%d", &n);
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的信息(学号 姓名 英语成绩 高数成绩 计算机成绩):", i + 1);
scanf("%s %s %d %d %d", students[i].id, students[i].name, &students[i].eng, &students[i].math, &students[i].comp);
students[i].total = students[i].eng + students[i].math + students[i].comp; // 计算总成绩
}
// 按总分成绩从高到低排序
qsort(students, n, sizeof(struct student), cmp);
// 输出排序后的学生信息
printf("排序后的学生信息如下:\n");
printf("学号\t姓名\t英语\t高数\t计算机\t总分\n");
for (int i = 0; i < n; i++) {
printf("%s\t%s\t%d\t%d\t%d\t%d\n", students[i].id, students[i].name, students[i].eng, students[i].math, students[i].comp, students[i].total);
}
return 0;
}
```
该代码使用了结构体来存储学生信息,通过 `qsort` 函数对学生数组进行排序。注意,该代码中并没有对输入的数据进行检查,实际应用中需要进行数据验证和异常处理。
阅读全文