知ing

最新计算机二级C语言上机试题汇编100套

NCRE研究组 编 / 高等教育出版社

゛Zirro、Y 上传

查看本书

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) { 

/ **********found**********/ 

__1__ ; flag=1;} 

/ **********found**********/ 

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

/ **********found**********/ 

__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所指的存储单元中。 

例如,若输入 名学生的成绩:80.5 60 72 90.5 98 51.5 88 64 则低于平均分的学生人数为: (平均分为: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++ ) 

/ **************found**************/ 

t = s[k] ; 

ave = t / n ; 

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

 

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

/ **************found**************/ 

*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,位置pos0,然后通过循环依次判断下一元素值是否大于最大值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 ; 

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


查看更多