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

 给定程序中,函数fun的功能是:计算出形参s所指字符串中包含的单词个数, 作为函数值返回。为便于统计,规定各单词之间用空格隔开。 


  例如,形参s所指的字符串为:This is a C language program.,函数 


  的返回值为6。 


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


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


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


  给定源程序: 


  #include  


  int fun(char *s) 


  { int n=0, flag=0; 


  while(*s!=’\0’) 


  { if(*s!=’ ’ && flag==0) { 


  __1__ ; flag=1;} 


  if (*s==’ ’) flag= __2__ ; 


  __3__ ; 


  } 


  return n; 


  } 


  main() 


  { char str[81]; int n; 


  printf("\nEnter a line text:\n"); gets(str); 


  n=fun(str); 


  printf("\nThere are %d words in this text.\n\n",n); 


  }


 解题思路: 


  本题是统计字符串中包含的单词个数。 


  第一处:单词个数用变量n来统计,当当前字母不是空格且flag状态标志为0时,则单词数就加1,将状态标志flag置为1,所以应填:n++。 


  第二处:当当前字符是空格时,flag状态标志置0,所以应填:0。 


  第三处:到字符串下一个位置,所以应填:s++。 


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


  给定程序MODI1.C中函数 fun 的功能是:从n(形参)个学生的成绩中统计出低于平均分的学生人数,此人数由函数值返回,平均分存放在形参aver所指的存储单元中。 


  例如,若输入 8 名学生的成绩:80.5 60 72 90.5 98 51.5 88 64 


  则低于平均分的学生人数为: 4 (平均分为:75.5625 )。 


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


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


  给定源程序: 


  #include  


  #define N 20 


  int fun ( float *s, int n, float *aver ) 


  { float ave, t = 0.0 ; 


  int count = 0, k, i ; 


  for ( k = 0 ; k < n ; k++ ) 


  t = s[k] ; 


  ave = t / n ; 


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


  if ( s[ i ] < ave ) count++ ; 


  *aver = Ave ; 


  return count ; 


  } 


  main() 


  { float s[30], aver ; 


  int m, i ; 


  printf ( "\nPlease enter m: " ) ; scanf ("%d", &m ) ; 


  printf ( "\nPlease enter %d mark :\n ", m ) ; 


  for( i = 0 ; i < m ; i++ ) scanf ( "%f", s + i ) ; 


  printf( "\nThe number of students : %d \n" , fun ( s, m, &aver ) ); 


  printf( "Ave = %f\n", aver ) ; 


  }


 解题思路: 


  第一处:应求累加和,而不赋值,所以应改为t+=s[k];。 


  第二处:ave不需要取地址,直接赋给*aver就可以了。 


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


  请编写函数fun,其功能是求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。 


  例如, 输入如下整数: 876 675 896 101 301 401 980 431 451 777 


  则输出结果为: 6, 980 


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


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


  给定源程序: 


  #include  


  int fun(int *s, int t, int *k) 


  { 


  } 


  main( ) 


  { 


  int a[10]={876,675,896,101,301,401,980,431,451,777}, k ; 


  fun(a, 10, &k) ; 


  printf("%d, %d\n", k, a[k]) ; 


  NONO( ) ; 


  } 


  解题思路: 


  本题是考察考生如何在指定的数组找出最大元素值的下标,通过形参*k返回到主程序中。给出的程序是使用for循环语句进行处理的,在循环之前,首先把数组的第一个元素值赋给最大值变量max,位置pos为0,然后通过循环依次判断下一元素值是否大于最大值max,如果大于,那么把这个数重新赋给max,位置i赋给pos,循环结果,即可得到最大值的位置pos,最后执行语句*k=pos就可以实现返回了。 


  参考答案: 


  int fun(int *s, int t, int *k) 


  { 


  int i, pos = 0, max = *s ; 


  for(i = 1 ; i < t ; i++) { 


  if(max < *(s + i)) { 


  max = *(s + i) ; 


  pos = i ; 


  } 


  } 


  *k = pos ; 


  } 

就业数据资源平台