1、国家二级 C语言机试(操作题)模拟试卷 388及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:计算形参 x所指数组中 N个数的平均值 (规定所有数均为正数 ),将所指数组中小于平均值的数据移至数组的前部,大于等于平均值的数据移至 x所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。 例如,有 10个正数: 46 30 32 40 6 17 45 15 48 26,平均值为: 30 500000 移动后的输出为: 30 6 17 15 26 46 32 40 45 48 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程
2、序存放在考生文件夹下的 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, yN; 6 av=0; 7 *found* 8 for(i=0; i N; i+) av+=_1_; 9 for(i=j=0; i N; i+) 10 if(xi av) 11 *found* 12 yj=xi; xi=-1; _2_; 13 i=0; 14 while(i N) 15 if(xi!=-1)y
3、j+=xi; 16 *found* 17 _3_; 18 19 for(i=0; i N; i+)xi=yi; 20 return av; 21 22 main() 23 int i; double xN; 24 for(i=0; i N; i+)xi=rand() 50; printf( 4 of, xi); 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 of, xi); 29 printf(
4、n); 二、程序修改题 2 给定程序 MODI1 C中函数 fun的功能是:计算正整数 num的各位上的数字之积。 例如,若输入: 252,则输出应该是: 20。若输入: 202,则输出应该是: 0。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 1 #include stdio h 2 long fun(long num) 3 4 *found* 5 long k; 6 do 7 k*=num 10; 8 *found* 9 num =10; 10 while(num); 11 return(k); 12 13 main(
5、) 14 long n; 15 printf( nPlease enter a number: ) scanf( 1d, n); 16 printf( n 1d n, fun(n); 三、程序设计题 3 请编写函数 fun,其功能是分别统计形参 t所指二维数组中字母 A和 C的个数。 注意:部分源程序存在 PROG1 C中,请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。 1 #include stdio h 2 #include stdlib h 3 #define M 14 4 void NONO(); 5 void fun(char(*t)
6、N, int*a, int*c) 6 7 8 void get(char(*s)M) 9 int i, j; 10 for(i=0; i M; i+) 11 for(j=0; j M; j+) 12 sij=65+rand() 12; 13 printf( c, sij); 14 printf( n); 15 16 17 main() 18 char aMM; 19 int x, y; 20 get(a); 21 fun(a, x, y); 22 printf(A= d C= d n, x, y); 23 NONO(); 24 25 void NONO() 26 *本函数用于打开文件,输入数据
7、,调用函数,输出数据,关闭文件。 * 27 FILE *fp, *wf; 28 int i, j, x, y; 29 char aMM; 30 fp=fopen(in dat, r); 31 wf=fopen(out dat, w); 32 for(i=0; i M; i+) 33 for(j=0; j M; j+) 34 fscanf( fp, c , aij); 35 36 Fun(a, x, y); 37 fprintf(wf, A= d n, x); 38 fprintf(wf, C= d n, y); 39 fclose(fp); 40 fclose(wf); 41 国家二级 C语言
8、机试(操作题) 模拟试卷 388答案与解析 一、程序填空题 1 【正确答案】 (1)xi N (2)j+或 j=j+1 (3)i+或 i=i+1 【试题解析】 第一空: “for(i=0; i N; i+)av+=_1_;”在该循环的下一个循环内是逐个比较元素 xi是否小于 av,即该循环的功能是求出平均值。由“av=(x0+x1+xN -1) N=x0 N+x1 N+xN -1 N”可知,第一空处应为 “xi N”。 第二空: “if(xi av)yj=xi; xi=-1; _2_; ”如果 xi小于平均值则将 xi存储在 y数组中,变量 i是循环变量,变量 j记录数组 y的下标变化,下一次
9、执行if内部语句时, y数组的下标应为下一个位置,故第二空处应为 j加 1,即第二空出为 “j+”或 “j=j+1”。 第三空: i为 while循环的循环变量,第一次进入 while的时候 i为 0,判断第一个元素 x0是否是 -1,第二次进入的时候判断第二个元素 x1是否是 -1,依此类推直到 i=N退出循环,故第三处是变量 i自增,即第三空处为 “i+”或 “i=i+1”。 二、程序修改 题 2 【正确答案】 (1)long k=1; (2)num =10; 【试题解析】 (1)第一个错误标识下的 k是函数的返回值,子函数 fun中在执行“k*=num 10; ”之前,只进行了定义,却没
10、有赋初值,编译时会警告变量在使用之前没有初始化 k。 k代表了各个位上的数字之积,其初值应为 1。因此,第一个标识下的 “long k; ”改为 “long k=1; ”。 (2)第二个标识下的符号 “ ”是非法字符,根据题意,这里应该是进行除法运算,所以 “num =10; ”应该改为 “num =10; ”。 三、 程序设计题 3 【正确答案】 5 void fun( char (*t)M, int *a , int *c) 6 int i, j; 7 *a=0; *c=0; 8 for( i=0; i M; i+) 9 for(j=0; j M; j+) 10 if(tij=A)*a=*
11、a+1 ; 11 else if(tij=c)*c=*c+1 ; 12 【试题解析】 本题首先需要一个二维数组,二维数组的大小在程序开始就进行了定义 “define=14”,这个大小比较合适,然后利用 gets函数得到数组,然后数据就可以进入 fun函数中进行处理应用。进入。 fun函数, fun函数首先肯定需要 for循环语句将二维数组中的数据进行排序使用,然后需要条件语句进行判断处理,这两步是一体,见程序第 9 11行, for循环保证全部使用了二维数组中数据,并且是依次使用, if语句判断了字母是否为 A或者 C或者都不是,并且进行了统计相加得到了 A的个数 a, C的个数 c,这样循环完成后, A和 C的个数 a、 c就能继续返回主函数进行输出了,见程序 26行,最终得到结果。