1、二级 C 语言-143 及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.请补充 main()函数,该函数的功能是求出 1!+2!+3!+4!+N!的和。 例如,1!+2!+3!+4!+9!=409113。 注意:部分源程序给出如下。 仅在横线上填写所需要的若干表达式或语句,请勿改动函数中的其他任何内容。 试题程序: #includestdio.h void main() int i, n; long sum=0, temp=1; printf(“/nInput n: /n“); scanf(“%d“, 1); for(i=1; i=n;
2、i+) temp= 2; sum= 3; printf(“1!+%d!=%1d/n“, n, sum); (分数:30.00)二、程序改错题(总题数:1,分数:40.00)2.下列给定程序中,函数 fun()的功能是:求出数组中最大数和次最大数,并把最大数和 b0中的数对调、次最大数和 b1中的数对调。 请修改程序中的错误,得出正确的结果。 注意:不要改动 math()函数,不能增行或删行,也不能更改程序的结构。 试题程序: #includeconio.h #includestdio.h #define N 10 /*error* void fun() int i, m, t, j; for(
3、i=0; i2; i+) /*error* m=0; for(j=i+1; jn; j+) if(bjbm) m=j; t=bi; bi=bm; bm=t; void main() int aN=5, 12, 9, 7, 10, n=5, i; for(i=0; in; i+) printf(“%d“, ai); printf(“/n“); fun(a, n); for(i=0; in; i+) printf(“%d“, ai); printf(“/n“); (分数:40.00)_三、程序设计题(总题数:1,分数:30.00)3.请编写函数 fun(),其功能是计算并输出下列多项式的值: F=
4、1+1/1!+1/2!+1/3!+1/4!+1/m! 例如,若主函数从键盘给 m 输入 5,则输出为 F=2.716667。 注意:m 的值要求大于 1 但不大于 100。部分源程序给出如下。 请勿改动 main()函数与其他函数中的任何内容,仅在函数 fun()的花括号中填入所编写的若干语句。 试题程序: #includestdio.h double fun(int m) void main() int m; double f; FILE *out; printf(“Input m:“); scanf(“%d“, f=fun(m); printf(“F=%f/n“, f); out=fope
5、n(“outfile.dat“, “w“); for(m=10; m10; m+) fprintf(out, “%f/n“, fun(m); fclose(out); (分数:30.00)_二级 C 语言-143 答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.请补充 main()函数,该函数的功能是求出 1!+2!+3!+4!+N!的和。 例如,1!+2!+3!+4!+9!=409113。 注意:部分源程序给出如下。 仅在横线上填写所需要的若干表达式或语句,请勿改动函数中的其他任何内容。 试题程序: #includestdio.h voi
6、d main() int i, n; long sum=0, temp=1; printf(“/nInput n: /n“); scanf(“%d“, 1); for(i=1; i=n; i+) temp= 2; sum= 3; printf(“1!+%d!=%1d/n“, n, sum); (分数:30.00)解析: for(i=0; i2; i+) /*error* m=0; for(j=i+1; jn; j+) if(bjbm) m=j; t=bi; bi=bm; bm=t; void main() int aN=5, 12, 9, 7, 10, n=5, i; for(i=0; in;
7、 i+) printf(“%d“, ai); printf(“/n“); fun(a, n); for(i=0; in; i+) printf(“%d“, ai); printf(“/n“); (分数:40.00)_正确答案:()解析:(1)错误:m=j; 正确:void fun(int*b, int n) (2)错误:void fun() 正确:m=i; 解析 本题中函数的功能是求出数组中最大数和次最大数。解题思路是首先求出数组中最大数和次最大数,然后将最大数和次最大数分别放到数组的第一位和第二位。 第一个错误标识下“void fun(int*b,int n);”函数的定义语法有误,根据 C
8、 语言语法函数定义后面不应该加“;”,所以“void fun(int*b,int n);”应该改为“void(fun(int*b,int n)”。 第二个标识符下 for 循环逐个对 m 个数据进行选择判断,原题中“m=0;”语句将 m 值设置为 0,在循环中 m 的值始终是 0,不会改变,根据“for(i=0;i2;i+)”语句中的循环条件,“m=0;”改为“m=i;”。三、程序设计题(总题数:1,分数:30.00)3.请编写函数 fun(),其功能是计算并输出下列多项式的值: F=1+1/1!+1/2!+1/3!+1/4!+1/m! 例如,若主函数从键盘给 m 输入 5,则输出为 F=2.
9、716667。 注意:m 的值要求大于 1 但不大于 100。部分源程序给出如下。 请勿改动 main()函数与其他函数中的任何内容,仅在函数 fun()的花括号中填入所编写的若干语句。 试题程序: #includestdio.h double fun(int m) void main() int m; double f; FILE *out; printf(“Input m:“); scanf(“%d“, f=fun(m); printf(“F=%f/n“, f); out=fopen(“outfile.dat“, “w“); for(m=10; m10; m+) fprintf(out,
10、“%f/n“, fun(m); fclose(out); (分数:30.00)_正确答案:()解析:double t, s=1.0; /初始化求解多项式的值 s int i, j; for(i=1; i=m; i+) /m 项多项式的循环 t=1.0; /阶乘求解初始化 for(j=1; j=i; j+) t*=j; s+=1.0/t; /求得多项式的和 return s; 解析 该程序的功能是计算并输出多项式的值。该题的解题思路是根据题干中给出的数列,首先推出每一项的表达式,然后再对多项式进行累加求和。 根据题干中给出的数列,推出每一项是阶乘的倒数,所以首先在循环中求得每一项的阶乘。其中阶乘的计算公式定义为: m!=m*(m-1)*(m-2)*1(m1) m!=1(m=1) 公式分为参数 m 是 1 和大于 1 的两种情况,例如,1 的阶乘 1!=1;5 的阶乘 5!=5*4*3*2*1。 然后求得阶乘分之一的累加和。