输入所有同学的语文、数学成绩和他们的学号。 以语文为第一关键字,数学为第二关键字排序,按成绩降序排序。 若语文、数学成绩均相同则学号小的同学排前面。 题目保证每个同学的学号不相同。 输出排序后所有同学的学号。
时间: 2024-02-28 18:52:03 浏览: 56
好的,这是用C语言实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
struct Student {
int id; // 学号
int chinese; // 语文成绩
int math; // 数学成绩
};
int cmp(const void *a, const void *b) {
struct Student *s1 = (struct Student *)a;
struct Student *s2 = (struct Student *)b;
if (s1->chinese == s2->chinese) {
if (s1->math == s2->math) {
return s1->id - s2->id; // 学号小的在前面
}
return s2->math - s1->math; // 数学成绩降序
}
return s2->chinese - s1->chinese; // 语文成绩降序
}
int main() {
int n;
scanf("%d", &n);
struct Student stu[n];
for (int i = 0; i < n; i++) {
scanf("%d %d %d", &stu[i].id, &stu[i].chinese, &stu[i].math);
}
qsort(stu, n, sizeof(struct Student), cmp); // 快速排序
for (int i = 0; i < n; i++) {
printf("%d\n", stu[i].id);
}
return 0;
}
```
同样地,我们使用结构体来存储学生信息,并使用qsort函数进行排序。在本题中,我们先按照语文成绩从大到小排序,若语文成绩相同则按照数学成绩从大到小排序,若数学成绩也相同则按照学号从小到大排序。最后输出排序后的所有同学学号即可。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)