模拟试题

3773考试网计算机等级考试模拟试题正文

2014年3月全国计算机二级C语言上机模拟试题十三之2

来源:2exam.com 2013-10-30 19:39:22


  解题思路: 

  本题是考察使用链表方法,对链表的结点数据进行升序排列。 

  第一处:使用结构指针p,来控制链表的结束,p必须指向h结构指针的next指针,来定位p 的初始位置。所以应填写:h->next。 

  第二处:使用while循环,对链表中结点的数据进行排序,q必须指向p结构指针的next指针。所以应填写:p->next。 

  第三处:如果当前结点中的数据大于(大于等于)循环中的结点数据,那么进行交换,所

  以应填写:>(或>=)。 

  *************************************************** 

  给定程序MODI1.C是建立一个带头结点的单向链表, 并用随机函数为各结点数 据域赋值。函数fun的作用是求出单向链表结点(不包括头结点)数据域中的最大值, 并且作为函数值返回。 

  请改正函数fun中指定部位的错误, 使它能得出正确的结果。 

  注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构! 

  给定源程序: 

  #include  

  #include  

  typedef struct aa 

  { int data; 

  struct aa *next; 

  } NODE; 

  fun ( NODE *h ) 

  { int max=-1; 

  NODE *p; 

  p=h ; 

  while(p) 

  { if(p->data>max ) 

  max=p->data; 

  p=h->next ; 

  } 

  return max; 

  } 

  outresult(int s, FILE *pf) 

  { fprintf(pf,"\nThe max in link : %d\n",s);} 

  NODE *creatlink(int n, int m) 

  { NODE *h, *p, *s, *q; 

  int i, x; 

  h=p=(NODE *)malloc(sizeof(NODE));h->data=9999; 

  for(i=1; i<=n; i++) 

  { s=(NODE *)malloc(sizeof(NODE)); 

  s->data=rand()%m; s->next=p->next; 

  p->next=s; p=p->next; 

  } 

  p->next=NULL; 

  return h; 

  } 

  outlink(NODE *h, FILE *pf) 

  { NODE *p; 

  p=h->next; 

  fprintf(pf,"\nTHE LIST :\n\n HEAD "); 

  while(p) 

  { fprintf(pf,"->%d ",p->data); p=p->next; } 

  fprintf(pf,"\n"); 

  } 

  main() 

  { NODE *head; int m; 

  head=creatlink(12, 100); 

  outlink(head , stdout); 

  m=fun(head); 

  printf("\nTHE RESULT :\n"); outresult(m, stdout); 

  } 

触屏版 电脑版
3773考试网 琼ICP备12003406号-1