问答题
下列给定程序是建立一个带头结点的单向链表,并用随机函数为各结点赋值。函数fun的功能是将单向链表结点(不包括头结点)数据域为偶数的值累加起来,并且作为函数值返回。 请改正函数fun中的错误,使它能得出正确的结果。 注意:部分源程序在文件MODI1.C中,不要改动maln函数,不得增行或删行,也不得更改程序的结构! 试题程序:#include < stdio .h >#include < conio .h >#include < stcilib.h >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)); s 一 > data = rand () % 16; s 一 > next =p 一 > next; p 一 > next = s; p =p 一 > next; } p 一 > next = NULL; return h;}outlink (NODE*h){ NODE *p; p= h 一 > next; printf ("/n/n The LIST :/n/nHEAD") ; 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", sum) ;}
【正确答案】正确答案:(1)while (p!=NULL) (2)p=p一 >next;
【答案解析】解析:(1)判断当前指针p指向的结点是否存在,若存在则对该结点数据域进行判断操作。 (2)判断结束后指针指向下一个结点。