在学生基本信息表中,包含了每个学生的学号、姓名和成绩等相关信息。请使用C语言编写程序,输入每个学生的信息,并按照成绩从低到高的顺序输出每个学生的信息。
时间: 2024-09-25 18:03:33 浏览: 49
在C语言中,我们可以使用链表或动态数组来存储学生信息,并对成绩进行排序。这里我将演示如何使用链表和qsort函数来实现这一功能。首先,我们需要定义一个学生结构体,然后创建一个节点结构,用于存储学生的数据。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct StudentNode {
int id;
char name[50];
float score;
struct StudentNode* next;
} StudentNode;
typedef struct {
int data;
struct StudentNode* pointer;
} ScoreCompare;
void inputStudent(StudentNode** students, int* size) {
*size = 0;
StudentNode* current = NULL;
while (true) {
printf("请输入学号、姓名和成绩(输入-1结束):\n");
int id;
scanf("%d", &id);
if (id == -1)
break;
current = (StudentNode*)malloc(sizeof(StudentNode));
strcpy(current->name, "");
scanf("%s", current->name);
scanf("%f", ¤t->score);
current->next = NULL;
if (*size == 0) {
*students = current;
} else {
(*students)->next = current;
}
(*size)++;
}
}
void printStudents(StudentNode* students) {
StudentNode* temp = students;
while (temp != NULL) {
printf("学号:%d 姓名:%s 成绩:%f\n", temp->id, temp->name, temp->score);
temp = temp->next;
}
}
// 对成绩进行升序比较
int compare(const void* a, const void* b) {
const ScoreCompare* sa = (const ScoreCompare*)a;
const ScoreCompare* sb = (const ScoreCompare*)b;
return (sa->data < sb->data);
}
int main() {
int studentCount;
StudentNode* students = NULL;
inputStudent(&students, &studentCount);
qsort(students, studentCount, sizeof(StudentNode), compare);
printf("按照成绩从低到高排序的学生信息:\n");
printStudents(students);
// 清理内存
for (int i = 0; i < studentCount; i++) {
free(students[i]);
}
free(students);
return 0;
}
阅读全文