1、国家二级 C语言机试(操作题)模拟试卷 460及答案与解析 一、程序填空题 1 下列给定程序中,函数 fun的功能是:将 NN矩阵中元素的值按列向右移动 1个位置,右边被移出矩阵的元素绕回左边第 1列。 例如, N=3,有下列矩阵 1 2 3 4 5 6 7 8 9 计算结果为: 3 1 2 6 4 5 9 7 8 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部 分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h #define N 4 void fun(int(*t)N) int i, j, x; fo
2、r(i=o; i 【 1】 ; i+) X=ti【 2】 ; for(J=N 1; j 0; j一一 ) tij=tij一 1; ti【 3】 =x; main() int i, j, tN=21, 12, 13, 24, 25 , 16 , 47, 38 , 29 11 , 32, 54 , 42 , 21 , 33,10; printf(“The orriginal array: n“); for(i=0; i N; i+) for(j=0; j N; j+) printf(“ 2d“, tij); printf(“n“); fun(t); printf(“nThe result is:
3、n“); for(i=0; i N; i+) for(j=0; j N ; j+) printf(“ 2d“, tij); printf(“n“); 二、程序修改题 2 下列给定程序中,函数 fun的功能 是:计算并输出下列级数的前 N项和 SN,直到 SN+1的值大于 q为止, g的值通过形参传入。 例如,若 q的值为 50 0,则函数值应为 49 394948。 请改正程序中的错误,使它能得出正确的 结果。 注意:不要改动 mmn函数,不得增行或删行,也不得 更改程序的结构 !试题程序: #include conio h #include stdio h double fun(double
4、 q) int n ; double s, t; n=2; s=2 0; while(s =q) t=s;/*found*/ s=s+(n+1)/n; n+; printf(“n= dn“, n);/*found*/ return s; main() printf(“ fn“, fun(50); 三、程序设计题 3 编写函数 fun,其功能是:求 Fibonacci数列中大于 t的最小的数,结果由函数返回。 Fibonacci数列 F(n)的定义为: F(0)=0, F(1): 1 F(n)=F(n 1)+F(n一 2) 例如,当 t=1000时,函数值为 1597。 注意:部分源程序给出如下
5、。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include conio h #include math h #include stdio h int fun(int t) main() int n; n=10 00; printf(“n: d, f= dn“, n, fun(n); 国家二级 C语言机试(操作题)模拟试卷 460答案与解析 一、程序填空题 1 【正确答案】 (1)N (2)N一 1 (3)0 【试题解析】 填空 1:因为是 NN的矩阵,所以行列数是相同的。第一个 for循环用来循环行,因此填入一个循环界限
6、N。 填空 2:此语 句将移出矩阵的元素暂存,移出矩 阵的元素的列下标为 N一 1,因此填入 N一 1。 填空 3:此语句将移出矩阵的元素放入最左边,也就是第一列,第一列元素的列下标为 0,因此填入 0。 二、程序修改题 2 【正确答案】 (1)s=s+(double)(n+1)/n; (2)retum t; 【试题解析】 (1)在 C语言中,整数除以整数得出的结果也是整数,因此此处要转换数据类型。 (2)观察 while循环,如果返回变量是 s,那么返回的是大于 q的值,而题中所要返回的是小于 q的值,所以应该返回变量 t。 三、程序设计 题 3 【正确答案】 int fun (int t) int f0 =0, f1=1,f; do /*根据 Fibonacci数列的定义求数值 */ f=f0+f1; f0=f1; f1=f; while (f t); /*如果求的数值小于 t则继续 */ return f; 【试题解析】 根据所给数列定义不难发现,该数列最终的结果是由两个数列之和组成,所以可以在循环内部始终把 f看成是前两项之和,而 f0始终代表第 n一 2项, f1代表第 n一 1项。退出循环时得到的数 f,就是大于指定数的最小的数。