第51套:
给定程序中,函数fun的功能是:计算出形参s所指字符串中包含的单词个数, 作为函数值返回。为便于统计,规定各单词之间用空格隔开。
 例如,形参s所指的字符串为:This is a C language program.,函数
 的返回值为6。
 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
 注意:源程序存放在考生文件夹下的BLANK1.C中。
 不得增行或删行,也不得更改程序的结构!
 给定源程序:
#include <stdio.h> 
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 <stdio.h> 
#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 <stdio.h> 
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 ; 
}