1、二级 C 语言机试-275 及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.下列给定程序中,函数 fun 的功能是:有 NN 矩阵,根据给定的 m(mc=N)值,将每行元素中的值均向右移动 m 个位置,左位置为 O。例如,N=3,m=2,有下列矩阵:1 2 34 5 67 8 9程序执行结果为:0 0 10 0 40 0 7请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#includestdio.h#define N 4void fun(inf(*
2、f)N.int m)int i,j;/*found*/for(i=0;iN; (1) )for(j=N-1-m;j=0;j-)/*found*/tij+ (2) =ij;/*found*/for(j=0;j (3) ;j+)tij=0;main()int tN=21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10,i,j,m;printf(“/nThe original array:/n“);for(i=0;iN;i+)for(j=0;jN;j+)printf(“%2d“,tij);printf(“/n“);printf(“Input m(m=%d):
3、“N);scanf(“%d“,fun(t,m);printf(“/nThe result is:/n“);for(i=0;iN;i+)for(j=0;jN;j+)printf(“%2d“,fij);printf(“/n“);(分数:30.00)_二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun 的功能是:计算并输出 high 以内最大的 10 个素数的和。high 的值由主函数传给 fun 函数。例如,若 high 的值为 10。,则函数的值为 732。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!
4、试题程序:#includeconio.h#includescdio.h#includemath.hint fun(int high)int sum=0,n=0,j,yes;/*found*/while(high=2)for(j=2;j=high/2;j+)if(high%j=0)/*found*/yes=0;breakif(yes)sum+=high;n+;high-;return sum;main()printf(“%d/n“,fun(100);(分数:30.00)_三、程序设计题(总题数:1,分数:40.00)3.编写函数 fun,其功能是:利用下面的简单迭代方法求方程 cos(x)-x=
5、0 的一个实根。xn+1=cos(xn)迭代步骤如下:(1)取 x1初值为 0.0;(2)x0=x1,将 x1的值赋给 x0;(3)x1=cos(x0),求出一个新的 x1;(4)若 x0-x1的绝对值小于 0.000001,执行步骤(5),否则执行步骤(2);(5)所求 x1就是方程 cos(x)-x=0 的一个实根,作为函数值返回。程序将输出结果 Root=0739086。注意:部分源程序给出如下。请勿改动主函数数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。试题程序:#includeconio.h#includemath.h#includescdi
6、o.hdouble fun()main()double f=fun();printf(“Root=%f/n“,f);(分数:40.00)_二级 C 语言机试-275 答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.下列给定程序中,函数 fun 的功能是:有 NN 矩阵,根据给定的 m(mc=N)值,将每行元素中的值均向右移动 m 个位置,左位置为 O。例如,N=3,m=2,有下列矩阵:1 2 34 5 67 8 9程序执行结果为:0 0 10 0 40 0 7请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序给
7、出如下。不得增行或删行,也不得更改程序的结构!试题程序:#includestdio.h#define N 4void fun(inf(*f)N.int m)int i,j;/*found*/for(i=0;iN; (1) )for(j=N-1-m;j=0;j-)/*found*/tij+ (2) =ij;/*found*/for(j=0;j (3) ;j+)tij=0;main()int tN=21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10,i,j,m;printf(“/nThe original array:/n“);for(i=0;iN;i+
8、)for(j=0;jN;j+)printf(“%2d“,tij);printf(“/n“);printf(“Input m(m=%d):“N);scanf(“%d“,fun(t,m);printf(“/nThe result is:/n“);for(i=0;iN;i+)for(j=0;jN;j+)printf(“%2d“,fij);printf(“/n“);(分数:30.00)_正确答案:(i+ (2)m (3)m微考点本题关键字有:for 循环语句;数组元素的引用。微分析填空 1:循环语句中,循环变量 i 递增值为 1。填空 2:将每行元素中的值均右移 m 个位置,所以数组元素的下标是 fi
9、i+m。填空 3:for 循环语句用来对左边元素赋 O 值,所以 j 的取值小于 m。)解析:二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun 的功能是:计算并输出 high 以内最大的 10 个素数的和。high 的值由主函数传给 fun 函数。例如,若 high 的值为 10。,则函数的值为 732。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!试题程序:#includeconio.h#includescdio.h#includemath.hint fun(int high)int sum=0,
10、n=0,j,yes;/*found*/while(high=2)for(j=2;j=high/2;j+)if(high%j=0)/*found*/yes=0;breakif(yes)sum+=high;n+;high-;return sum;main()printf(“%d/n“,fun(100);(分数:30.00)_正确答案:(while(hiah=2)break;)解析:解析 本题关键字有:C 语言的语法格式。微分析(1)while 循环语句丢掉一个括号。(2)break 语句缺少分号。三、程序设计题(总题数:1,分数:40.00)3.编写函数 fun,其功能是:利用下面的简单迭代方法求
11、方程 cos(x)-x=0 的一个实根。xn+1=cos(xn)迭代步骤如下:(1)取 x1初值为 0.0;(2)x0=x1,将 x1的值赋给 x0;(3)x1=cos(x0),求出一个新的 x1;(4)若 x0-x1的绝对值小于 0.000001,执行步骤(5),否则执行步骤(2);(5)所求 x1就是方程 cos(x)-x=0 的一个实根,作为函数值返回。程序将输出结果 Root=0739086。注意:部分源程序给出如下。请勿改动主函数数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。试题程序:#includeconio.h#includemath.h
12、#includescdio.hdouble fun()main()double f=fun();printf(“Root=%f/n“,f);(分数:40.00)_正确答案:(double fun()float x1=0.0,x0;dox0=x1;/*调用 mafh 库函数中的余弦函数*/x1=cos(x0);/*当 xOx1 的绝对值小于 lO 的负 6 次方时退出循环*/while(fabs(x0-x1)=le-6);refurn x1;)解析:解析 本题关键字有:迭代法求方程的实根;循环语句。dowhile 循环先执行循环中的语句,再判断表达式是否为真,为真则继续循环,为假则终止循环。因此,dowhile 循环的循环体至少要执行一次。微分析将给出的算法转换为合适的表达式,就可以求方程的一个实根了。