1、国家二级 C语言机试(操作题)模拟试卷 674及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:利用指针数组对形参 ss所指字符串数组中的字符串按由长到短的顺序排序,并输出排序结果。 ss所指字符串数组中共有 N个字符串,且串长小于 M。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h #include string h #define N5 #define M8 void fun(char(*ss)1) char*psN, *tp; int i, j, k;
2、 for(i=0; i N; i+) psi=ssi; for(i=0; i N-1; i+) *found* k=_1_; for(j=i+1; j N; j+) *found* if(strlen(psk) strlen(_2_) k=j; tp=psi; psi=psk; *found* psk=_3_; printf(“ nThe string after sorting by length: n n“) for(i=0; i N; i+)puts(psi); main() char chN1=“red“, “green“, “blue“, “yellow“, “black“; int
3、 i; printf(“ nThe original string n n“); for(i=0; i N; i+)puts(chi); printf(“ n“); fun(ch); 二、 程序修改题 2 下列给定程序中,函数 fun的功能是:在整数 10到 55之间,查找能被 3整除且有一位上的数值是 5的数,把这些数放在 b所指的数组中,这些数的个数作为函数值返回。规定函数中 a1放个位数, a2放十位数。 请改正程序中的错误,使它能得出正确的结果。 注意:不得增行或删行,也不得更改的程序的结构 ! 试题程序: #include stdio h int fun(int*b) int k,
4、a1, a2, i=0; for(k=10; k =55; k+) *found* a2=k 10; a1=k-a2*10: if(k 3=0&a2=5)| (k 3=0&a1=5) bi=k; i+; *found* return k; main() int a100, k, m; m=fun(a); printf(“The result is: n“); for(k=0; k m; k+) printf(“ 4d“, ak); printf(“ n“); 三、程序设计题 3 下列程序定义了 NN的二维数组,并在主函数中自 动赋值。请编写函数 fun(int a N),该函数的功能是:将数组
5、左下半三角元素中的值全部置 0。例如 a数组中的值为: 1 9 7 2 3 8 4 5 6 则返回主程序后 a数组中的值应为: 0 9 7 0 0 8 0 0 0 注意:请勿改动 main函数和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include (20hio h #include stdio h #include stdlib h #define N5 void fun(int aN) void main() FILE*wf; int aNN, i, j; int bNN=1, 9, 7, 2, 4, 2, 3, 8, 1, 2, 4, 5,
6、6, 7, 5, 4, 0, 6, 8, 0,2, 7, 1, 6, 4; system(“CLS“); printf(“*The array* n“); for(i=0; i N; i+) *产生一个随机的 5*5矩阵 * for(j=0; j N; j+) aij=rand() 10; printf(“ 4d“, aij); printf(“ n“); fun(a); printf(“THE RESULT n“); for(i=0; i N; i+) for(j=0; j N; j+) printf(“ 4d“, aij); printf(“ n“); * wf=fopen(“out da
7、t“, “w“); fun(b); for(i=0; i N; i+) for(j=0; j N; j+) fprintf(wf, “ 4d“, bij); fprintf(wf, “ n“); fclose(wf); * 国家二级 C语言机试(操作题)模拟试卷 674答案与解析 一、程序填空题 1 【正确答案】 (1)i (2)psj (3)tp 【试题解析】 本题考查:按字符串的长短进行排序。 填空 1:外循环每循环一次, k应保存当前的 i值,所以应填 i。 填空 2:使用内循环对 i+1后面的字符串长度进行比较,所以应填 psj。 填空 3:此处的作用是交换两个变量的值,所以应填 tp
8、。 二、程序修改题 2 【正确答案】 (1)a2=k 10; (2)return i; 【试题解析】 本题考查:取数值 n的各个位; return语句,将需要返回的函数值返回给函数 main。 (1)a2存放十位数,所以是 a2=k 10,此处是一个书写错误。 (2)根据题意,要返回能被 3整除的数的个数,从循环体中可以知道其个数是由 i来计算的,所以返回的是 i。 三、程序设计题 3 【正确答案】 void fun(int aN) int i, j; for(i=0; i N; i+) for(j=0; j =i; j+) aij=0; *将数组左下半三角元素中的值全部置 0* 【试题解析】 本题考查: for循环语句,使用嵌套循环语句遍历二维数组的各个元素;二维数组元素的引用。对于 NN二维数组,如何表示其左下半三角元素,可以通过以下语句实现: for(i=0; i n; i+) for(j=0; j =i; j+) 外层循环用来控制矩阵的行下标,内层循环控制矩阵的列下标。注意列下标的取值范围,因为要表示下三角元素,所以 j的范围是 0 i。