定义包含学号姓名成绩的结构体,编写c语言程序读入n个学生成绩信息,并对学生成绩从高到低排序。
时间: 2024-03-24 10:41:25 浏览: 90
可以按照以下步骤编写程序:
1. 定义包含学号、姓名和成绩的结构体。
```c
typedef struct {
int id;
char name[20];
double score;
} Student;
```
2. 读入 n 个学生成绩信息,存储到结构体数组中。
```c
int n;
printf("请输入学生人数:");
scanf("%d", &n);
Student students[n];
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的学号、姓名和成绩(用空格隔开):", i + 1);
scanf("%d %s %lf", &students[i].id, students[i].name, &students[i].score);
}
```
3. 对学生成绩从高到低排序。可以使用冒泡排序或快速排序等算法,这里演示冒泡排序的方法。
```c
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) {
// 交换两个学生的信息
Student temp = students[j];
students[j] = students[j+1];
students[j+1] = temp;
}
}
}
```
4. 输出排序后的学生成绩信息。
```c
printf("按成绩从高到低排序后的学生信息如下:\n");
for (int i = 0; i < n; i++) {
printf("学号:%d,姓名:%s,成绩:%.2lf\n", students[i].id, students[i].name, students[i].score);
}
```
完整代码如下:
```c
#include <stdio.h>
typedef struct {
int id;
char name[20];
double score;
} Student;
int main() {
int n;
printf("请输入学生人数:");
scanf("%d", &n);
Student students[n];
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的学号、姓名和成绩(用空格隔开):", i + 1);
scanf("%d %s %lf", &students[i].id, students[i].name, &students[i].score);
}
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) {
// 交换两个学生的信息
Student temp = students[j];
students[j] = students[j+1];
students[j+1] = temp;
}
}
}
printf("按成绩从高到低排序后的学生信息如下:\n");
for (int i = 0; i < n; i++) {
printf("学号:%d,姓名:%s,成绩:%.2lf\n", students[i].id, students[i].name, students[i].score);
}
return 0;
}
```
阅读全文