写一个程序,定义以下结构类型,调用函数创建一个动态链表,并且输出该链表。 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 21:31:58 浏览: 46
以下是实现动态链表并输出该链表的 C 语言程序:
#include <stdio.h>
#include <stdlib.h>
struct Student {
int num;
char name[20];
float score[3];
struct Student *next;
};
int main() {
struct Student *head, *p, *q;
int num;
char name[20];
float score[3];
head = NULL; // 将链表的头指针设为空指针
printf("请输入学生数据:\n");
scanf("%d,%s,%f,%f,%f", &num, name, &score[0], &score[1], &score[2]);
while (num != 0) {
// 创建新的结点
p = (struct Student*)malloc(sizeof(struct Student));
p->num = num;
strcpy(p->name, name);
p->score[0] = score[0];
p->score[1] = score[1];
p->score[2] = score[2];
p->next = NULL;
if (head == NULL) {
// 如果是第一个结点,则将头指针指向该结点
head = p;
} else {
// 否则将新结点加到链表的末尾
q->next = p;
}
q = p;
printf("请输入学生数据:\n");
scanf("%d,%s,%f,%f,%f", &num, name, &score[0], &score[1], &score[2]);
}
printf("链表中的学生数据:\n");
// 遍历并输出链表中的所有学生数据
p = head;
while (p != NULL) {
printf("%d, %s, %.2f, %.2f, %.2f\n", p->num, p->name, p->score[0], p->score[1], p->score[2]);
p = p->next;
}
return 0;
}