这道问题要求用c语言指针结构体解在主函数中输入n个学生的信息(包括学号、姓名、成绩),调用函数按照成绩从高到低的顺序进行排序,最后在主函数中输出排序后的学生信息。不用库函数
时间: 2024-03-10 20:46:46 浏览: 73
好的,这是一个比较经典的排序问题,以下是一个可能的解法:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 50
struct student {
char id[MAX_LEN];
char name[MAX_LEN];
int score;
};
void sort_students(struct student *students, int n) {
// 冒泡排序
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (students[j].score < students[j + 1].score) {
// 交换两个结构体
struct student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
}
int main() {
int n;
printf("请输入学生人数:");
scanf("%d", &n);
struct student *students = (struct student *) malloc(sizeof(struct student) * n);
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的信息(学号、姓名、成绩,中间用空格隔开):", i + 1);
scanf("%s %s %d", students[i].id, students[i].name, &students[i].score);
}
sort_students(students, n);
printf("学号\t姓名\t成绩\n");
for (int i = 0; i < n; i++) {
printf("%s\t%s\t%d\n", students[i].id, students[i].name, students[i].score);
}
// 释放内存
free(students);
return 0;
}
```
在这个程序中,我们首先定义了一个结构体 `student`,包含了学号、姓名和成绩三个字段。然后,我们通过动态内存分配来创建一个大小为 `n` 的 `students` 数组,用来存储所有学生的信息。
接下来,我们在主函数中进行输入,并调用 `sort_students` 函数进行排序。这个函数使用冒泡排序的方法,将成绩从高到低进行排序。排序完成后,我们在主函数中进行输出。
最后,我们通过 `free` 函数来释放内存。
阅读全文