1、二级 C 语言-347 及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.函数 fun 的功能是:计算 (分数:30.00)二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun 的功能是:从 3 个红球、5 个白球、6 个黑球中任意取出 8 个作为一组,进行输出。在每组中,可以没有黑球,但必须要有红球和白球。组合数作为函数值返回。正确的组合数应该是 15。程序中 i 的值代表红球数,j 的值代表白球数,k 的值代表黑球数。 请改正程序中的错误。使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,
2、也不得更改程序的结构! 试题程序: #includestdio.h int fun() int i, j, k, sum=0; printf(“/nThe result:/n/n“); /*found*/ for(i=0; i=3; i+) for(j=1; j=5; j+) k=8-i-j; /*found*/ if(k=1 printf(“red:%4d white:%4d black:%4d/n“, i, j, k); return sum; void main() int sum; sum=fun(); printf(“sum=%4d/n/n“, sum); (分数:30.00)三、程
3、序设计题(总题数:1,分数:40.00)3.请编写函数 fun,其功能是计算并输出如下多项式的值。 S n =1+1/1!+1/2!+1/3!+1/4!+1/n! 例如,若主函数从键盘给 n 输入 15,则输出为 S=2.718282。 注意:n 的值要求大于 1 但不大于 100。部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 试题程序: #includestdio.h double fun(int n) main() int n; double s; printf(“Input n:“); scanf(“%d“,
4、s=fun(n); printf(“S=%f/n“, s); (分数:40.00)_二级 C 语言-347 答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.函数 fun 的功能是:计算 (分数:30.00)解析:(1)1.0 (2)-1 (3)t 解析 填空 1:在这里要给 f 赋初值,由计算表达式可知此空应该填 1.0。 填空 2:在计算的过程中正负号是交错的,因而此空填写-1。 填空 3:本题考查了复合赋值运算,由本题求表达式 f(x)的值可知此空应该填写 t。二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fu
5、n 的功能是:从 3 个红球、5 个白球、6 个黑球中任意取出 8 个作为一组,进行输出。在每组中,可以没有黑球,但必须要有红球和白球。组合数作为函数值返回。正确的组合数应该是 15。程序中 i 的值代表红球数,j 的值代表白球数,k 的值代表黑球数。 请改正程序中的错误。使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序: #includestdio.h int fun() int i, j, k, sum=0; printf(“/nThe result:/n/n“); /*found*/ for(i=0; i=3; i+) for(j=
6、1; j=5; j+) k=8-i-j; /*found*/ if(k=1 printf(“red:%4d white:%4d black:%4d/n“, i, j, k); return sum; void main() int sum; sum=fun(); printf(“sum=%4d/n/n“, sum); (分数:30.00)解析:(1)for(i=1; i=3; i+) (2)if(k=0 double s; printf(“Input n:“); scanf(“%d“, s=fun(n); printf(“S=%f/n“, s); (分数:40.00)_正确答案:()解析:double fun(int n) double t, sn=1.0; int i, j; for(i=1; i=n; i+) t=1.0; for(j=1; j=i; j+) t*=j; sn+=1.0/t; return sn; 解析 在程序中输入 n 后,以前 n 项的阶乘作为分母递加,由于 t 是浮点型数据,所以写为复合赋值语句 s+=1.0/t;。for 循环的作用是每一次循环将 1.0/t 与 sn 相加,并将值存入 sn 中。