1、二级 C 语言-136 及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.请补充 fun()函数,fun()函数的功能是求 n 的阶乘。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在 fun()函数的横线上填入所编写的若干表达式或语句。试题程序: #includestdio.h long fun(int n) if( 1) return(n*fun( 2); return 3; void main() printf(“10!=%1d/n“, fun(10); (分数:30.00)二、程序改错题(总题数:
2、1,分数:40.00)2.下列给定程序中,函数 fun()的功能是:统计 substr 所指的字符串在 str 所指的字符串中出现的次数。例如,若字符串为 aaas 1kaaas,子字符串为 as,则应输出 2。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构! 试题程序: #includestdio.h int fun(char*str, char*substr) int i, j, k, num=0; /*found* for(i=0, stri, i+) for(j=i, k=0; substrk=strj; k+, j
3、+) /*found* If(substrk+1=“/0“) num+; break; return nnm; void main() char str80, substr80; printf(“Input a string:“); gets(str); printf(“Input a substring:“); gets (substr); printf(“%d/n“, fun(str, substr); (分数:40.00)_三、程序设计题(总题数:1,分数:30.00)3.编写函数 fun(),其功能是:根据以下公式求的值(要求精度 0.0005,即某项小于 0.0005 时停止迭代)。
4、(分数:30.00)_二级 C 语言-136 答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.请补充 fun()函数,fun()函数的功能是求 n 的阶乘。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在 fun()函数的横线上填入所编写的若干表达式或语句。试题程序: #includestdio.h long fun(int n) if( 1) return(n*fun( 2); return 3; void main() printf(“10!=%1d/n“, fun(10); (分数:30.00)解析
5、:n1 或 1n n-1 1 或 11 或 1L 解析 此题应用的是递归算法,因为10!=109!,9!=98!,8!=87!依此类推,而 1!=1,2!=21!=2,3!=32!=6,依此可以推出 10!,递推算法表示为: n!=1(n=1 或 n=0) n!=n*(n-1)(n1)二、程序改错题(总题数:1,分数:40.00)2.下列给定程序中,函数 fun()的功能是:统计 substr 所指的字符串在 str 所指的字符串中出现的次数。例如,若字符串为 aaas 1kaaas,子字符串为 as,则应输出 2。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main()函数
6、,不得增行或删行,也不得更改程序的结构! 试题程序: #includestdio.h int fun(char*str, char*substr) int i, j, k, num=0; /*found* for(i=0, stri, i+) for(j=i, k=0; substrk=strj; k+, j+) /*found* If(substrk+1=“/0“) num+; break; return nnm; void main() char str80, substr80; printf(“Input a string:“); gets(str); printf(“Input a s
7、ubstring:“); gets (substr); printf(“%d/n“, fun(str, substr); (分数:40.00)_正确答案:()解析:(1)错误:for(i=0, stri, i+) 正确:for(i=0; stri; i+) (2)错误:If(substrk+1=“/0“) 正确:if(substrk+1=“/0“) 解析 for 循环语句形式应为:for(表达式 1;表达式 2;表达式 3),表达式之间是分号;C 语言标识符区分大小写,所以条件句关键词 if 应小写。三、程序设计题(总题数:1,分数:30.00)3.编写函数 fun(),其功能是:根据以下公式
8、求的值(要求精度 0.0005,即某项小于 0.0005 时停止迭代)。(分数:30.00)_正确答案:()解析:double fun(double eps) double s=1.0, s1=1.0; Int n=1; while(s1=eps) /当某项大于精度要求时,继续求下一项 s1=s1*n/(2*n+1); /求多项式的每一项 s=s+s1; /累加求和 n+; return 2*s; 解析 此题考查的是用迭代法求多项式的值。通过观察题目中给出的数学公式可知,后面一项是前面一项乘以 n/(2*n+1),发现这个规律后,问题迎刃而解。通过定义 double 类型变量,并且赋初值,用来存放多项式的总和。此题中需要注意的是,表示每一项的 s1 和表示多项式之和的 s,两者的初值都是1.0。