1、国家二级 C语言机试(操作题)模拟试卷 309及答案与解析 一、程序填空题 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=0; 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: n“);
3、for(i=0; i N; i+) for(j=0; j N; j+) printf(“ 2d“, tij); printf(“ n“); 二、程序修改题 2 下列给定程序中函数 fun的功能是:计算 n!。 例如,给 n输入 5,则输出 120 000000。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h #include conio h double fun(int n) double result=1 0; *found* if n=0 return 1 0 ; while
4、(n 1 n 170) *found* result=n-; return result; main() int n; printf(“Input N: “); scanf(“ d“, n); printf(“ n n d!= lf n n“, n, fun(n); 三、程序设计题 3 编写函数 fun,其功能是:将 a、 b两个两位正整数合并成一个新的整数放在 c中。合并的方式是:将 a中的十位和个位数依次放在变量 c的千位和十位上, b中的十位和个位数依次放在变量 c的个位和百位上。 例如,当 a=45, b=12,调用该函数后 c=4251。 注意:部分源程序给出如下。 请勿改动主函数
5、main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include conio h #include stdio h void fun(int a, int b, long*c) main() int a, b; long c; printf(“Input a, b: “); scanf(“ d d“, a, &b); fun(a, b, &c); printf(“The result is: ld n“, c); 国家二级 C语言机试(操作题)模拟试卷 309答案与解析 一、程序填空题 1 【正确答案】 (1)N (2)N一 1 (3)0 【试题解
6、析】 填空 1:因为是 NN的矩阵,所以行列数是相同的。第一个 for循环用来循环行,因此填入一个循环界限 N。 填空 2:此语句将移出矩阵的元素暂存,移出矩阵的元素的列下标为 N一 1,因此填入 N 1。 填空 3:此语句将移出矩阵的元素放入最左边,也就是第一列,第一列元素的列下标为 0,因此填入 0。 二、程序修改题 2 【正确答案】 (1)if(n=0) (2)result*=n-;或 result*=n; n-; 【试题解析】 (1)这里是一个简单的格式错误, if条件判 断语句应该加括号。 (2)根据阶乘的概念,从 n开始, n!=n*(n-1)!,直到 1,所以应该为 result
7、*=n-;。 三、程序设计题 3 【正确答案】 void fun(int a, int b, long*c) *b 10获取 b的个位, a 10获取 a的十位, a 10获取 a的个位, b 10获取b的十位 * *c=b 10+(a 10)*10+(b 10)*100+(a 10)*1000; 【试题解析】 本题中主要的问题是如何取出 a和 b的个位数和十位数,取出后如何表示成 c中相应的位数。由于 a和 b都是只有两位的整数,所以分别对它们除10可得到它们的十位数,分别用 10对它们求余可得到它们的个位数。得到后对应乘以 1000、 100、 10、 1,就可得到 c的千位数、百位数、十位数和个位数。注意使用 c时要进行指针运算。