就业数据资源平台
当前位置:首页 > C语言程序设计
2014年计算机二级C语言上机模拟试题49

 给定程序中,函数fun的功能是:有N×N矩阵,以主对角线为对称线,对称元素相加并将结果存放在左下三角元素中,右上三角元素置为0。例如,若N=3,有下列矩阵: 

  1 2 3 


  4 5 6 


  7 8 9 


  计算结果为 


  1 0 0 


  6 5 0 


  10 14 9 


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


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


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


  给定源程序: 


  #include  


  #define N 4 


  void fun(int (*t)___1___ ) 


  { int i, j; 


  for(i=1; i  { for(j=0; j  { 


  ___2___ =t[i][j]+t[j][i]; 


  ___3___ =0; 


  } 


  } 


  } 


  main() 


  { int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}, i, j; 


  printf("\nThe original array:\n"); 


  for(i=0; i  { for(j=0; j  printf("\n"); 


  } 


  fun(t); 


  printf("\nThe result is:\n"); 


  for(i=0; i  { for(j=0; j  printf("\n"); 


  } 


  }


  解题思路: 


  第一处:形参t的定义,整数数组其宽度为N,所以应填:[N]。 


  第二处:对称元素相加,其结果仍存放在左下三角元素中,所以应填:t[i][j]。 


  第三处:右上三角元素置为0,所以应填:t[j][i]。 


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


  给定程序MODI1.C中函数fun的功能是:计算函数 F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值。其中x和y的值不等,z和y的值不等。 


  例如,当x的值为9、y的值为11、z的值为15时,函数值为 -3.50。 


  请改正程序中的错误,使它能得出正确结果。 


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


  给定源程序: 


  #include  


  #include  


  #include  


  #define FU(m,n) (m/n) 


  float fun(float a,float b,float c) 


  { float value; 


  value=FU(a+b,a-b)+FU(c+b,c-b); 


  Return(Value); 


  } 


  main() 


  { float x,y,z,sum; 


  printf("Input x y z: "); 


  scanf("%f%f%f",&x,&y,&z); 


  printf("x=%f,y=%f,z=%f\n",x,y,z); 


  if (x==y||y==z){printf("Data error!\n");exit(0);} 


  sum=fun(x,y,z); 


  printf("The result is : %5.2f\n",sum); 


  } 


 解题思路: 


  第一处:define定义错误,所以应改为:#define FU(m,n) ((m)/(n))。 


  第二处:return错写成Return,变量value错写成Value。 


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


  规定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串中的前导*号全部删除,中间和尾部的*号不删除。 


  例如,字符串中的内容为:*******A*BC*DEF*G****,删除后,字符串中的内容应当是:A*BC*DEF*G****。在编写函数时,不得使用C语言提供的字符串函数。 


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


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


  给定源程序: 


  #include  


  void fun( char *a ) 


  { 


  } 


  main() 


  { char s[81]; 


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


  fun( s ); 


  printf("The string after deleted:\n");puts(s); 


  NONO(); 


  } 


  解题思路:


  本题是考察字符串的操作。 


  1. 利用循环扫描出字符串左边第1个字符不是’*’的字符。 


  2. 再利用循环把以后的字符依次移动原字符串首地址开始存放。 


  3. 最后给字符串a加上结束符。 


  参考答案: 


  void fun( char *a ) 


  {                                 


  int j=0; 


  char *p = a ; 


  while(*p == ’*’) p++ ; 


  while(*p) { 


  a[j++] = *p ; 


  p++; 


  } 


  a[j]=0 ; 


  } 


  ※※※※※※※※※※※※※※※※※※※※※※※※※ 

就业数据资源平台