从键盘输入若干学生的信息,包括学号,姓名,4门课的成绩(整型)。按总成绩从高到低排序后输出
时间: 2023-04-03 14:02:51 浏览: 75
您好,这是一个关于编程的问题,我可以回答。以下是一个示例代码,可以实现您的需求:
```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 scores[4];
int total_score;
} Student;
int compare_students(const void* a, const void* b) {
const Student* s1 = (const Student*)a;
const Student* s2 = (const Student*)b;
return s2->total_score - s1->total_score;
}
int main() {
Student students[MAX_STUDENTS];
int num_students;
printf("请输入学生数量:");
scanf("%d", &num_students);
for (int i = 0; i < num_students; i++) {
printf("请输入第%d个学生的信息:\n", i + 1);
printf("学号:");
scanf("%d", &students[i].id);
printf("姓名:");
scanf("%s", students[i].name);
printf("4门课的成绩(用空格分隔):");
scanf("%d %d %d %d", &students[i].scores[0], &students[i].scores[1], &students[i].scores[2], &students[i].scores[3]);
students[i].total_score = students[i].scores[0] + students[i].scores[1] + students[i].scores[2] + students[i].scores[3];
}
qsort(students, num_students, sizeof(Student), compare_students);
printf("按总成绩从高到低排序后的学生信息如下:\n");
for (int i = 0; i < num_students; i++) {
printf("%d %s %d %d %d %d 总成绩:%d\n", students[i].id, students[i].name, students[i].scores[0], students[i].scores[1], students[i].scores[2], students[i].scores[3], students[i].total_score);
}
return 0;
}
```
希望能对您有所帮助。