写一个程序,定义以下结构类型,调用函数创建一个动态链表,并且输出该链表。 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 19:25:59 浏览: 116
以下是一个示例程序,实现了上述功能:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Student {
int num;
char name[20];
float score[3];
struct Student *next;
};
// 创建一个新结点
struct Student *create_node(int num, char *name, float *score) {
struct Student *new_node = (struct Student*)malloc(sizeof(struct Student));
new_node->num = num;
strcpy(new_node->name, name);
for (int i = 0; i < 3; i++) {
new_node->score[i] = score[i];
}
new_node->next = NULL;
return new_node;
}
// 在链表末尾添加一个新结点
void add_node(struct Student *head, struct Student *new_node) {
struct Student *p = head;
while (p->next != NULL) {
p = p->next;
}
p->next = new_node;
}
// 输出链表中的所有结点
void print_list(struct Student *head) {
struct Student *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;
}
}
int main() {
// 创建链表头结点
struct Student *head = (struct Student*)malloc(sizeof(struct Student));
head->num = 0;
strcpy(head->name, "head");
head->next = NULL;
// 读入学生数据,并创建结点
while (1) {
int num;
char name[20];
float score[3];
printf("请输入学生数据(格式: 学号 姓名 成绩1 成绩2 成绩3): ");
scanf("%d%s%f%f%f", &num, name, &score[0], &score[1], &score[2]);
if (num == 0) {
break;
}
// 创建新结点
struct Student *new_node = create_node(num, name, score);
// 将新结点添加到链表末尾
阅读全文