void sort_student(); // 按总分排序学生信息,用链表,用c语言
时间: 2024-02-15 21:02:30 浏览: 56
好的,这是一个按照学生总分排序的C语言程序,使用了链表数据结构实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 学生信息结构体
struct student {
char name[20];
int chinese;
int math;
int english;
int total;
struct student *next;
};
// 创建学生信息链表
struct student *create_student_list() {
struct student *head, *tail, *p;
head = tail = NULL;
char name[20];
int chinese, math, english;
while (1) {
printf("请输入学生姓名(输入0结束):");
scanf("%s", name);
if (strcmp(name, "0") == 0) {
break;
}
printf("请输入语文成绩:");
scanf("%d", &chinese);
printf("请输入数学成绩:");
scanf("%d", &math);
printf("请输入英语成绩:");
scanf("%d", &english);
// 计算总分并创建新节点
p = (struct student*)malloc(sizeof(struct student));
strcpy(p->name, name);
p->chinese = chinese;
p->math = math;
p->english = english;
p->total = chinese + math + english;
p->next = NULL;
// 把新节点插入到链表尾部
if (head == NULL) {
head = tail = p;
} else {
tail->next = p;
tail = p;
}
}
return head;
}
// 按照学生总分排序链表
void sort_student(struct student *head) {
struct student *p, *q, *temp;
int flag;
for (p = head; p != NULL; p = p->next) {
flag = 0;
for (q = head; q->next != NULL; q = q->next) {
if (q->total < q->next->total) {
temp = q->next;
q->next = temp->next;
temp->next = q;
if (q == head) {
head = temp;
} else {
p->next = temp;
}
flag = 1;
}
}
if (flag == 0) {
break;
}
}
}
// 打印学生信息
void print_student(struct student *head) {
struct student *p;
printf("姓名\t语文\t数学\t英语\t总分\n");
for (p = head; p != NULL; p = p->next) {
printf("%s\t%d\t%d\t%d\t%d\n", p->name, p->chinese, p->math, p->english, p->total);
}
}
int main() {
struct student *head;
head = create_student_list();
sort_student(head);
print_student(head);
return 0;
}
```
这个程序会先让用户输入学生信息,包括姓名、语文、数学、英语成绩,然后计算总分并创建一个新节点,把新节点插入到链表尾部。
接着,程序会按照学生总分从大到小排序链表,使用冒泡排序算法实现。最后,程序会打印出排序后的学生信息列表。
阅读全文