1、二级 C 语言-53 及答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分数:30.00)1.请补充函数 fun(),该函数的功能是:返回字符数组中指定子符的个数,指定字符从键盘输入。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun()的横线上填入所编写的若干表达式或语句。 试题程序: #include stdio.h #define N 80 int fun (char s,char ch) int i=0, n=0; while(U U /U /U) if(U U /U /U) n+; i+; U U /U
2、/U; main ( ) int n; char strN, ch; clrscr (); printf (“/nInput a string: /n“); gets (str); printf (“/nInput a charactor: /n“ ; scanf (“%c“, n=fun (str, ch); printf(“/nnumber of %c:%d“, ch, n); (分数:30.00)填空项 1:_二、B改错题/B(总题数:1,分数:30.00)2.下列给定程序中函数 fun 的功能是:实现两个变量值的交换,规定不允许增加语句和表达式。 例如,变量 a 中的值原为 8,b 中
3、的值原为 3,程序运行后 a 中的值为 3,b 中的值为 8。 请改正程序中的错误,使它得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序:#includestdlib.h #includeconio.h #includestdio.h int fun(int*x,int y) int t: /*found*/ t=x;x=y; /*found*/ return(y); void main() int a=3,b=8; system(“CLS“); printf(“%d%d/n“,a,b); b=fun( while(U U /U /U) if(
4、U U /U /U) n+; i+; U U /U /U; main ( ) int n; char strN, ch; clrscr (); printf (“/nInput a string: /n“); gets (str); printf (“/nInput a charactor: /n“ ; scanf (“%c“, n=fun (str, ch); printf(“/nnumber of %c:%d“, ch, n); (分数:30.00)填空项 1:_ (正确答案:1 si或者 si!= /0 2 si=ch 3 return n)解析:解析 填空 1:while 循环的条件是
5、当前参加比较的字符不为/0,即还没有到字符串的最后一个字符。填空 2:如果当前字符等于指定字符,则统计个数的变量 n 加 1。填空 3:函数要求返回字符数组中指定字符的个数,所以函数要返回 n。二、B改错题/B(总题数:1,分数:30.00)2.下列给定程序中函数 fun 的功能是:实现两个变量值的交换,规定不允许增加语句和表达式。 例如,变量 a 中的值原为 8,b 中的值原为 3,程序运行后 a 中的值为 3,b 中的值为 8。 请改正程序中的错误,使它得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序:#includestdlib.h #i
6、ncludeconio.h #includestdio.h int fun(int*x,int y) int t: /*found*/ t=x;x=y; /*found*/ return(y); void main() int a=3,b=8; system(“CLS“); printf(“%d%d/n“,a,b); b=fun(&a,b); printf(“%d%d/n“,a,b); (分数:30.00)填空项 1:_ (正确答案:(1)错误:t=x;x=y; 正确:t=*x;*x=y; (2)错误:return(y); 正确:return(t);或 return t;)解析:解析 该题考查
7、的是指针型变量的使用和如何通过 renturn 语句返回函数值。首先应该明确,题目中给出 x 是指针型函数,所以数据交换时应使用*x 而不是 x;t 是一个中间变量,而且由赋值语句b=fun(8a,b)可知,返回值将赋给变量 b,而 b 中应存放交换前*x 中的值,所以返回的变量应为 t,而非y。三、B编程题/B(总题数:1,分数:40.00)3.编写函数 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。