1、国家二级 C语言机试(操作题)模拟试卷 435及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是: 利用指针数组对形参 ss所指字符串数组中的字符串按由长到短的顺序排序,并输出排序结果。 ss所指字符串数组中共有 N个字符串,且串长小于 M。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在文件 BIANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #1r1clucle stotio h #include string h #define N 5 #define M 8 void fun(char(*ss)M) c
2、har*psN, * tp; int i, j, k; for(i=0; i N; i+) psi=ssi; for(i=0 ; i N 1; i+) /*found*/ k=【 1】 ; for(j=i+l; j N; j+) /*found*/ if(str1en(psk) str1en (【 2】 )k=j; /*found*/ tp=psi; psi=psk; psk=【 3】 ; printf f“nThe string after sorting by length: nn“); for(i=0; i N; i+)puts(psi); main() char chN M = “re
3、d“,“green“, “blue “, “yellow“, “black“ ; int i; printf ( “ nThe original string puts (chi ) ; printf (“n“) ; fun (ch) ; 二、程序修改题 2 已知一个数列从 0项开始的前 3项: 0、 0、 1,以后的各项都是其相邻的前 3项之和。下列给定的程序中,函数 fun的功能是:计算并输出该数列前 n项的平方根之和 sum。 n的值通过形参传入。 例如,当 n= 10时,程序的输出结果应为 23 197745。 请改正程序中的错误,使它能得出正确的结果。 注意:部分源程序在文件 MOD
4、I1,C中,不要改动 mam函数,不得增行或删行,也不得更改程序的结构! 试题程序: #include stdlib h #include conio h #include stdio h #include math h /*found*/ fun(int n) double sum |s0|s1, s2,s; int k; sum=1 0; if(r1 =2)sum=0 0; s0=0 0; s1=0 0; s2=1 0; for(k=4; k =n; k+) s=s0+s1+s2; sum+=sqrt(s); s0=s1; s1=s2; s2=s; /*found*/ return sum
5、 void main() int n; system(“CLS“); printf(“Input N=“); scar1f(“ d“, &n); printf(“ fn“, fun(n); 三、程序设计题 3 请编写函数 fun,它的功能是计算下列级数和,和值由函数值返回。 例如,当 n=10, x=0 3时,函数值为 1 349859。 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include conio h #include stdio h #include math h #i
6、nclude stdlib h double fun(double x, int n) void main() FILE*wf; system(“CLS“); printf(“ f“, fun(0 3, 10); /*/ wf=fopen(“out dat“, “w“); fprintf(wf, “ f“, fun(0 3, 10); fclose(wf); /*/ 国家二级 C语言机试(操作题)模拟试卷 435答案与解析 一、程序填空题 1 【正确答案】 (1)i (2)psj (3)tp 【试题解析】 本题是按字符串的长短进行排序。 填空 1:外循环每循环一次, k应保存当前的 i值,所以
7、应填 i。 填空 2:使用内循环对 i+l后面的字符串长度进行比较,所以应填 psj。 填空 3:此处的作用是交换两个变量的值,所以应填 tp。 二、程序修改题 2 【正确答案】 (1)double fun( int n) (2)return sum; 【试题解析】 (1)根据函数的返回值可知函数 fun应定义为 double类型。 (2)语法错误,缺分号。 三、程序设计题 3 【正确答案】 double fun (double x,x int n) int i; double s=1 0,s1=1 0; for( i=1; i =n, i+) s1=s1*i; /*各项中的阶乘 */ s=s+pow (x,i) /s1; 1*按公式求出 */ return s; 【试题解析】 程序定义了变量 s1和 s, s1表示每项的分母(即各项的阶乘), s存放累加和。循 环语句控制累加的次数,在循环体中进行阶乘和累加操作,累加的结果存入 s中。此处使用了求乘方函数 pow(x, i),其含义是求 x的 i次方的值。