1、国家二级 C语言机试(操作题)模拟试卷 334及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是:利用指针数组对形参 ss所指字符串数组中的字符串按由长到短的顺序排序,并输出排序结果。ss 所指字符串数组中共有 N个字符串,且串长小于 M。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1C 中。 不得增行或删行,也不得更改程序的结构! #include #include #define N 5 #define M 8 void fun (char
2、 (*ss) M ) char *psN,*tp; int i,j,k; for (i=0; i strlen tp=ps i ; ps i =ps k ; ps k= _3 _; printf ( “/nThe string after sorting by length:/n/n“); for (i=0; i_二、程序修改题(总题数:1,分数:2.00)2.已知一个数列从第 0项开始的前三项分别为 0,0,1,以后的各项都是其相邻的前三项之和。给定程序MODI1C 中函数 fun的功能是:计算并输出该数列前 n项的平方根之和。n 的值通过形参传入。 例如,当 n=10时,程序的输出结果应为
3、:23197745。 请改正程序中的错误,使程序能输出正确的结果。 注意:不要改动 mam函数,不得增行或删行,也不得更改程序的结构! #include #include fun (int n) double sum s0,s1,s2,s; int k; sum = 10; if (n = 2) sum = 00; s0= 00; sl= 00; s2 =10; s = s0 + s1 + s2; sum += sqrt (s); s0 = s1; s1 = s2; s2 = s; /*found*/ return sum main () int n; printf (“Input N=“)
4、; scanf ( “ d“, &n) ; printf (“f/n“, fun (n) (分数:2.00)_三、程序设计题(总题数:1,分数:2.00)3.编写函数 fun,它的功能是计算下列级数和,和值由函数值返回。 例如,当 n= 10,x=03 时,函数值为 1349859。 注意:部分源程序在文件 PROG1C 文件中。 请勿改动主函数 mam和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include #include double fun (double x , int n) main() void NONO (); printf(“f/n“, fu
5、n(03,10); NONO(); void NONO () /*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/ FILE *fp,*wf ; int i,n ; double S,X ; fp=fopen (“indat“,“r“); wf = fopen (“outdat“,“w“); for(i=0 ; i 10 ; i+) fscanf (fp, “lf,d“, &x, &n); s = fun (x, n); fprintf (wf, “f/n“, s); fclose( fp); fclose (wf); (分数:2.00)_国家二级 C语言机试(操作题)模拟试卷
6、 334答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是:利用指针数组对形参 ss所指字符串数组中的字符串按由长到短的顺序排序,并输出排序结果。ss 所指字符串数组中共有 N个字符串,且串长小于 M。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1C 中。 不得增行或删行,也不得更改程序的结构! #include #include #define N 5 #define M 8 void fun (char (*ss) M ) char *psN
7、,*tp; int i,j,k; for (i=0; i strlen tp=ps i ; ps i =ps k ; ps k= _3 _; printf ( “/nThe string after sorting by length:/n/n“); for (i=0; i_正确答案:(正确答案:(1)i (2) psj (3) tp)解析:解析:本题中函数 fun的功能是利用指针数组对形参 ss所指字符串数组中的字符串按由长到短的顺序排序,并输出排序结果。在 fun函数中采用了选择排序法,在选择排序法中的降序排序,首先从数组中挑选一个最大的元素,把它和第一元素交换,接着从剩下的 n1个元素中
8、再挑出一个最大的元素,把它和第二个元素交换,不断重复以上过程,直到比较完最后两个元素。 第一空:分析可知,fun 函数采用的选择排序,在第一空处是初始化 k。“for(j =i+l;j二、程序修改题(总题数:1,分数:2.00)2.已知一个数列从第 0项开始的前三项分别为 0,0,1,以后的各项都是其相邻的前三项之和。给定程序MODI1C 中函数 fun的功能是:计算并输出该数列前 n项的平方根之和。n 的值通过形参传入。 例如,当 n=10时,程序的输出结果应为:23197745。 请改正程序中的错误,使程序能输出正确的结果。 注意:不要改动 mam函数,不得增行或删行,也不得更改程序的结构
9、! #include #include fun (int n) double sum s0,s1,s2,s; int k; sum = 10; if (n = 2) sum = 00; s0= 00; sl= 00; s2 =10; s = s0 + s1 + s2; sum += sqrt (s); s0 = s1; s1 = s2; s2 = s; /*found*/ return sum main () int n; printf (“Input N=“) ; scanf ( “ d“, &n) ; printf (“f/n“, fun (n) (分数:2.00)_正确答案:(正确答案:
10、(1) double fun(int n) (2) return sum;)解析:解析:本题中函数的功能是计算并输出该数列前 n项的平方根之和 sum。解题思路首先根据题干求得每一项的值,然后再计算数列前 n项的平方根之和。 (1)第一个错误标识下 fun函数的定义根据题干要返回前 n项的平方根之和,函数具有返回值,所以“fun(int n)”应改为“double fun(int n)”,其中double为双精度型变量。 (2)第二个标识符下返回平方根之和,根据 C语言语法每一句 C语言后面应该以“;”为结尾,所以”retumsum”改为“return sum; ”。 for 循环结构、函数的
11、定义以及调用。三、程序设计题(总题数:1,分数:2.00)3.编写函数 fun,它的功能是计算下列级数和,和值由函数值返回。 例如,当 n= 10,x=03 时,函数值为 1349859。 注意:部分源程序在文件 PROG1C 文件中。 请勿改动主函数 mam和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include #include double fun (double x , int n) main() void NONO (); printf(“f/n“, fun(03,10); NONO(); void NONO () /*本函数用于打开文件,输入数据,
12、调用函数,输出数据,关闭文件。*/ FILE *fp,*wf ; int i,n ; double S,X ; fp=fopen (“indat“,“r“); wf = fopen (“outdat“,“w“); for(i=0 ; i 10 ; i+) fscanf (fp, “lf,d“, &x, &n); s = fun (x, n); fprintf (wf, “f/n“, s); fclose( fp); fclose (wf); (分数:2.00)_正确答案:(正确答案:1 double s:10, y=x ; 2 int i ; 3 long k=1; 4 for(i = 1 ; i = n ; i+) 5 k=k* i ; 6 s+=y/ k ; 7 y* =X; 8 9 return s;)解析:解析:该程序功能是计算并输出多项式值。根据题干中给出的数列,首先推出每一项的表达式,然后再对多项式进行累加求和。 (1)根据题干中给出的数列,推出每一项分子是在前一项的基础上乘以 x,分母是每一项的阶乘,它可以在前一项的基础上乘以当前项的项数,即第 n项是 n。 (2)在循环中求得每一项,然后对其进行累加求和。