现有一个系统,需要对系统内的学生进行排序,总分数高的排在前,若分数相等,则根据学生姓名的字典序,字典序大的排在前(使用strcmp函数)。请你完善所给程序以完成这个功能。 【输入形式】 第1行为学生总数n,第2行到第n+1行为学生信息,内容为学生姓名和学生总成绩,以空格隔开。 【输出形式】 输出排好序的学生信息,格式同输入。.C
时间: 2024-01-19 10:03:46 浏览: 72
c代码-输入两个学生的信息,判定成绩大小。若大则输出大,若相等则输出两个学生的信息
以下是完善后的代码:
```c
#include <stdio.h>
#include <string.h>
struct Student {
char name[20];
int score;
} stu[100];
int cmp(struct Student a, struct Student b) {
if(a.score == b.score) {
return strcmp(a.name, b.name) > 0;
}
return a.score > b.score;
}
int main() {
int n;
scanf("%d", &n);
for(int i = 0; i < n; i++) {
scanf("%s %d", stu[i].name, &stu[i].score);
}
for(int i = 0; i < n - 1; i++) {
for(int j = i + 1; j < n; j++) {
if(cmp(stu[i], stu[j])) {
struct Student temp = stu[i];
stu[i] = stu[j];
stu[j] = temp;
}
}
}
for(int i = 0; i < n; i++) {
printf("%s %d\n", stu[i].name, stu[i].score);
}
return 0;
}
```
程序中定义了一个结构体 `Student`,包含学生姓名和总成绩。`cmp` 函数用于比较两个学生的大小,首先比较总成绩,如果总成绩相等,再比较姓名的字典序。`main` 函数中先读入学生信息,然后使用冒泡排序将学生按照要求排序,最后输出排好序的学生信息。
阅读全文