C语言数组定义 30 名学生信息包含成绩,姓名和学号,实际人数从键盘上输入:(1)采用交换法实现成绩从高到低排序,并输出每一个学生所有信息
时间: 2024-12-20 13:24:27 浏览: 19
在C语言中,首先需要定义一个结构体来存储每个学生的个人信息,包括成绩、姓名和学号。假设我们叫它`Student`。然后我们可以动态分配内存来存储指定数量的学生,因为实际人数是用户输入的。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义学生结构体
struct Student {
int score;
char name[50];
int id;
};
void swap(struct Student* a, struct Student* b) {
int temp_score = a->score;
strcpy(a->name, b->name);
a->id = b->id;
b->score = temp_score;
}
int main() {
int num_students;
printf("请输入学生人数:");
scanf("%d", &num_students);
// 动态分配内存
struct Student* students = malloc(num_students * sizeof(struct Student));
for (int i = 0; i < num_students; ++i) {
printf("请输入学生 %d 的分数、姓名和学号:\n", i+1);
scanf("%d%s%d", &students[i].score, students[i].name, &students[i].id);
}
// 交换法实现成绩从高到低排序
for (int i = 0; i < num_students - 1; ++i) {
for (int j = 0; j < num_students - i - 1; ++j) {
if (students[j].score < students[j + 1].score) {
swap(&students[j], &students[j + 1]);
}
}
}
// 输出排序后的学生信息
for (int i = 0; i < num_students; ++i) {
printf("学生 %d: 分数:%d, 姓名:%s, 学号:%d\n", i+1, students[i].score, students[i].name, students[i].id);
}
// 释放内存
free(students);
return 0;
}
```
阅读全文