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

 给定程序中,函数fun的功能是:计算x所指数组中N个数的平均值(规定所有数均为正数),平均值通过形参返回主函数,将小于平均值且最接近平均值的数作为函数值返回,在主函数中输出。 

  例如,有10个正数:46 30 32 40 6 17 45 15 48 26,平均值为: 


  30.500000 


  主函数中输出:m=30.0 


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


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


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


  给定源程序: 


  #include  


  #define N 10 


  double fun(double x[],double *av) 


  { int i,j; double d,s; 


  s=0; 


  for(i=0; i  __1__=s/N; 


  d=32767; 


  for(i=0; i  if(x[i]<*av && *av - x[i]<=d){ 


  d=*av-x[i]; j=__2__;} 


  return __3__; 


  } 


  main() 


  { int i; double x[N],av,m; 


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


  m=fun(x,&av); 


  printf("\nThe average is: %f\n",av); 


  printf("m=%5.1f ",m); 


  printf("\n"); 


  }


 解题思路: 


  第一处:计算好的平均值通过形参av返回,所以应填:*av。 


  第二处:计算小于平均值且最接近平均值的位置j,所以应填:i。 


  第三处:返回该数,所以应填:x[j]。 


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


  给定程序MODI1.C中函数fun的功能是:根据整型形参n,计算如下公式的值。例如,若 n=10,则应输出: 0.617977。 


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


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


  给定源程序: 


  #include  


  int fun ( int n ) 


  { float A=1; int i; 


  for (i=2; i  A = 1.0/(1+A); 


  return A ; 


  } 


  main( ) 


  { int n ; 


  printf("\nPlease enter n: ") ; 


  scanf("%d", &n ) ; 


  printf("A%d=%f\n", n, fun(n) ) ; 


  } 


 解题思路: 


  第一处:函数的返回是浮点型数,所以应改为:float fun(int n)。 


  第二处:for的终止条件应是i<=n。 


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


  程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun,函数的功能是:使数组右上三角元素中的值乘以m 。 


  例如:若m的值为2,a 数组中的值为 


  | 1 9 7 | | 2 18 14| 


  a = | 2 3 8 | 则返回主程序后a数组中的值应为 | 2 6 16| 


  | 4 5 6 | | 4 5 12| 


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


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


  给定源程序: 


  #include  


  #include  


  #define N 5 


  int fun ( int a[][N], int m ) 


  { 


  } 


  main ( ) 


  { int a[N][N], m, i, j; 


  printf("***** The array *****\n"); 


  for ( i =0; i  { for ( j =0; j  { a[i][j] = rand() ; printf( "M", a[i][j] ); } 


  printf("\n"); 


  } 


  do m = rand() ; while ( m>=3 ); 


  printf("m = M\n",m); 


  fun ( a ,m ); 


  printf ("THE RESULT\n"); 


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


  } 


  NONO ( ); 


  } 


  解题思路: 


  本题是利用两重循环给二维数组右上三角元素中的值乘以m。 


  参考答案: 


  int fun ( int a[][N], int m ) 


  { 


  int i, j; 


  for(i = 0 ; i < N ; i++) 


  for(j = i ; j < N ; j++) 


  a[i][j] *= m ; 


  } 


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

就业数据资源平台