建立一个学生结构,成员包括学号(字符串)、姓名(字符串)、年龄(整数)、成绩数组(5个整数的数组)。建立一个学生结构数组,从键盘读入5位同学的信息。存入数组中。编写程序,将这5位同学进行递增排序,先按照总分,总分相同再按照前3门课,如果仍然相同,则按照学号递增排序。输出排序后的信息,包括学号、姓名、年龄和成绩。
时间: 2023-03-19 20:23:38 浏览: 113
实验2资料-20181
以下是用C语言实现的代码,按照要求对5位同学进行递增排序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char id[20]; // 学号
char name[20]; // 姓名
int age; // 年龄
int scores[5]; // 成绩数组
int totalScore; // 总分
} Student;
// 比较函数,用于qsort排序
int compare(const void *a, const void *b) {
Student *s1 = (Student *)a;
Student *s2 = (Student *)b;
if (s1->totalScore != s2->totalScore) {
return s1->totalScore - s2->totalScore;
} else if (s1->scores[0] != s2->scores[0]) {
return s1->scores[0] - s2->scores[0];
} else if (s1->scores[1] != s2->scores[1]) {
return s1->scores[1] - s2->scores[1];
} else if (s1->scores[2] != s2->scores[2]) {
return s1->scores[2] - s2->scores[2];
} else {
return strcmp(s1->id, s2->id);
}
}
int main() {
Student students[5];
// 从键盘读入5位同学的信息
for (int i = 0; i < 5; i++) {
printf("请输入第%d位同学的学号、姓名、年龄和5门课成绩:\n", i+1);
scanf("%s%s%d%d%d%d%d", students[i].id, students[i].name, &students[i].age,
&students[i].scores[0], &students[i].scores[1], &students[i].scores[2], &students[i].scores[3], &students[i].scores[4]);
// 计算总分
students[i].totalScore = 0;
for (int j = 0; j < 5; j++) {
students[i].totalScore += students[i].scores[j];
}
}
// 对学生数组进行排序
qsort(students, 5, sizeof(Student), compare);
// 输出排序后的信息
printf("排序后的信息:\n");
for (int i = 0; i < 5; i++) {
printf("%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\n", students[i].id, students[i].name, students[i].age,
students[i].scores[0], students[i].scores[1], students[i].scores[2], students[i].scores[3], students[i].scores[4]);
}
return 0;
}
```
代码中,首先定义了一个 `Student` 结构体,包含了学生的学号、姓名、年龄、成绩数组和总分。接着定义了一个 `compare` 函数,用于在 `qsort` 排序时进行比较。在 `main` 函数中,先从键盘读入5位同学的信息,然后计算总分,再对学生数组进行排序,最后
阅读全文