创建动态链表并打印链表内容。要求通过键盘读入学生的学号和分数,当输入的学号为0时表示链表创建结束,并将读入的学生学号 和成绩打印输出。下面程序中存在比较隐蔽的错误,请通过分析和调试程序,发现并改正程序中的错误。改错时不能改变程序原有 的意图。 注意:将修改后的完整的源程序写在答题区内。 #包括< stdio。h> #定义struct节点的SIZE) 结构节点 { 长num; 浮动得分; Struct节点*next; } int主要() { int n = 0; struct node *head =NULL, *p1, *p2; p1 =p2 =(struct node*) malloc(SIZE); printf("输入%d节点数据:\n", n +1); Scanf ("%d%f", &p1->num, &p1->score); 而全国矿工工会(p1 - > !=0) { 如果(+ + n == 1) 头= p1; 其他的 p2 - > = p1; P1 = p2; p1 =(struct node*) malloc(SIZE); printf("输入%d节点数据:\n", n +1); Scanf ("%d%f", &p1->num, &p1->score); } 免费的(p1); printf("坑列表:\ n");
时间: 2023-07-14 16:12:14 浏览: 231
程序存在以下问题:
1. 结构体定义中的“长”应该改为“int”;
2. 变量head的类型应为“struct node*”;
3. 在给p2赋值时,应该先将p1赋给p2的next,再将p2赋给p1,否则会导致链表断掉;
4. 打印输出时应该用“\n”而不是“\ n”。
修改后的程序如下:
```c
#include <stdio.h>
#include <stdlib.h>
#define SIZE sizeof(struct node)
struct node {
int num;
float score;
struct node *next;
};
int main() {
int n = 0;
struct node *head = NULL, *p1, *p2;
p1 = p2 = (struct node*)malloc(SIZE);
printf("输入%d节点数据:\n", n + 1);
scanf("%d%f", &p1->num, &p1->score);
while (p1->num != 0) {
++n;
if (n == 1) {
head = p1;
} else {
p2->next = p1;
}
p2 = p1;
p1 = (struct node*)malloc(SIZE);
printf("输入%d节点数据:\n", n + 1);
scanf("%d%f", &p1->num, &p1->score);
}
free(p1);
p2->next = NULL;
printf("链表内容:\n");
p1 = head;
while (p1 != NULL) {
printf("学号:%d,分数:%.2f\n", p1->num, p1->score);
p1 = p1->next;
}
return 0;
}
```
阅读全文