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

 给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为正数),将所指数组中大于平均值的数据移至数组的前部,小于等于平 均值的数据移至x所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。 

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


  30.500000 


  移动后的输出为:46 32 40 45 48 30 6 17 15 26 


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


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


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


  给定源程序: 


  #include  


  #include  


  #define N 10 


  double fun(double *x) 


  { int i, j; double s, av, y[N]; 


  s=0; 


  for(i=0; i  av=__1__; 


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


  y[__2__]=x[i]; x[i]=-1;} 


  for(i=0; i  if( x[i]!= __3__) y[j++]=x[i]; 


  for(i=0; i  return av; 


  } 


  main() 


  { int i; double x[N]; 


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


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


  printf("\nThe result :\n",fun(x)); 


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


  }


 解题思路: 


  第一处:计算N个数的平均值,所以应填:s/N。 


  第二处:利用for循环语句,把数组x中大于平均值的数,依次存放到数组y中,同时把数组x上的该数置为-1,其中位置由变量j来控制,所以应填:j++。


  第三处:再利用循环把不是-1的数,依次仍存放到数组y中,所以应填:-1。 


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


  给定程序MODI1.C的功能是:读入一个英文文本行,将其中每个单词的第一个字母改成大写,然后输出此文本行(这里的“单词”是指由空格隔开的字符串)。 


  例如,若输入:I am a student to take the examination., 


  则应输出:I Am A Student To Take The Examination.。 


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


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


  给定源程序: 


  #include  


  #include  


  include  


  upfst ( char p ) 


  { int k=0; 


  for ( ; *p; p++ ) 


  if ( k ) 


  { if ( *p == ’ ’ ) k = 0; } 


  else if ( *p != ’ ’ ) 


  { k = 1; *p = toupper( *p ); } 


  } 


  main( ) 


  { char chrstr[81]; 


  printf( "\nPlease enter an English text line: " ); gets( chrstr ); 


  printf( "\n\nBefore changing:\n %s", chrstr ); 


  upfst( chrstr ); 


  printf( "\nAfter changing:\n %s\n", chrstr ); 


  } 


 解题思路: 


  第一处:包含头文件的标识错误,在include前漏写了#。 


  第二处:由于传入的参数是字符串,所以应为upfst(char *p)。 


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


  程序定义了N×N的二维数组,并在主函数中赋值。请编写函数fun,函数的功能是:求出数组周边元素的平均值并作为函数值返给主函数中的s。 


  例如:a 数组中的值为 


  |0 1 2 7 9| 


  |1 9 7 4 5| 


  a = |2 3 8 3 1| 


  |4 5 6 8 2| 


  |5 9 1 4 1| 


  则返回主程序后s的值应为: 3.375。 


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


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


  给定源程序: 


  #include  


  #include  


  #define N 5 


  double fun ( int w[][N] ) 


  { 


  } 


  main ( ) 


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


  int i, j; 


  double s ; 


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


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


  printf("\n"); 


  } 


  s = fun ( a ); 


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


  printf( "The sum is : %lf\n",s ); 


  NONO( ); 


  }


 给定程序中,函数fun的功能是:将自然数1~10以及它们的平方根写到名为myfile3.txt的文本文件中,然后再顺序读出显示在屏幕上。 

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


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


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


  给定源程序: 


  #include  


  #include  


  int fun(char *fname ) 


  { FILE *fp; int i,n; float x; 


  if((fp=fopen(fname, "w"))==NULL) return 0; 


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


  fprintf(___1___,"%d %f\n",i,sqrt((double)i)); 


  printf("\nSucceed!!\n"); 


  ___2___; 


  printf("\nThe data in file :\n"); 


  if((fp=fopen(___3___,"r"))==NULL) 


  return 0; 


  fscanf(fp,"%d%f",&n,&x); 


  while(!feof(fp)) 


  { printf("%d %f\n",n,x); fscanf(fp,"%d%f",&n,&x); } 


  fclose(fp); 


  return 1; 


  } 


  main() 


  { char fname[]="myfile3.txt"; 


  fun(fname); 


  }


  解题思路: 


  本题要求所求出的数写入到指定的文件中保存。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。 


  第一处:int fprintf(FILE *stream, const char *format [,argument, …]); 因此本处只能填写文件流的变量fp。 


  第二处:由于文件打开写操作,所以必须要关闭,因此,只能填写关闭文件的函数fclose(fp)。 


  第三处:由于本题要把刚写入文件中的数据重新显示出来,读方式已经给出,但没有给出


  文件名,所以本处只能写文件名变量fname或者直接给出文件名"myfile3.dat"。 


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


  给定程序MODI1.C中fun函数的功能是:将n个无序整数从小到大排序。 


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


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


  给定源程序: 


  #include  


  #include  


  fun ( int n, int *a ) 


  { int i, j, p, t; 


  for ( j = 0; j  { p = j; 


  for ( i=j+1; i  if ( a[p]>a[i] ) 


  t=i; 


  if ( p!=j ) 


  { t = a[j]; a[j] = a[p]; a[p] = t; } 


  } 


  } 


  putarr( int n, int *z ) 


  { int i; 


  for ( i = 1; i <= n; i++, z++ ) 


  { printf( "M", *z ); 


  if ( !( i ) ) printf( "\n" ); 


  } printf("\n"); 


  } 


  main() 


  { int aa[20]={9,3,0,4,1,2,5,6,8,10,7}, n=11; 


  printf( "\n\nBefore sorting %d numbers:\n", n ); putarr( n, aa ); 


  fun( n, aa ); 


  printf( "\nAfter sorting %d numbers:\n", n ); putarr( n, aa ); 


  }


  解题思路: 


  第一处:for循环的终止值应该  第二处:使用临时变量p来保存最小值位置i,所以应改为:p=i;。 


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


  函数fun的功能是: 将两个两位数的正整数a、b合并形成一个整数放在c中。 合并的方式是: 将a数的十位和个位数依次放在c数的个位和百位上, b数的十位 和个位数依次放在c数的十位和千位上。 


  例如, 当a=45, b=12时, 调用该函数后, c=2514。 


  注意: 部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。 


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


  给定源程序: 


  #include  


  void fun(int a, int b, long *c) 


  { 


  } 


  main() 


  { int a,b; long c; 


  printf("Input a, b:"); 


  scanf("%d,%d", &a, &b); 


  fun(a, b, &c); 


  printf("The result is: %ld\n", c); 


  NONO(); 


  } 


  解题思路: 


  本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。 


  取a十位数字的方法:a/10 


  取a个位数字的方法:a 


  参考答案: 


  void fun(int a, int b, long *c) 


  { 


  *c=(b)*1000+(a)*100+(b/10)*10+(a/10); 


  } 

就业数据资源平台