问答题 下列给定程序是建立一个带头结点的单向链表,并用随机函数为各结点赋值。函数fun的功能是将单向链表结点(不包括头结点)数据域为偶数的值累加起来,并且作为函数值返回。 请改正函数fun中的错误,使它能得出正确的结果。 注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构! 试题程序: #include #include #include typedef struct且aa { int data; struct aa*next; }NODE; int fun(NODE*h) { int sum=0; NODE*p; p=h->next; /*************found**************/ while(P->next) {if(P->data%2==0) sum+=P->data; /*************found**************/ P=h->next; } return sum; } NODE*creatlink(int n) { NODE*h,*p,*s; int i; h=P=(NODE*)malloc(sizeof(NODE)); for(i=1;i<n;i++) { s=(NODE*)malloc(sizeof(NODE)); 8->data=rand()%16; S->next=P->next: P->next=s: p=p->next: } p->next=NULL; retum h; } outlink(NODE*h) { NODE*p; P=h->next; printf("\n\n The LIST:\n\n HEAD"); while(P) {printf("->%d",P->data); P=P->next;} printf("\n"); } void main() { NODE*head;int sum; system("CLS"); head=creatlink(10); outlink(head); sum=fun(head); printf("\nSUM=%d",sunl); }
【正确答案】(1)第13行:while(p)或while(p!=NULL) (2)第17行:p=p->next;
【答案解析】解析:(1)判断当前指针p指向的结点是否存在,若存在则对该结点数据域进行判断操作,而不是判断p指针的指针域是否为空。 (2)判断结束后指针应指向下一个结点。