国家二级C语言机试(操作题)模拟试卷691
程序填空题
1.给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为正数),将所指数组中小于平均值的数据移至数组的前部,大于等于平均值的数据移至X所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。
例如,有10个正数:46 30 32 40 6 17 45 15 48 26,平均值为:30.500000
移动后的输出为:306 17 15 26 46 32 40 45 48
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
1 #include<stdlib.h>
2 #include<stdio.h>
3 #define N 10
4 double fun(double *x)
5 { int i,j;double av,y[N];
6 av=0;
7 /**********found**********/
8 for(i=0; i<N; i++) av+=__1__;
9 for(i=j=0; 2<N;i++)
10 if(x[i]<av){
11 /**********found**********/
12 y[j]=x[i];x[i]=-1;__2__;}
13 i=0;
14 while(i<N)
15 { if(x[i]!=-1) y[j++]=x[i];
16 /**********found**********/
17 __3__;
18 }
19 for(i=0;i<N;i++)X[i]=y[i];
20 return av;
21 }
22 main()
23 { int i;double x[N];
24 for(i=0;i<N;i++)(x[i]=rand()%50;printf(’’%4.of’’,x[i]);}
25 printf(’’\n’’);
26 printf(’’\nThe average is:%f\n’’,fun(x));
27 printf(’’\nThe result:\n’’,fun(x));
28 for(i=0;i<N;i++)printf(’’%5.0f’’,x[i]);
29 printf(’’\n’’);}
(1)x[i]/N
(2)j++或j=j+l
(3)i++或i=i+1
解析:本题中函数fun的功能是计算形参x所指数组中N个数的平均值(规定所有数均为正数),将所指数组中小于平均值的数据移至数组的前部,大于等于平均值的数据移至x所指数组的后部。在fun函数中,首先求平均值,然后拿平均值逐个和数组元素比较,如果元素值小于平均值则保存在数组y中,再把大于等于平均值的元素放在数组y后面,最后把y数组内的元素拷贝到x所指的数组中。
第一空:“for(i=0;i<N;i++)av+=__1__;”在该循环的下一个循环内是逐个比较元素x[i]是否小于av,即该循环的功能是求出平均值。由“av=(x[0]+x[1]+…x[N-1])/N=x[0]/N+x[1]/N+…+x[N-1]/N”可知,第一空处应为“x[i]/N”。
第二空:“if(x[i]<av){y[j]=x[i];x[i]=-1;___2__;”如果x[i]小于平均值则将x[i]存储在y数组中,变量i是循环变量,变量j记录数组y的下标变化,下一次执行if内部语句时,y数组的下标应为下一个位置,故第二空处应为i加1,即第二空出为“j++”或“j=j+1”。
第三空:i为while循环的循环变量,第一次进入while的时候i为0,判断第一个元素x[0]是否是-1,第二次进入的时候判断第二个元素x[1]是否是-1,依此类推直到i=N退出循环,故第三处是变量i自增,即第三空处为“i++”或“i=i+1”。
程序修改题
2.给定程序MODI1.C中函数fun的功能是:统计字符串中各元音字母(即:A、E、I、O、U)的个数。注意:字母不分大、小写。例如:若输入:THIs is aboot,则输出应该是:1、0、2、2、0。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
1 #include<stdio.h>
2 void fun(char *s,int num[5])
3 { int k,i=5;
4 for(k=0;k<i;k++)
5 /**********found**********/
6 num[i]=0;
7 for(;*s;s++)
8 { i=-1;
9 /**********found**********/
10 switch(s)
11 {case’a’:case’A’:{i=0;break;}
12 case’e’:case’E’:{i=1;break;}
13 case’i’:case’I’:{i=2;break;}
14 case’o’:case’O’:{i=3;break;}
15 case’u’:case’U’:{i=4;break;}
16 }
17 if(i>=0)
18 num[i]++;
19 }
20 }
21 main()
22 {char s1[81];int numl[5],i;
23 printf(’’\nPlease enter a string:’’};gets(s1);
24 fun(s1,numl);
25 for(i=0;i<5;i++)printf(’’%d’’,numl[i]);printf’’\n’’);
26 }
(1)num[k]=0
(2)switch(*s)
解析:本题中函数的功能是统计字符串中各元音字母(即A、E、I、O、U)的个数。其中,本题在while循环中采用switch-case条件判断字符串中的每一个字符并进行统计。
(1)第一个标识下的for循环过程是将num数组中的变量初始值设置为0,用来统计每一个元音字母出现的个数,for循环中的循环条件表达式中的变量是k,所以第二个标识下“num[i]=0;”改为“num[k]=0;”
(2)第二个标识下的switch-case条件选择的功能应该是对s指针指向的字符串中的每一个字符进行判断,不应该是s的数组名,所以第三个标识下“switch(s)”改为“switch(*s)”。
程序设计题
3.请编写函数fun,函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。
例如:二维数组中的值为:
1 3 5 7 9
2 9 9 9 4
6 9 9 9 8
1 3 5 7 0<
本文档预览:3600字符,共5191字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载