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

 函数fun的功能是:把形参a所指数组中的最小值放在元素a[0]中,接着把 形参a所指数组中的最大值放在a[1]元素中;再把a所指数组元素中的次小值放 在a[2]中,把a所指数组元素中的次大值放在a[3];其余以此类推。例如:若a 所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7;则按规则移动 后,数据排列为:1、9、2、8、3、7、4、6、5。形参n中存放a所指数组中数 据的个数。 

  注意:规定fun函数中的max存放当前所找的最大值,px存放当前所找最大 值的下标。 


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


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


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


  给定源程序: 


  # include  


  #define N 9 


  void fun(int a[], int n) 


  { int i,j, max, min, px, pn, t; 


  for (i=0; i  { 


  max = min = ___1___; 


  px = pn = i; 


  for (j=i+1; j  if (max<___2___) 


  { max = a[j]; px = j; } 


  if (min>___3___) 


  { min = a[j]; pn = j; } 


  } 


  if (pn != i) 


  { t = a[i]; a[i] = min; a[pn] = t; 


  if (px == i) px =pn; 


  } 


  if (px != i+1) 


  { t = a[i+1]; a[i+1] = max; a[px] = t; } 


  } 


  } 


  main() 


  { int b[N]={9,1,4,2,3,6,5,8,7}, i; 


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


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


  fun(b, N); 


  printf("\nThe data after moving :\n"); 


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


  }


 解题思路: 


  第一处:外循环每循环一次均把数组a当前位置的值,分别赋值给max和min变量,所以应填: a[i]。 


  第二处:判断max是否小于a[j],若小于,则把a[j]赋值给max,所以应填:a[j]。 


  第三处:判断min是否大于a[j],若大于,则把a[j]赋值给min,所以应填:a[j]。 


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


  给定程序MODI1.C中函数fun的功能是:用递归算法计算斐波拉契数列中第n 项的值。从第1项起,斐波拉契数列为:1、1、2、3、5、8、13、21、…… 


  例如,若给n输入7,该项的斐波拉契数值为:13。 


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


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


  给定源程序: 


  #include  


  long fun(int g) 


  { 


  switch(g); 


  { case 0: return 0; 


  case 1 ;case 2 : return 1 ; 


  } 


  return( fun(g-1)+fun(g-2) ); 


  } 


  main() 


  { long fib; int n; 


  printf("Input n: "); scanf("%d",&n); printf("n = %d\n",n); 


  fib=fun(n); 


  printf("fib = %d\n\n",fib); 


  }


 解题思路: 


  第一处:switch后有多余的分号。 


  第二处:case 1后没有返回语句,也应该为return 1;。所以应改为:case 1: return 1; case 


  2:return 1;。 


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


  某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已 在主函数中给出。请编写函数fun,它的功能是:求出该学生的平均分放在记录的ave成员中。 


  例如,学生的成绩是:85.5,76,69.5,85,91,72,64.5,87.5,他的平均分应当 


  是:78.875。 


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


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


  给定源程序: 


  #include  


  #define N 8 


  typedef struct 


  { char num[10]; 


  double s[N]; 


  double ave; 


  } STREC; 


  void fun(STREC *a) 


  { 


  } 


  main() 


  { STREC s={"GA005",85.5,76,69.5,85,91,72,64.5,87.5}; 


  int i; 


  fun( &s ); 


  printf("The %s’s student data:\n", s.num); 


  for(i=0;i  printf("%4.1f\n",s.s[i]); 


  printf("\nave=%7.3f\n",s.ave); 


  NONO(); 


  } 


  解题思路: 


  本题是求记录结构中学生课程成绩的平均值,其结果仍放在该记录结构中。 


  参考答案: 


  void fun(STREC *a) 


  { 


  int i ; 


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


  a->ave = a->ave + a->s[i] ; 


  a->ave /= N ; 


  } 


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

就业数据资源平台