动态构造存放学生信息的结构体数组,按分数排序输出
时间: 2023-07-20 08:29:17 浏览: 88
好的,你可以按照以下步骤动态构造存放学生信息的结构体数组,并按分数排序输出:
1. 定义结构体 Student,包含学生的姓名和成绩两个属性。
2. 使用 `malloc` 函数动态分配存放学生信息的结构体数组,并根据用户输入初始化数组元素。
3. 使用 C 语言中的 `qsort` 函数对结构体数组进行排序,排序的依据是学生的成绩。
4. 遍历数组将排序后的结果输出。
5. 使用 `free` 函数释放动态分配的内存。
以下是示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义结构体
struct Student {
char name[20];
int score;
};
// 比较函数,用于 qsort 排序
int cmp(const void *a, const void *b) {
return ((struct Student *)b)->score - ((struct Student *)a)->score;
}
int main() {
int n;
printf("请输入学生人数:");
scanf("%d", &n);
// 动态分配存放学生信息的结构体数组
struct Student *students = (struct Student *)malloc(n * sizeof(struct Student));
if (students == NULL) {
printf("内存分配失败!");
return 1;
}
// 初始化数组元素
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的姓名和成绩(用空格隔开):", i + 1);
scanf("%s %d", students[i].name, &students[i].score);
}
// 排序
qsort(students, n, sizeof(struct Student), cmp);
// 输出
printf("按成绩排序后的学生信息如下:\n");
for (int i = 0; i < n; i++) {
printf("%s %d\n", students[i].name, students[i].score);
}
// 释放内存
free(students);
return 0;
}
```
在这个示例代码中,我们首先定义了一个结构体 Student,包含学生的姓名和成绩两个属性。然后根据用户输入动态分配存放学生信息的结构体数组,并使用循环初始化数组元素。接着使用 qsort 函数对结构体数组进行排序,排序的依据是学生的成绩。最后遍历数组将排序后的结果输出,并使用 free 函数释放动态分配的内存。