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

 给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为正数),作为函数值返回;并将大于平均值的数放在形参y所指数组中, 在主函数中输出。 

  例如,有10个正数:46 30 32 40 6 17 45 15 48 26,平均值为: 30.500000 主函数中输出:46 32 40 45 48 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 


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


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


  给定源程序: 


  #include  


  #define N 10 


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


  { int i,j; double av; 


  av=__1__; 


  for(i=0; i  for(i=j=0; i  if(x[i]>av) y[__3__]= x[i]; 


  y[j]=-1; 


  return av; 


  } 


  main() 


  { int i; double x[N],y[N]; 


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


  printf("\nThe average is: %f\n",fun(x,y)); 


  for(i=0; y[i]>=0; i++) printf("%5.1f ",y[i]); 


  printf("\n"); 


  }


 解题思路: 


  第一处:计算平均值时,需对变量av进行初始化为0。 


  第二处:利用for循环计算其平均值,所以应填:x[i]/N。 


  第三处:把数组x中元素值大于平均值的数依次存放到形参y所指的数组中其中位置由变量j 来控制,所以应填:j++。 


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


  给定程序MODI1.C中函数fun的功能是:根据整型形参m,计算如下公式的值。 


  1          1          1             1 


  y = ------- +    --------- +   --------- + …… + ------- 


  100*100 200*200     300*300        m*m 


  例如,若m = 2000,则应输出: 0.000160。 


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


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


  给定源程序: 


  #include  


  fun ( int m ) 


  { double y = 0, d ; 


  int i ; 


  for( i = 100, i <= m, i += 100 ) 


  { d = (double)i * (double)i ; 


  y += 1.0 / d ; 


  } 


  return( y ) ; 


  } 


  main( ) 


  { int n = 2000 ; 


  printf( "\nThe result is %lf\n", fun ( n ) ) ; 


  }



  解题思路: 


  第一处:由于计算的实型值要通过函数返回,所以必须定义函数的返回类型,只要int或void 可以省略,其他都要定义类型。由于返回是实型值,所以应在数名前加上double等定义。如果使用float则精度不够,所以在这里不能使用float定义。 


  第二处:在for循环中,两个“;”不可省略,在此把“;”错写成“,”。 


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


  已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组 中。请编写函数 fun,函数的功能是:找出成绩最低的学生记录,通过形参返回 主函数(规定只有一个最低分)。 


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


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


  给定源程序: 


  #include  


  #include  


  #define N 10 


  typedef struct ss 


  { char num[10]; int s; } STU; 


  fun( STU a[], STU *s ) 


  { 


  } 


  main ( ) 


  { STU a[N]={ {"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77}, 


  {"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71} }, m ; 


  int i; 


  printf("***** The original data *****\n"); 


  for ( i=0; i< N; i++ )printf("No = %s Mark = %d\n", a[i].num,a[i].s); 


  fun ( a, &m ); 


  printf ("***** THE RESULT *****\n"); 


  printf ("The lowest : %s , %d\n",m.num, m.s); 


  NONO( ); 


  }


 解题思路: 


  本题考察学生在一组记录中找出最低分。我们使用for循环语句来解决这个问题。 


  参考答案: 


  fun( STU a[], STU *s ) 


  {


  int i, min = a[0].s, j = 0; 


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


  if(min > a[i].s) { /* 如果最低分min仍大于当前分 */ 


  j = i ; /* 记住位置 */ 


  min = a[i].s ; /* 把当前分赋值给min */ 


  } 


  *s = a[j] ; 


  } 


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

就业数据资源平台