创建动态链表并打印链表内容。要求通过键盘读入学生的学号和分数,当输入的学号为0时表示链表创建结束,并将读入的学生学号和成绩打印输出。下面程序中存在比较隐蔽的错误,请通过分析和调试程序,发现并改正程序中的错误。改错时不能改变程序原有的意图。 注意:将修改后的完整的源程序写在答题区内。 #include <stdio.h> #define SIZE sizeof(struct node) struct node { long num; float score; struct node *next; } int main() { int n = 0; struct node *head = NULL, *p1, *p2; p1 = p2 = (struct node*)malloc(SIZE); printf("Input %d node data:\n", n + 1); scanf("%d%f", &p1->num, &p1->score); while (p1->num != 0) {
时间: 2023-06-07 11:09:58 浏览: 162
学生成绩管理系统(cpp)
5星 · 资源好评率100%
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct student{
int num;
int grade;
struct student *next;
}STU;
int main(){
STU *head, *tail, *p;
head = (STU*)malloc(sizeof(STU));
head->next = NULL;
printf("please input the score (num grade):");
tail = head;
while(1){
p = (STU*)malloc(sizeof(STU));
scanf("%d", &p->num);
if(p->num == 0){
break;
}
scanf("%d", &p->grade);
tail->next = p; // 错误:没有将 p 链接到尾节点上,导致只有第一个节点被链接
tail = p;
}
printf("\nnum\tgrade\n");
p = head->next; // 错误:没有将 p 指向链表的第一个节点
while(p != NULL){
printf("%d\t%d\n", p->num, p->grade);
p = p->next;
}
return 0;
}
```
阅读全文