1、国家二级 C语言机试(操作题)模拟试卷 529及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:计算 x所指数组中 N个数的平均值(规定所有数均为正数),平均值通过形参返回给主函数,将小于平均值且最接近平均值的数作为函数值返回,并在主函数中输出。 例如,有 10个正数: 46、 30、 32、 40、 6、 17、 45、 15、 48、 26,平均值为 30. 500000。 主函数中输出 m=30。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在 文件 BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 试题程序: #
2、include stdlib.h #include stdio.h #define N 10 double fun (double x , double * av) int i, j; double d, s, s=0; 【 1】 = s/N; d =32767; if(xi *av & *av - x i =d) *found* d= *av-xi; j = 【 2】 ; *found* return 【 3】 ; main () int i; double xN, av, m; for(i=0; i N, i+) xi=rand() 50; printf(“ 4 0 f“, xi); pr
3、intf (“n“); m = fun (x, &av) ; printf (“nThe average is: fn“f av) ; printf “m = 5 .lf “, m) ; printf (“n“) , 二、程序修改题 2 下列给定程序中,函数 fun的功能是:根据整型形参 n,计算如下公式的值。例如,若 n=10,则应输出0.617977。 请改正程序中的错误,使它能得出正确的结果。 注意:部分源程序在文件 MODI1.C中,不要改动 main函数,不得增行或删行,也不得更改程序的结构! 试题程序: #include stdlib.h #include conio.h #inc
4、lude stdio.h *found* int fun (int n) float A=1; int i;*found* return A; void main () int n; system “CLS “ ); printf (“nPlease enter n: “); scanf(“ d“, &n); printf “A d = lfn“, n, fun (n); 三、程序设计 题 3 下列程序定义了 NN的二维数组,并在主函数中自动赋值。请编写函数 fun (int N, int m),该函数的功能是使数组右上半三角元素中的值乘以 m。 例如,若 m的值为 2, a数组中的值为: 则
5、返回主程序后 a数组中的值应为:注意:部分源程序在文件 PROGl.C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include conio.h #include stdio.h #include stdlib.h #include string.h #define N 5void fun (int alN, int m) main () int aNlN, m, i, j; FILE *out; printf (“ * The array* n“) ; printf (“00 4d“, aij); printf (“n
6、“); m = rand () 4; printf (“m = 4dn“, m) ; fun (a, m) : printf (“THE RESULTn“) ; printf (“00 4d“, ai j ) printf (“n“); *found* out = fopen (“out.dat“, “w“) ; for(i=0; i N; i+) for(j=0; j N; j+) aij=i*j; fun(a, 8); for(i=0; i N; i+) for(j=0; j N; j+) fprintf (out, “4d“, ai j ) ; fprintf (out, “n“) f
7、fclose (out) ; *found* 国家二级 C语言机试(操作题)模拟试卷 529答案与解析 一、程序填空题 1 【正确答案】 (1)*av (2)i (3)xj 【试题解析】 填空 1:从原程序中可以看 *av代表的是平均值,而 s/N表示的就是平均值,因此本空应该填 *av。 填空 2:if语句来判断找最接近平均值的数,因而此空应该填 i。 填空 3:题目要求将小于平均值且最接近平均值的数作为函数返回,而 j表达的是最接近平均值的数在数组中的下标,因而本空应该填写 xj。 二、程序修改题 2 【正确答案】 (1) float fun(int n) (2) for(i =2; i
8、=n; i+) 【试题解析】 (1)根据函数的返回值可知,函数应定义为 float型。 (2)该题中函数 fun的作用是计算数列前 n项的和,而数列的组成方式是:第 n项的分母是 1加第 n-l项的值,分子为 1,如果循环累加按 for(i=2; i n; i+)执行,当输入 n=2时循环不会执行,程序将得不到想要的结果,因此循环变量的取值范围应包括 2,循环的条件为 i =n。 三、程序设计题 3 【正确答案】 void fun (int a N, int m) int i, j; for(j=0; j N; j+) for(i=0; i =j; i+) aij=aij*m; /*右上半三角元素中的值乘 以 m* 【试题解析】 本程序实现将矩阵中右上半三角元素中的值乘以 m,使用循环语句遍历数组元素,第 1个循环用于控制行坐标,第 2个循环用于控制列下标。