1、国家二级 C语言机试(操作题)模拟试卷 419及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是: 调用随机函数产生 20个互不相同的整数放在形参 a所指数组中(此数组在主函数中已置 0)。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1 C中。 不得增行或删行,也不得更改程序的结构! 试题程序: #include stdlib h #include stdio h #define N 20 voic:l fun ( int *a) int i, x, n=0; x = rand () 20; /*found*/ w
2、hile (n 【 1】 ) 【 2】 ; /*found*/ if( i=【 3】 ) an=x; n+; ) x = rand () 20; main () int xN = 0),i; fun ( x ); printf (“The result : n“) ; for( i=0; i N; i+ printf (“ 4d“,xi ) ; if(i+1) 5=0)printf(“n“); printf (“nn“) ; 二、程序修改题 2 下列给定程序中,函数 fun的功能是:先从键盘上输入一个 3行、 3列的矩阵的各个元素的值,然后输出主对角线元素之和。 请改正程序中的错误,使它能得出
3、正确的结果。 注意:部分源程序在文件 MODI1 C中,不要改动 mam函数,不得增行或删行,也不得更改程序的结构! 试题程序: #include stdio h void fun () int a3 3 , sum; int i, j ; /*found*/ sum = 1 ; sum=sum+aii; printf (“Sum = dn“, sum) ; void main () fun (); 三、程序设计题 3 编写程序,实现矩阵( 3行、 3列)的转 置(即行列互换)。 例如,若输入下面的矩阵: 100 200 300 400 500 600 700 800 900 则程序输出: 1
4、00 400 700 200 500 800 300 600 900 注意:部分源程序在文件 PROGI C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include stdio h #include conio h #include stdlib h voici fun (int array33) void main () FILE *wf; int i, j, int array 3 3 = 100,200,300 , 400,500,600 , 700,800,900 ; system “CLS “) ; for(
5、i=0; i 3; i+) for(j=0; j 3; j+) printf (“ 7d “,arrayij): printf (“n “) ; fun (array) ; printf (“converted array:n “) ; for( i=0; i 3; i+) for(j=0; j 3; j+) printf ( “ 7d “, array i j); printf (“n “) : /*found*/ wf = fopen (“out dat“, “w“) ; for(i=0; i 3; i+) for(j=0; j 3; j+) fprintf ( wf, “ 7d “, a
6、rray i j ) ; fprintf (wf, “n“) ; fclose (wf); /*found*/ 国家二级 C语言机试(操作题)模拟试卷 419答案与解析 一、程序填空题 1 【正确答案】 (1)N或 20 (2)break (3)n 【试题解析】 填空 1:变量 n用于存储数组的下标,要通过 while语 句对数组进行赋值,数组的容量为 20,因此循环条件应为 n 20。 填空 2:通过一个 for循环判断 x是否与数组中已存的元素重复,若重复则跳出for循环结束。 填空 3:若 for循环是由 break语句结束的,则 x与数组中的元素重复,此时 i必然小于 n;若 for循
7、环是因为循环变量 i递增到某值,而不再满足循环条件结束的,说明 x的值与数组中的元素不重复,则此时 i的值等于 n。 二、程序修改题 2 【正确答案】 (1)sum =0; (2)scanf(“ d“,&aij); 【试题解析】 该题考查对循环 语句的掌握和对数组概念的理解。本题的解题思路为:先从键盘输入一个 33矩阵,然后循环累加,执行循环语句中的sum=sum+ai i;。因为变量 sum用来存放累加后的结果,所以应对其初始化为0。第二处错误考查标准输入函数 scanf的格式,被赋值的变量前要加上取地址符“&“。 三、程序设计题 3 【正确答案】 void fun (int array33) int i,j, t; for(i=0; i 3; i+)/*将右上三角和左下三角对换,实现行列互换 */ for(j=i+l; j 3; j+) t=arrayij; arrayij =arrayji; arrayji =t; 【试题解析】 要实现矩阵转置,即将右上角数组元素和左下角数组元素对换,本题通过数组元素交换方法,完成矩阵转置操作。因为对矩阵转置后仍然存回其本身,所以只能循环矩阵中的一个角(本程序是右上半三角)。控制右上半三角的方法是在内层循环中循环变量 j从 i+1或 i开始。