当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
2015年计算机二级C语言上机题库及答案(91)
发布时间:2011/10/1 9:49:55 来源:城市学习网 编辑:ziteng
  一、填空题:给定程序中, 函数fun的功能是用函数指针指向要调用的函数,并进行调用。

  规定在__2__处使f指向函数f1,在__3__处使f指向函数f2。当调用正确时,程序输出:x1=5.000000, x2=3.000000, x1*x1+x1*x2=40.000000

  请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。

  注意:源程序存放在考生文件夹下的BLANK1.C中。

  不得增行或删行,也不得更改程序的结构!

  给定源程序:

  #include

  double f1(double x)

  {return x*x;}

  double f2(double x, double y)

  {return x*y;}

  double fun(double a, double b)

  {

  /**********found**********/

  __1__ (*f)();

  double r1, r2;

  /**********found**********/

  f = __2__ ; /* point fountion f1 */

  r1 = f(a);

  /**********found**********/

  f = __3__ ; /* point fountion f2 */

  r2 = (*f)(a, b);

  return r1 + r2;

  }

  main()

  {double x1=5, x2=3, r;

  r = fun(x1, x2);

  printf("\nx1=%f, x2=%f, x1*x1+x1*x2=%f\n",x1, x2, r);

  }

  解题答案:

  /**********第一空**********/

  double (*f)();

  /**********第二空**********/

  f = f1 ; /* point fountion f1 */

  /**********第三空**********/

  f = f2 ; /* point fountion f2 */

  ****************************************** [NextPage]   二、改错题:给定程序MODI1.C是建立一个带头结点的单向链表,并用随机函数为各结点赋值。函数fun的功能是将单向链表结点 (不包括头结点)数据域为偶数的值累加起来, 并且作为函数值返回。

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

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

  给定源程序:

  #include

  #include

  typedef struct aa

  {int data; struct aa *next;}NODE;

  int fun(NODE *h)

  {int sum = 0 ;

  NODE *p;

  /***********found**********/

  p=h;

  while(p)

  {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();

  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 ,"\n\nTHE LIST :\n\n HEAD ");

  while(p)

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

  fprintf (pf,"\n");

  }

  outresult(int s, FILE *pf)

  {fprintf(pf,"\nThe sum of even numbers : %d\n",s);}

  main()

  {NODE *head; int even;

  head=creatlink(12);

  head->data=9000;

  outlink(head , stdout);

  even=fun(head);

  printf("\nThe result :\n"); outresult(even, stdout);

  }

  解题答案:

  /***********found**********/

  p=h->next;

  /***********found**********/

  p=p->next;

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

 [NextPage]   三、程序题:请编写函数fun, 函数的功能是: 判断字符串是否为回文?若是, 函数返回1, 主函数中输出: YES, 否则返回0, 主函数中输出NO。回文是指顺读和倒读都一样的字符串。

  例如, 字符串LEVEL是回文, 而字符串123312就不是回文。

  注意:部分源程序在文件PROG1.C中。

  请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

  给定源程序:

  #include

  #include

  #define N 80

  int fun(char *str)

  {

  }

  main()

  {char s[N] ;void NONO ();

  printf("Enter a string: "); gets(s);

  printf("\n\n"); puts(s);

  if(fun(s)) printf("YES\n");

  else printf("NO\n");

  NONO();

  }

  void NONO ()

  {/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */

  FILE *rf, *wf ;

  int i ; char s[N] ;

  rf = fopen("in.dat","r");

  wf = fopen("out.dat","w");

  for(i = 0 ; i < 10 ; i++) {

  fscanf(rf, "%s", s);

  if(fun(s)) fprintf(wf, "%s YES\n", s);

  else fprintf(wf, "%s NO\n", s);

  }

  fclose(rf); fclose(wf);

  }

  参考答案:

  int fun(char *str)

  {

  int i, j = strlen(str) ;

  for(i = 0 ; i < j / 2 ; i++)

  if(str[i] != str[j - i - 1]) return 0 ;

  return 1 ;

  }

  main()

  { char s[N] ;

  printf("Enter a string: ") ; gets(s) ;

  printf("\n\n") ; puts(s) ;

  if(fun(s)) printf(" YES\n") ;

  else printf(" NO\n") ;

  NONO() ;

  }

广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved