1、国家二级( C语言)机试模拟试卷 236及答案与解析 一、程序填空题( 30分) 1 给定程序中,函数 fun的功能是建立一个 NN的矩阵。矩阵元素的构成规律是:最外层元素的值全部为 1;从外向内第 2层元素的值全部为 2;第 3层元素的值全部为 3, 依次类推。例如,若 N=5,生成的矩阵为: 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 !#include #define N 7 *found* void fun(int(*a) 【 1】 ) int i, j, k, m
2、; if(N 2=0)m=N 2; else m=N 2+1; for(i=0; i 二、程序修改题( 30分) 2 下列给定程序中,函数 proc()的功能是:应用递归算法求某数 a的平方根。求平方根的迭代公式如下: x1=(x0+a x0) 2 例如, 3的平方根为 1 732051。 请修改程序中的错误,使它能得出正确的结果。 注意:不要改动 main()函数,不得增行或删行,也不得更改 程序的结构。 试题程序: #include #include /*found* proe(double a double x0) double x1, y; x1=(x0+a x0) 2 0; *fou
3、nd* if(fabs(x1 x0)0 00001) y=proc(a, x1); else y=x1; return y; void main() double s; printf(“Enter s: “); scanf(“ If“, long c; void NONO (); printf(“Input a, b:“); scanf(“%d,%d“, fun(a, b, printf(“The result is: %ldn“, c); NONO(); void NONO () /* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *rf, *wf ; int
4、 i, a,b ; long c ; rf = fopen(“in.dat“, “r“); wf = fopen(“out.dat“,“w“); for(i = 0 ; i 0 00001) 正确: if(1abs(x1 x0)=0 00001) 【试题解析】 由主函数中的 proc函数调用可知,函数 proc应该有一个 double型的返回值。因此, “proc(double a, double x0)”应改为 “double proc(double a,double x0)”;由 double型数据的精确值可知, “if(fabs(x1x0)0 00001)”应改为“if(1abs(x1x0)=0 00001)”。 三、程序设计题( 40分) 3 【正确答案】 *c=(b%10)*1000+(a%10)*100+(b/10)*10+a/10; 【试题解析】 ( 1)分解两位数的正整数 n的个位和十位数,可用 n%10和 n/10实现。 ( 2)设 x0、 x1、 x2、 x3为一位数,则 x0、 x110、 x2100、 x31000,可以分别使 x0、 x1、 x2、 x3构成个、十、百、千带权数,而 x0+x110+x2100+x31000构成四位数。本题最多只考虑 四位数。