1、国家二级 C+机试(操作题)模拟试卷 186及答案与解析 一、基本操作题 1 给定程序中,函数 fun的功能是:根据形参 i的值返回某个函数的值。当调用正确时,程序输出: x1=5 000000 x2=3 000000, x1*x1+x1*x2=40 000000。 注意:部分源程序在文件 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include double f1(double x) return x*x; ) double f2(double x, double y) rel2urn x*y; ) *found* 【 1】 fun(int i, doub
2、le x, double y) (if(i=1) *found* return【 2】 (x); else *found* return m(x, y); main() double x1=5, x2=3, r; r=fun(1, x1, x2); r+=fun(2, x1, x2); printf(“ nx1= f, x2= f, x1*x1+x1*x2= f n n”, x1, x2, r); 二、简单应用题 2 下列给定程序中函数 fun的功能是:将 s所指字符串的正序和反序进行连接,形成的新串放在 t所指的数组中。 例如,当 s所指字符串为 “ABCD”时, t所指字符串中的内容应为“
3、ABCDDCBA”。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include #include #include *found* void fun(char S, char t) int i, d; d=strlen(s); for(i=0; i #include #include void fun(int array33) void main() FILE*wf; int i, j; int array33=100, 200, 300, 400, 500, 600), 700, 800, 900; sy
4、stem(“CLS“); for(i=0; i3; i+) for(j=0; j3; j+) printf(“ 7d“, arrayij); printf(“ n“); fun(array); printf(“Converted array: n“); for(i=0; i3; i+) for(j=0; j3; j+) printf(“ 7d“, arrayi j); printf(“ n“); *found* wf=fopen(“out dat“, “w“); for(i=0; i3; i+一 ) for(j=0; j3; j+) fprintf(wf, “ 7d“, arrayij); f
5、printf(wf, “ n“); fclose(wf); *found* 国家二级 C+机试(操作题)模拟试卷 186答案与解析 一、基本操作题 1 【正确答案】 (1)double(2)f1 (3)2 【试题解析】 填空 1:本空函数 fun的返回值,根据 return可知,不论返回的是f1还是 f2,它们的返回值均为 double型的,故此空应该填写 double。 填空 2:因为函数 fun的功能是根据形参 i的值返回某个函数的值,当 i等于 1时,应该返回的是 f1。 填空 3:如果不满足 if的话,应该返回的是 f2。 二、简单应用题 2 【 正确答案】 (1)void fun(c
6、har*s, char*t) (2)t2*d; 0;或 td+i= 0;或 t2*d=0;或 td+i=0; 【试题解析】 (1)从调用函数来看,函数传递的是数组,所以函数的形参应为指针。 (2)循环结束后回文字符的个数为 2*d个,因为数组下标是从 0开始的,所以最后一个字符的下标为 2*d 1,在最后一个字符的后面加上结束符 0,因此为t2*d= 0;。 三、综合应用题 3 【正确答案】 void fun(int array33) int i, j, t; for(i=0; i3; i+) *将右上三角和左下三角对换,实现行列互换 * for(j=i+1; j3; j+) t=arrayij; arrayij=arrayji; arrayji=t; 【试题解析】 要实现矩阵转置,即将右上角数组元素和左下角数组元素对换,本题通过数组元素交换方法,完成矩阵转置操作。 因为对矩阵转置后仍然存回其本身,所以只能 循环矩阵中的一个角 (本程序是右上半三角 )。控制右上半三角的方法是在内层循环中循环变量 j从 i+1或 j开始。