下列给定程序是建立一个带头结点的单向链表,并用随机函数为各结点赋值。函数fun的功能是将单向链表结点(不包括头结点)数据域为偶数的值累加起来,并且作为函数值返回。 请改正函数fun中的错误,使它能得出正确的结果。 注意:部分源程序在文件MO

admin2017-09-23  35

问题 下列给定程序是建立一个带头结点的单向链表,并用随机函数为各结点赋值。函数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\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", sum) ;
}

选项

答案(1)while (p!=NULL) (2)p=p一 >next;

解析 (1)判断当前指针p指向的结点是否存在,若存在则对该结点数据域进行判断操作。
(2)判断结束后指针指向下一个结点。
转载请注明原文地址:https://jikaoti.com/ti/yZa0FFFM
0

最新回复(0)