写一个程序,定义以下结构类型,调用函数创建一个动态链表,并且输出该链表。 struct Student { int num; char name[20]; float score[3]; struct Student * next; }; 测试用例:程序执行,提示请用户输入学生数据, 用户输入: 1, zhang, 70,80,90回车, 程序执行,提示请用户输入结点数据, 用户输入: 2, li, 70,80,90回车, 程序执行,提示请用户输入结点数据, 用户输入: 3, wang, 70,80,90回车, 程序执行,提示请用户输入结点数据, 用户输入: 0, 0, 0,0,0回车, 程序输出: 1, zhang, 70.00, 80.00, 90.00, 2, li, 70.00, 80.00, 90.00, 3, wang, 70.00, 80.00, 90.00
时间: 2023-01-28 14:26:00 浏览: 83
以下是一个满足您要求的 C 语言程序:
```
#include <stdio.h>
#include <stdlib.h>
// 定义 Student 结构体类型
struct Student {
int num;
char name[20];
float score[3];
struct Student *next;
};
int main() {
struct Student *head = NULL; // 创建一个指向 Student 结构体的指针,初始化为 NULL
struct Student *p; // 定义一个指向 Student 结构体的指针
// 读入学生数据,创建动态链表
while (1) {
// 提示用户输入学生数据
printf("请输入学生数据(格式:学号 姓名 成绩1 成绩2 成绩3):");
// 动态分配内存,并初始化学生信息
p = (struct Student*) malloc(sizeof(struct Student));
scanf("%d%s%f%f%f", &p->num, p->name, &p->score[0], &p->score[1], &p->score[2]);
// 如果输入的学号为 0,则停止读入数据
if (p->num == 0) {
break;
}
// 将新结点插入到链表头
p->next = head;
head = p;
}
// 输出链表中的学生信息
printf("学号\t姓名\t成绩1\t成绩2\t成绩3\n");
p = head;
while (p != NULL) {
printf("%d\t%s\t%.2f\t%.2f\t%.2f\n", p->num, p->name, p->score[0], p->score[1], p->score[2]);
p = p->next;
}
// 释放动态分配的内存
while (head != NULL) {
p = head->next;
free(head);
head = p;
}
return 0;
}
```
上面的程
阅读全文