国家二级C语言机试(操作题)模拟试卷350
程序填空题
1.给定程序中,函数fun的功能是:计算出形参s所指字符串中包含的单词个数,作为函数值返回。为便于统计,规定各单词之间用空格隔开。
例如,形参s所指的字符串为:This is a C languageprogram.,函数的返回值为6。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
#include
int fun (char *s)
{ int n=0,flag=0;
____1____ ; flag=1; }
____3____;
}
return n;
main ()
{ char str[81]; int n:
printf (\\
(1)n++
(2)0
(3)s++
解析:函数fun的功能是计算出形参s所指字符串中包含的单词个数。
第一空:“if(*s!=’’&&nag==0)”说明找到空格了,单词的数量应加1,故第一空处应为“n++”。
第二空:“if(*s!=’’&&flag==0)”和“if(*s==’’)flag=____2____; ”在flag为0的情况下,n才加1,因此第二空处是将flag置0,即第二空处应为“0”。
第三空:“while(*s!=’\\\\0’)”循环的终止条件是s达到结尾,因此在循环体内s应该不断往字符串尾移动,即第三空为“S++”。
程序修改题
2.给定程序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 ;
t = s[k];
ave — t / n ;
if (s[i] < ave) count++ ;
*aver = Ave ;
return count ;
}
main ()
{ float s[30],aver ;
int m,i ;
printf (\\
(1)t+=s[k];
(2) *aver=ave;
解析:程序功能是统计出低于平均分的学生人数。
(1)根据题目要求求出平均分,首先要求总分,要把所有学生成绩相加再求平均分,因此第一个标识下面的“t=s[k];”应改为“t+=s[k];”。
(2)根据题目可知,比较的结果中低于平均分的分数ave放入指针aver所指的地址单元中,而变量Ave没有定义,因此第二标识下应将“*aver= Ave; ”改为“*aveFave,”。
程序设计题
3.请编写函数fun,其功能是求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。
例如,输入如下整数:
876 675 896 101 301 401 980 431 451 777
则输出结果为:6,980
注意:部分源程序在文件PROG1.C文件中。
请勿改动主函数maln和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
void fun (int *s, int t, int *k)
{
}
main()
{
int a[10]={876,675f 896,101,301,
401,980,431,451,777},k;void NONO();
fun (a, 10, &k);
printf(\\
1 int i, pos=0, max=*s;
2 for(i=1; i<t; i++){
3 if(max<* (s+i)){
4 max=* (s+i);
5 pos=i;
6 }}
7 *k=pos;
解析:(1)该程序功能是求最大元素在数组中的下标。它的解题思路是,用最大值变量max标记第一个待找数据,逐个把所有待找数据和max进行比较,并用pos标记其当前最大值所在位置,从而找出最大值。
(2)从已给部分源程序的main主函数开始入手,核心函数“fun(a,10,&k); ”中的参数a存放着给出的整数,fun函数实现查找最大元素的下标。
本文档预览:3600字符,共2738字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载