C语言用数组输入20名学生成绩姓名和编号,输出从大到小的排序
时间: 2024-09-26 14:17:30 浏览: 101
在C语言中,你可以使用结构体来存储学生的姓名、编号和成绩,并通过动态内存分配创建一个数组来存储这些数据。这里是一个基本的例子,展示了如何实现这个功能:
首先,定义一个结构体`Student`:
```c
typedef struct {
char name[50];
int id;
float score;
} Student;
```
然后,创建一个函数来比较学生并进行排序:
```c
int compareStudents(const void *a, const void *b) {
const Student *s1 = (const Student *) a;
const Student *s2 = (const Student *) b;
return s2->score - s1->score; // 降序排列,如果需要升序则取负数
}
```
接下来,在主函数中输入20名学生的信息,并使用`qsort`函数对数组进行排序:
```c
#include <stdio.h>
#include <stdlib.h>
void inputStudents(Student *students, int n) {
for (int i = 0; i < n; i++) {
printf("请输入第%d位学生的信息 (name, id, score): ", i + 1);
scanf("%s %d %.2f", students[i].name, &students[i].id, &students[i].score);
}
}
int main() {
int numStudents = 20;
Student *students = malloc(numStudents * sizeof(Student));
inputStudents(students, numStudents);
// 使用快速排序或其他适当的排序算法,这里使用标准库qsort
qsort(students, numStudents, sizeof(Student), compareStudents);
printf("按照分数从高到低排序后的学生信息:\n");
for (int i = 0; i < numStudents; i++) {
printf("%d. %s, ID: %d, Score: %.2f\n", i + 1, students[i].name, students[i].id, students[i].score);
}
free(students); // 别忘了释放内存
return 0;
}
```
当你运行此程序时,它会提示用户输入每个学生的姓名、编号和成绩,然后按分数从高到低展示排序结果。
阅读全文