就业数据资源平台
当前位置:首页 > C语言程序设计
2013年计算机二级C语言上机试题及答案2

给定程序中, 函数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)
  {
  __1__ (*f)();
  double r1, r2;
  f = __2__ ; /* point fountion f1 */
  r1 = f(a);
  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指向函数f1,所以应填:f1。
  第三处:使f指向函数f2,所以应填:f2。
 给定程序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;
  p=h;
  while(p)
  { if(p->data%2==0)
  sum +=p->data;
  p=h->next;
  }
  return sum;
  }
  NODE *creatlink(int n)
  { NODE *h, *p, *s, *q;
  int i, x;
  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);
  }
  解题思路:
  本题是考察如何使用单向链表把数据域的值按条件进行累加。
  第一处:试题要求不计算头结点,所以应改为:p=h->next;
  第二处:指向p的下一个结点来实现循环,所以应改为:p=p->next;

请编写函数fun, 函数的功能是: 判断字符串是否为回文?若是, 函数返回1, 主函数中输出: YES, 否则返回0, 主函数中输出NO。回文是指顺读和倒读都一样的字符串。
  例如, 字符串LEVEL是回文, 而字符串123312就不是回文。
  注意:部分源程序在文件PROG1.C中。
  请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
  你编写的若干语句。
  给定源程序:
  #include
  #define N 80
  int fun(char *str)
  {
  }  


  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() ;
  }
  解题思路:
  本题是考察如何判断一个字符串是回文字符串,回文是指顺读和倒读都一样的字符串。可以利用for循环语句来判断,如果前后不一致,则不是回文字符串。
  参考答案:
  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") ;
  NO NO() ;
  }

就业数据资源平台