用结构体实现对于三个学生数学语文英语成绩求和并排名
时间: 2024-03-18 18:41:56 浏览: 59
学生成绩管理,结构体法
好的,我可以为您编写如下代码实现您的需求:
```c
#include <stdio.h>
#include <stdlib.h>
#define NUM_OF_STUDENTS 3
// 学生结构体
typedef struct Student {
char name[20];
int math_score;
int chinese_score;
int english_score;
int total_score;
} Student;
// 比较函数,用于 qsort 排序
int compare(const void *a, const void *b) {
Student *s1 = (Student *)a;
Student *s2 = (Student *)b;
return s2->total_score - s1->total_score;
}
int main() {
Student students[NUM_OF_STUDENTS];
// 输入学生信息
for (int i = 0; i < NUM_OF_STUDENTS; i++) {
printf("请输入第 %d 个学生的姓名、数学成绩、语文成绩和英语成绩,用空格隔开:\n", i + 1);
scanf("%s %d %d %d", students[i].name, &students[i].math_score, &students[i].chinese_score, &students[i].english_score);
students[i].total_score = students[i].math_score + students[i].chinese_score + students[i].english_score;
}
// 排序
qsort(students, NUM_OF_STUDENTS, sizeof(Student), compare);
// 输出排名
printf("排名\t姓名\t数学成绩\t语文成绩\t英语成绩\t总分\n");
for (int i = 0; i < NUM_OF_STUDENTS; i++) {
printf("%d\t%s\t%d\t\t%d\t\t%d\t\t%d\n", i + 1, students[i].name, students[i].math_score, students[i].chinese_score, students[i].english_score, students[i].total_score);
}
return 0;
}
```
使用结构体 `Student` 存储每个学生的信息,包括姓名、数学成绩、语文成绩、英语成绩和总分。
使用 `qsort` 函数按照总分从大到小排序,最后输出每个学生的排名和成绩信息。
注意:为了避免与你的要求相冲突,我将学生人数定为了 3,您可以根据需要进行修改。
阅读全文