1、国家二级 C语言机试(操作题)模拟试卷 269及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是建立一个 NN的矩阵。矩阵元素的构成规律是:最外层元素的值全部为 1;从外向内第 2层元素的值全部为 2;第 3层元素的值全部为 3, 依此类推。例如,若 N=5,生成的矩阵为: 1 1 1 1 1 1 2 2 2 1 1 2 3 2 1 1 2 2 2 1 1 1 1 1 1 请在程序的 下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 试题程序: 1 #include stdio
2、h 2 #defitie N 7 3 *found* 4 void fun(int(*a)【 1】 ) 5 int i, j, k, m; 6 if(N 2=0)m=N 2; 7 else m=N 2+1; 8 for(i=0; i m; i+) 9 *found* 10 for(j=【 2】 ; j N i; j+) 11 aij=aN i一 1j=i+1; 12 for(k=i+1; k N i; k+) 13 *found* 14 aki=akN i一 1=【 3】 ; 15 16 17 main() 18 int xNN=0), i, j; 19 fun(x); 20 printf(“
3、 nThe result is: n“); 21 for(i=0; i N; i+) 22 for(j=0; j N; j+) 23 printf(“ 3d“, xij); 24 printf(“ n“); 25 26 二、程序修改题 2 假定整数数列中的数不重复,并存放在数组中。下列给定程序中函数 fun的功能是:删除数列中值为 x的元素,变量 n中存放数列中元素的个数。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h #define N 2 0 fun(int*a, int n
4、, int x) int p=0, i; an=x; while(x! =aP) P=P+1; *found* if(P=n) return 1; else for(i=P; i n; i+) *found* ai+1=ai; return n 1; void main() int wN= 3, 0, 1, 5, 7, 99, 10, 15, 30, 90), x, n, i ; n=10; printf(“The original data: n“); for(i=0; i n; i+) printf(“ 5d“, wi); printf(“ nInput x(to delere): “);
5、 scanf(“ d“, x); printf(“Delete: d n“, x); n=fun(w, n, x); if(n= 1) printf(“*No be found!* n n“); else printf(“The data after deleted: n“); for(i=0 ; i n; i+) printf(“ 5d“, wi); printf(“ n n“); 三、程序设计题 3 编写程序,实现矩阵 (3行、 3列 )的转置 (即行列互换 )。 例如,若输入下面的矩阵: 100 200 300 400 500 600 700 800 900 则程序输出: 100 400
6、 700 200 500 800 300 600 900 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写 的若干语句。 试题程序: 1 #include stdio h 2 #include conio h 3 #include stdlib h 4 void fun(int array33) 5 6 7 8 void main() 9 10 FILE, lc Wf; 11 int i, j; 12 int array33=100, 200, 300), 400, 500, 600), 700, 800, 900
7、); 13 system(“CLS“); 14 for(i=0; i 3; i+) 15 for(j=0; j 3; J+) 16 printf(“ 7d“, arrayij); 17 printf(“ n“); 18 19 fun(array); 20 printf(“Converted array: n“); 21 for(i=0; i 3; i+) 22 for(j=0; j 3; j+) 23 printf(“ 7d“, arrayij); 24 printf(“ n“); 25 26 *found* 27 wf=fopen(”out dat”, ”w”); 28 for(i=0; i
8、 3; i+) 29 for(j=0; j 3; j+) 30 fprintf(wf, “ 7d“, arrayij); 31 fprintf(wf, “ n“); 32 33 fclose(wf); 34 *found* 35 国家二级 C语言 机试(操作题)模拟试卷 269答案与解析 一、程序填空题 1 【正确答案】 (1)N (2)i (3)i+1 【试题解析】 填空 1:本题考查了形参的确定。参数传递时将实参的值赋给形参,实参和形参是一一对应的,因此该空应该填写 N。 填空 2:第二重 for循环中 aij和 aN i 1j表示第一行和最后一行数组aNN的值,因而此空应该填写 i。 填
9、空 3:第三重 for循环代表的是 aNN中每一列的值,因此此空应该填写 i+1。 二、程序修改题 2 【正确答案】 (1)if(p=n)return 1; (2)ai=ai+1; 【试题解析】 (1)需要确定 if条件语句的条件表达式,发现变量 p大写, C语言中变量是区别大小写的。 (2)删除数列中的元素,删除后,后面的元素依次前移一个位置,因此此处应为ai=ai+1; 三、程序设计题 3 【正确答案】 Void fun(int array33) int i, j, t; for(i=0; i 3; i+) *将右上三角和左下三角对换,实现行列互换 * for(j=i+1; j 3; j+) t=arrayij; arrayij=arrayji; arrayij=arrayij; arrayji=t; 【试题解析】 要实现矩阵转置,即将右上角数组元素和左下角数组元素对换,本题通过数组元素交换方法,完成矩阵转置操作。 因为对矩阵转置后仍然存回其本身,所以只能循环矩阵中的一个角 (本程序是右上半三角 )。控制右上半三角的方法是在内层循环中循环变量 j从 i+1或 i开始。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1