c语言使用链表实现成绩系统,建立后打印平均分大于80分的同学的信息
时间: 2024-05-10 14:16:16 浏览: 60
纯C语言实现学生成绩管理系统,采用链表结构
5星 · 资源好评率100%
以下是使用链表实现成绩系统并打印平均分大于80分的同学信息的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 20
typedef struct student {
char name[MAX_NAME_LEN];
float score1;
float score2;
float score3;
struct student *next;
} Student;
float get_average(float score1, float score2, float score3) {
return (score1 + score2 + score3) / 3.0;
}
int main() {
Student *head = NULL;
Student *p = NULL;
Student *q = NULL;
char name[MAX_NAME_LEN];
float score1, score2, score3;
int count = 0;
float total_score = 0;
float average_score = 0;
// 创建链表并输入学生信息
while (1) {
p = (Student *)malloc(sizeof(Student));
printf("请输入学生的姓名:");
scanf("%s", p->name);
printf("请输入学生的三门课程成绩:");
scanf("%f %f %f", &p->score1, &p->score2, &p->score3);
total_score += get_average(p->score1, p->score2, p->score3);
count++;
p->next = NULL;
if (head == NULL) {
head = p;
} else {
q->next = p;
}
q = p;
printf("是否继续输入?(y/n)");
char c;
scanf(" %c", &c);
if (c == 'n' || c == 'N') {
break;
}
}
// 打印平均分大于80分的同学信息
printf("\n平均分大于80分的同学信息:\n");
p = head;
while (p != NULL) {
average_score = get_average(p->score1, p->score2, p->score3);
if (average_score > 80) {
printf("姓名:%s,平均分:%.2f\n", p->name, average_score);
}
p = p->next;
}
// 计算并打印所有学生的平均分
average_score = total_score / count;
printf("\n所有学生的平均分:%.2f", average_score);
// 释放链表空间
p = head;
while (p != NULL) {
q = p->next;
free(p);
p = q;
}
return 0;
}
```
在本代码中,我们定义了一个`Student`结构体,其中包含学生的姓名和三门课程的成绩,以及一个指向下一个学生的指针。我们使用`while`循环创建链表,并在每次循环中输入一个学生的信息,并计算平均分和总分数。在链表创建完毕后,我们使用另一个`while`循环遍历链表,找出平均分大于80分的同学并打印他们的信息,同时计算所有学生的平均分并打印出来。最后,我们释放链表占用的空间。
请注意,本代码中没有对用户输入的数据进行任何错误处理,这是为了简化代码,实际应用中需要对用户输入的数据进行合理性检查。
阅读全文