建立一个学生结构,成员包括学号(字符串)、姓名(字符串)、年龄(整数)、成绩数组(5个整数的数组)。建立一个学生结构数组,从键盘读入5位同学的信息。存入数组中。编写程序,将这5位同学进行递增排序,先按照总分,总分相同再按照前3门课,如果仍然相同,则按照学号递增排序。输出排序后的信息,包括学号、姓名、年龄和成绩。
时间: 2023-03-19 08:25:33 浏览: 115
好的,我能够回答你的问题。以下是对你的问题的回答:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student {
char id[10];
char name[20];
int age;
int score[5];
int total_score;
};
int cmp(const void *a, const void *b) {
struct student *s1 = (struct student *)a;
struct student *s2 = (struct student *)b;
if (s1->total_score != s2->total_score) {
return s1->total_score - s2->total_score;
} else if (s1->score[0] != s2->score[0]) {
return s1->score[0] - s2->score[0];
} else if (s1->score[1] != s2->score[1]) {
return s1->score[1] - s2->score[1];
} else if (s1->score[2] != s2->score[2]) {
return s1->score[2] - s2->score[2];
} else {
return strcmp(s1->id, s2->id);
}
}
int main() {
struct student students[5];
// 从键盘读入5位同学的信息
for (int i = 0; i < 5; i++) {
printf("请输入第%d位同学的信息:\n", i+1);
printf("学号:");
scanf("%s", students[i].id);
printf("姓名:");
scanf("%s", students[i].name);
printf("年龄:");
scanf("%d", &students[i].age);
printf("成绩:");
for (int j = 0; j < 5; j++) {
scanf("%d", &students[i].score[j]);
students[i].total_score += students[i].score[j];
}
}
// 递增排序
qsort(students, 5, sizeof(struct student), cmp);
// 输出排序后的信息
printf("排序后的信息:\n");
for (int i = 0; i < 5; i++) {
printf("学号:%s, 姓名:%s, 年龄:%d, 成绩:", students[i].id, students[i].name, students[i].age);
for (int j = 0; j < 5; j++) {
printf("%d ", students[i].score[j]);
}
printf("\n");
}
return 0;
}
```
这个程序使用了一个结构体 `student` 来保存每个同学的信息,包括学号、姓名、年龄和成绩。其中,成绩以一个长度为 5 的整型数组来保存,总分则在结构体中额外存储一个变量。
程序先从键盘读入 5 位同学的信息,然后使用 `qsort` 函数对数组进行排序。排序的规则是,首先按照总分递增排序,如果总分相同则按照前 3 门课的成绩递增排序,如果仍然相同则按照学号递增排序。
最后,程序输出排序后的信息,包括
阅读全文