编写c语言程序,输入n个学生的学号和成绩(有1位小数),按成绩从高到低排序输出,n 小于50,学号小于10位。
时间: 2023-06-27 09:03:30 浏览: 81
以下是一个简单的 C 语言程序,可以实现上述要求:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student {
char id[11]; // 学号
float score; // 成绩
};
int cmp(const void *a, const void *b) {
float x = (*(struct student*)b).score - (*(struct student*)a).score;
if (x == 0) return strcmp((*(struct student*)a).id, (*(struct student*)b).id);
return x > 0 ? 1 : -1;
}
int main() {
int n;
scanf("%d", &n);
struct student *students = (struct student*)malloc(n * sizeof(struct student));
for (int i = 0; i < n; i++) {
scanf("%s%f", students[i].id, &students[i].score);
}
qsort(students, n, sizeof(struct student), cmp);
for (int i = 0; i < n; i++) {
printf("%s %.1f\n", students[i].id, students[i].score);
}
free(students);
return 0;
}
```
程序首先定义了一个 `student` 结构体,用来存储学生的学号和成绩。然后定义了一个 `cmp` 函数,用来作为 `qsort` 函数的比较函数,按照成绩从高到低排序,如果成绩相同则按学号从小到大排序。最后在 `main` 函数中读入学生信息,利用 `qsort` 函数进行排序,然后输出排序后的结果。
注意,在本程序中,我们使用了动态内存分配来创建一个 `students` 数组,因为学生数目 `n` 在编译时无法确定,只有在运行时才能确定。同时,我们在程序结束时需要使用 `free` 函数释放动态分配的内存,以免内存泄漏。
阅读全文