1、国家二级 C语言机试(操作题)模拟试卷 721及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:有 NN矩阵,根据给定的 m(m =N)值,将每行元素中的值均右移 m个位置,左边置为 0。例如, N=3, m=2,有下列矩阵 1 2 3 4 5 6 7 8 9 程序执行结果为 0 0 1 0 0 4 0 0 7 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出 正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 1 #include stdio h 2 #define N 4 3 void fun(int(
2、*t)N, int m) 4 int i, j; 5 *found* 6 for(i=0; i N; _1_) 7 for(j=N-1-m; j =0; j-) 8 *found* 9 tij+_2_=tij; 10 *found* 11 for(j=0; j _3_; j+) 12 tij=0; 13 14 15 main() 16 int tN=21, 12, 13, 24, 25, 16, 47, 38, 29, 11, 32, 54, 42, 21,33, 10, i, j, m; 17 printf( nThe original array: n); 18 for(i=0; i N;
3、 i+) 19 for(j=0;j N;j+) 20 printf( 2d, tij); 21 printf( n); 22 23 printf(Input m(m = d): , N); scanf( d, m); 24 fun(t, m); 25 printf( nThe result is: n); 26 for(i=0; i N; i+) 27 for(j=0; j N; j+) 28 printf( 2d, tij); 29 printf( n); 30 31 二、程序修改题 2 给定程序 MODI1 C中函数 fun的功能是:计算并输出 high以内最大的 10个素数之和。 hig
4、h的值由主函数传给 fun函数。 若 higI1的值为: 100,则函数的值为: 732。 请改正程序中的错误,使程序能输出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 1 #include stdio h 2 #include math h 3 int fun(int high) 4 int sum=0, n=0, j, yes; 5 *found* 6 while(high =2)& (n 10) 7 yes=1; 8 for(j=2; j =high 2; j+) 9 if(high j=0) 10 *found* 11 yes=0; break
5、12 13 if(yes) sum+=high; n+; 14 high-; 15 16 return sum; 17 18 main() 19 20 printf( d n, fun(100); 21 三、程序设计题 3 编写函数 fun,它的功能是:利用以下所示的简单迭代方法求方程: 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
6、就是方程 cos(x)-x=0的一个实根,作为函数值返回。 程序将输出结果 Root=0 739086。 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 1 #include math h 2 #includestdio h 3 double fun() 4 5 6 7 main() 8 9 void NONO(); 10 printf(Root= f n, fun(); 11 NONO(); 12 13 void NONO() 14 *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 *
7、15 FILE *wf; 16 wf=fopen(out dat, w); 17 fprintf(wf, f n, fun(); 18 fclose(wf); 19 国家二级 C语言机试(操作题)模拟试卷 721答案与解析 一、程序填空题 1 【正确答案】 (1)i+ (2)m (3)m 【试题解析】 函数 fun的功能是将每行元素中的值均右移 m个位置。 第一空:题目要求对每行元素中的值均右移 m个位置,故第一空处循环变量每次增 1,共循环 N次,完成对 N行的移位操作,因此,第一空处应为 “i+”。 第二空:循环 “for(j=N-1-m; j =0; j-)”是进行行元素中的值右移 m个
8、位置,即把 tij元素放置在 tij+m上,因此,第二空应为 “m”。 第三空:循环 “for(j=0; j _3_; j+)”是对空出来的位置补 0,每行元素的前m位数据已经移动到后面,每行空处 m个元素,因此,第三空为 “m”。 二、程序修改题 2 【正确答案】 (1)while(2 =high) (n 10) (2)yes=0; bareak; 【试题解析】 函数的功能是计算并输出 high以内最大的 10个素数之和。 (1)C语言中左右括弧必须成对出现,在第一个标识下 “while(high =2)&(n10)”中,显然缺少一个右括弧,应改为 “while(2 =high)&(n 10
9、)”。 (2)在判断素数的循环过程中,只要被判断的数能被某数整除就不是素数,就会跳出判断循环,在 C语言中使用 break语句跳出循环,并且 C语言中的语句使用分号为结尾。所以 “break”应改为 “break; ”。 三、程序设计题 3 【正确答案】 1 float x0, x1=0 0; 2 do 3 x0=x1; 4 x1=cos(x0); 5 while(fabs(x0-x1) 0 000001); 6 return x1; 【试题解析】 该程序功能是利用简单迭代方法求方程的一个实根。牛顿迭代法的求解思想是从一个初始值开始,逐步逼近所求方程的根。 其具体过程是:将初始值代入迭代公式,得到一个迭代输出值。再次迭代时,将上一次的迭代输出值当作本次的迭代输入。不断重复以上过程,直到满足题目要求为止。 牛顿迭代公式为: Xn+1=Xn-fx) f(x)。 其求解过程在题干中已经给出。