1、国家二级 C语言机试(操作题)模拟试卷 243及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:计算 x所指数组中 N个数的平均值 (规定所有数均为正数 ),平均值通过形参返回给主函数,将小于平均值且最接近平均值的数作为函数值返回,并在主函数中输出。 例如,有 10个正数: 46、 30、 32、 40、 6、 17、 45、 15、 48、 26,平均值为30 500000。 主函数中输出 m=30。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在 文件 BLANK1 C中。不得增行或删行,也不得更改程序的结构 ! 试题程序: 1
2、 #include stdlib h 2 #include stdio h 3 #define N 10 4 double fun(double x, double*av) 5 int i, j; double d, s; 6 s=0; 7 for(i=0; i N, i+)s=s +xi; 8 *found* 9 【 1】 =s N; 10 d=32767; 11 for(i=0; i【 2】 ; 16 17 *found* 18 return 【 3】 ; 19 20 main() 21 int i; double xN, av, m; 22 for(i=0; i N; i+) 23 xi
3、=rand() 50; 24 printf( 4 0 f, xi); 25 printf( n); 26 m=fun(x, 32 printf( nBofore changing: n s, chrstr); 33 upfst(chrstr), 34 printf( nAfter changing: n s n, chrstr); 35 三、程序设计题 3 编写程序,实现矩阵 (3行、 3列 )的转置 (即行列互换 )。 例如,若输入下面的矩阵: 100 200 300 400 500 600 700 800 900 则程序输出: 100 400 700 200 500 800 300 600
4、 900 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: 1 #include stdio h 2 #include conio h 3 #include stdlib h 4 void fun(int array33) 5 6 7 8 void main() 9 10 FILE*wf; 11 int i, j; 12 int array33=100, 200, 300, 400, 500, 600), 700, 800, 900; 13 system(CLS); 14 for(i=0;
5、i3; i+) 15 for(j=0 ; j3 ; j+) 16 printf( 7d, arrayij); 17 printf( n); 18 19 fun(array); 20 printf(Converted array: n); 21 for(i=0; i3; i+) 22 for(j=0; j3; j+) 23 printf( 7 d, arrayi j); 24 printf( n); 25 26 *found* 27 wf=fopen(out dat, w); 28 for(i=0; i3; i+) 29 for(j=0; j3; j+) 30 fprintf(wf, 7 d,
6、arrayij); 31 fprintf(wf, n); 32 33 fclose(wf); 34 *found* 35 国家二级 C语言机试(操作题)模拟试卷 243答案与解析 一、程序填空题 1 【正确答案】 (1)*av (2)i (3)xj 【试题解析】 填空 1:从原程序中可以看出 *av代表的是平均值,而 s N表示的就是平均值,因此本空应该填 *av。 填空 2: if语句来判断找最接近平均值的数,因而此空应该填 i。 填空 3:题目要求将小于平均值且最接近平均值的数作为函数返回,而 j表达的是最接近平均值的数在数组中的下标,因而本空应该填写 xj。 二、程序修改题 2 【正确答
7、案】 void upfst(char*p) 【试题解析】 主函数中 fun函数的调用方式说明函数 fun的参数应为指针类型。 三、程序设计题 3 【正确答案】 1 void fun(int array33) 2 3 int, i, j, t; 4 for(i=0; i3 ; i+) *将右上三角和左下三角对换,实现行列互换 * 5 for(j=i+1 ; j3; j+) 6 t=arrayij; 7 arrayij=arrayji; 8 array ij=arrayji; 9 10 【试题解析】 要实现矩阵转置,即将右上角数组元素和左下角数组元素对换,本题通过数组元素交换方法,完成矩阵转置操作。 因为对矩阵转置后仍然存回其本:身,所以只能循环矩阵中的一个 角 (本程序是右上半三角 )。控制右上半三角的方法是在内层循环中循环变量 j从 i+1或 i开始。