频道栏目
首页 > 资讯 > C语言 > 正文

2014年计算机二级C语言上机模拟试题69

13-11-11        来源:[db:作者]  
收藏   我要投稿
 给定程序中,函数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: %fn",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 %lfn", 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 = %dn", a[i].num,a[i].s); 

  fun ( a, &m ); 

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

  printf ("The lowest : %s , %dn",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] ; 

  } 

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

相关TAG标签
上一篇:2014年计算机二级C语言上机模拟试题68
下一篇:2014年计算机二级C语言上机模拟试题70
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站