1、二级 C 语言机试-179 及答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:30.00)请补充 fun 函数,fun 函数的功能是求 n 的阶乘。注意:部分源程序已给出。请勿改动主函数 main 和其他函数中的任何内容,仅在 fun 函数的横线上填入所编写的若干表达式或语句试题程序:#includestdio.hlong fun(int n)if( (1) )return(n*fun( (2) );return (3) ;main()printf(“10!=%1d/n“,fun(10);(分数:30.00)填空项 1:_填空项 1:_填空项 1:_二、改错题
2、(总题数:1,分数:30.00)1.下列给定程序中函数 fun 的功能是:统计 substr 所指的字符串在 str 所指的字符串中出现的次数。例如,若字符串为 aaas 1kaaas,子字符串为 as,则应输出 2。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!试题程序:#includestdiohint 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(sub
3、strk+1=/0)num +;break;return num;main()char str80,substr80;printf(“Input a string:“);gets(str);printf(“Input a substring:“);gets(substr);printf(“%d/n“fun(str,substr);(分数:30.00)填空项 1:_三、编程题(总题数:1,分数:40.00)2.编写函数 fun,其功能是:根据以下公式求值(要求精度 0.0005,即某项小于 0.0005 时停止迭代)。(分数:40.00)_二级 C 语言机试-179 答案解析(总分:100.00
4、,做题时间:90 分钟)一、填空题(总题数:1,分数:30.00)请补充 fun 函数,fun 函数的功能是求 n 的阶乘。注意:部分源程序已给出。请勿改动主函数 main 和其他函数中的任何内容,仅在 fun 函数的横线上填入所编写的若干表达式或语句试题程序:#includestdio.hlong fun(int n)if( (1) )return(n*fun( (2) );return (3) ;main()printf(“10!=%1d/n“,fun(10);(分数:30.00)填空项 1:_ (正确答案:n1 或 1n)解析:填空项 1:_ (正确答案:n-1)解析:填空项 1:_ (
5、正确答案:1 或 11 或 1L)解析:解析 此题应用的是递归算法,我们知道 10!=109!,9!=98!,8!=87!依此类推,而1!=1,2!=21!=2,3!=32!=6,依此可以推出 10!,递推算法表示为:n!=1(n1)n!=n*(n-1)(n1)二、改错题(总题数:1,分数:30.00)1.下列给定程序中函数 fun 的功能是:统计 substr 所指的字符串在 str 所指的字符串中出现的次数。例如,若字符串为 aaas 1kaaas,子字符串为 as,则应输出 2。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构
6、!试题程序:#includestdiohint 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 num;main()char str80,substr80;printf(“Input a string:“);gets(str);printf(“Input a substring:“);gets(substr);printf(“%d/n“fun(str,substr
7、);(分数:30.00)填空项 1:_ (正确答案:(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,分数:40.00)2.编写函数 fun,其功能是:根据以下公式求值(要求精度 0.0005,即某项小于 0.0005 时停止迭代)。(分数:40.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。