就业数据资源平台
当前位置:首页 > C语言程序设计
计算机等级考试二级c语言上机试题及答案23

  填空题
  给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为正数),将所指数组中小于平均值的数据移至数组的前部,大于等于平均值的数据移至x所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。
  例如,有10个正数:46 30 32 40 6 17 45 15 48 26,平均值为:
  30.500000
  移动后的输出为:30 6 17 15 26 46 32 40 45 48
  请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
  注意:源程序存放在考生文件夹下的BLANK1.C中。
  不得增行或删行,也不得更改程序的结构!
  给定源程序:
  #include <stdlib.h>
  #include <stdio.h>
  #define N 10
  double fun(double *x)
  { int i, j; double av, y[N];
  av=0;
  for(i=0; i<N; i++) av +=__1__;
  for(i=j=0; i<N; i++)
  if( x[i]<av )
  {
  y[j]=x[i]; x[i]=-1; __2__;}
  i=0;
  while(i<N)
  { if( x[i]!= -1 ) y[j++]=x[i];
  __3__;
  }  


  for(i=0; i<N; i++)x[i] = y[i];
  return av;
  }
  main()
  { int i; double x[N];
  for(i=0; i<N; i++){ x[i]=rand()%50; printf("%4.0f ",x[i]);}
  printf("\n");
  printf("\nThe average is: %f\n",fun(x));
  printf("\nThe result :\n",fun(x));
  for(i=0; i<N; i++) printf("%5.0f ",x[i]);
  printf("\n");
  }
  解题思路:
  第一处:求出N个数的平均值,所以应填:N。
  第二处:利用for循环语句,把数组x中小于平均值的数,依次存放到数组y中,其中位置由变量j来控制,所以应填:j++。
  第三处:i是while循环体的控制变量,每做一次循环均要加1。


  改错题
  给定程序MODI1.C中函数 fun 的功能是:统计字符串中各元音字母(即:A、E、I、O、U)的个数。注意:字母不分大、小写。
  例如:若输入:THIs is a boot,则输出应该是:1、0、2、2、0。
  请改正程序中的错误,使它能得出正确的结果。
  注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!
  给定源程序:
  #include <stdio.h>
  fun ( char *s, int num[5] )
  { int k, i=5;
  for ( k = 0; k<i; k++ )
  num[i]=0;
  for (; *s; s++)
  { i = -1;
  switch ( s )
  { case 'a': case 'A': {i=0; break;}
  case 'e': case 'E': {i=1; break;}
  case 'i': case 'I': {i=2; break;}
  case 'o': case 'O': {i=3; break;}
  case 'u': case 'U': {i=4; break;}
  }
  if (i >= 0)
  num[i]++;
  }
  }
  main( )
  { char s1[81]; int num1[5], i;
  printf( "\nPlease enter a string: " ); gets( s1 );
  fun ( s1, num1 );
  for ( i=0; i < 5; i++ ) printf ("%d ",num1[i]); printf ("\n");
  }
  解题思路:
  第一处:num初始化错误,应为:num[k]=0;。
  第二处:由于s是指针型变量,所以应改为:switch(*s)。

 编程题
  请编写函数 fun,函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。
  例如:二维数组中的值为
  1 3 5 7 9
  2 9 9 9 4
  6 9 9 9 8
  1 3 5 7 0
  则函数值为 61。
  注意: 部分源程序存在文件PROG1.C文件中。
  请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
  给定源程序:
  #include <stdio.h>
  #define M 4
  #define N 5
  int fun ( int a[M][N] )
  {
  }  


  main( )
  { int aa[M][N]={{1,3,5,7,9},
  {2,9,9,9,4},
  {6,9,9,9,8},
  {1,3,5,7,0}};
  int i, j, y;
  clrscr();
  printf ( "The original data is : \n" );
  for ( i=0; i<M; i++ )
  { for ( j =0; j<N; j++ ) printf( "%6d", aa[i][j] );
  printf ("\n");
  }
  y = fun ( aa );
  printf( "\nThe sum: %d\n" , y );
  printf("\n");
  NONO( );
  }
  解题思路:
  本题是统计二维数组周边元素值之和,但要注意的是不要重复计算四个角上的元素值,结果作为函数值返回。
  参考答案:
  int fun ( int a[M][N] )
  {
  int tot = 0, i, j ;
  for(i = 0 ; i < N ; i++) {
  tot += a[0][i] ;
  tot += a[M-1][i] ;
  }
  for(i = 1 ; i < M - 1 ; i++) {
  tot += a[i][0] ;
  tot += a[i][N-1] ;
  }
  return tot ;
  }

就业数据资源平台