c语言结构体排序学生成绩,成绩相同时
时间: 2023-07-27 12:13:43 浏览: 129
如果成绩相同时,可以按照学号或者姓名来排序。
以下是按照成绩从高到低排序,成绩相同时按照学号从小到大排序的示例代码。
```c
#include <stdio.h>
#include <string.h>
#define MAX_STUDENTS 100
struct student {
char name[20];
int id;
int score;
};
void sort(struct student *students, int n);
int main() {
struct student students[MAX_STUDENTS] = {
{"Alice", 1, 95},
{"Bob", 2, 80},
{"Charlie", 3, 90},
{"David", 4, 85},
{"Eve", 5, 95},
};
int n = 5;
sort(students, n);
printf("Name\tID\tScore\n");
for (int i = 0; i < n; i++) {
printf("%s\t%d\t%d\n", students[i].name, students[i].id, students[i].score);
}
return 0;
}
void sort(struct student *students, int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (students[j].score < students[j + 1].score ||
(students[j].score == students[j + 1].score && students[j].id > students[j + 1].id)) {
struct student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
}
```
输出:
```
Name ID Score
Alice 1 95
Eve 5 95
Charlie 3 90
David 4 85
Bob 2 80
```
在排序函数中,我们使用了冒泡排序的算法。在比较两个学生的成绩时,如果成绩相同,我们就比较他们的学号。如果学号比较大,就交换他们的位置。这样可以保证在成绩相同时,学号比较小的学生排在前面。
阅读全文