2013年计算机二级C语言上机题库四十一_第2页

考试站(www.examzz.com)   【考试站:中国教育考试第一门户】   2013年6月3日
 第二题:改错题
  下列给定程序是建立一个带头结点的单向链表,并用随机函数为各结点赋值。函数fun的功能是将单向链表结点(不包括头结点)数据域为偶数的值累加起来,并且作为函数值返回。
  请改正函数fun中的错误,使它能得出正确的结果。
  注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
  #include <stdio.h>
  #include <conio.h>
  #include <stdlib.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)
  {转自:考试站 examzz.com
  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\nTHE LIST :\n\n HEAD");
  while (p)
  {
  printf("->%d ", p->data);
  p = p->next;
  }
  printf("\n");
  }
  main()
  {
  NODE *head;
  int sum;
  head = creatlink(10);
  outlink(head);
  sum = fun(head);
  printf("\nSUM=%d", sum);
  }
  第二题:
  第1处:while(p->next)应改为while(p!=NULL)
  第2处:p=h->next;应改为p=p->next;

相关文章