使用c语言,编写程序,某班有学生N人,学生的信息包括学号,姓名和英语、高数、和计算机三门课的成绩,统计各学生的总成绩,按总分成绩由高到低对学生的信息进行排序,输出排序后学生的信息
时间: 2023-12-03 17:02:00 浏览: 94
好的,可以为您提供参考代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 100 // 最大学生人数
#define MAX_NAME_LEN 20 // 姓名最大长度
typedef struct {
int id; // 学号
char name[MAX_NAME_LEN]; // 姓名
int eng_score; // 英语成绩
int math_score; // 高数成绩
int comp_score; // 计算机成绩
int total_score; // 总成绩
} Student;
// 比较函数,根据总成绩降序排序
int cmp_total_score(const void *a, const void *b) {
return ((Student *)b)->total_score - ((Student *)a)->total_score;
}
int main() {
int n;
Student students[MAX_STUDENTS];
printf("请输入学生人数:");
scanf("%d", &n);
// 输入每个学生的信息
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的学号、姓名、英语成绩、高数成绩和计算机成绩:", i+1);
scanf("%d %s %d %d %d", &students[i].id, students[i].name, &students[i].eng_score, &students[i].math_score, &students[i].comp_score);
// 计算总成绩
students[i].total_score = students[i].eng_score + students[i].math_score + students[i].comp_score;
}
// 按总分成绩由高到低排序
qsort(students, n, sizeof(Student), cmp_total_score);
// 输出排序后的学生信息
printf("学号\t姓名\t英语成绩\t高数成绩\t计算机成绩\t总成绩\n");
for (int i = 0; i < n; i++) {
printf("%d\t%s\t%d\t%d\t%d\t%d\n", students[i].id, students[i].name, students[i].eng_score, students[i].math_score, students[i].comp_score, students[i].total_score);
}
return 0;
}
```
这个程序使用了结构体来表示每个学生的信息,使用 `qsort` 函数来进行排序。请注意,此处的排序是按照总分成绩降序排序的,如果需要按照其他方式排序,可以修改 `cmp_total_score` 函数中的比较方式。