1、二级 C 语言-195 及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.下列给定程序中,函数 fun 的功能是:将形参 s 所指字符串中的数字字符转换成对应的数值,计算出这些数值的累加和作为函数值返回。 例如,形参 s 所指的字符串为 abs5def126jkm8,程序执行后的输出结果为 22。 请在程序的下划线处填入正确的内容,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #includestdio.h #includestring.h #includectype.h inc f
2、un(char*s) int sum=0; while(*s) /*found*/ if(isdigit(*s)sum+=*s- 1; /*found*/ 2; /*found*/ return 3; main() char s81;int n; printf(“/nEnter a string:/n/n“);gets(s); n=fun(s); printf(“/nThe result is:%d/n/n“,n); (分数:30.00)二、程序改错题(总题数:1,分数:30.00)2.下列给定的程序中,函数 fun 的功能是:计算并输出 k 以内最大的 10 个能被 13 或 17 整除的自
3、然数之和。k 的值由主函数传入,若 k 的值为 500,则函数的值为 4622。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序: #includestdio.h #includeconio.h #includestdlib.h int fun(int k) int m=0,mc=0,j; while(k2)(mc10) /*found*/ if(k%13=0)|(k%17=0) m=m+k;mc+; k-; /*found*/ return m; void main() system(“CLS“); printf(
4、“%d/n“,fun(500); (分数:30.00)_三、程序设计题(总题数:1,分数:40.00)3.编写函数 fun,它的功能是:求小于形参 n 同时能被 3 与 7 整除的所有自然数之和的平方根,并作为函数值返回。 例如,若 n 为 1000 时,程序输出应为:s=153.909064。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 试题程序: #includemath.h #includestdio.h double fun(int n) main()/*主函数*/ printf(“s=%f/n“,f
5、un(1000); (分数:40.00)_二级 C 语言-195 答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.下列给定程序中,函数 fun 的功能是:将形参 s 所指字符串中的数字字符转换成对应的数值,计算出这些数值的累加和作为函数值返回。 例如,形参 s 所指的字符串为 abs5def126jkm8,程序执行后的输出结果为 22。 请在程序的下划线处填入正确的内容,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #includestdio.h #includestring.h #
6、includectype.h inc fun(char*s) int sum=0; while(*s) /*found*/ if(isdigit(*s)sum+=*s- 1; /*found*/ 2; /*found*/ return 3; main() char s81;int n; printf(“/nEnter a string:/n/n“);gets(s); n=fun(s); printf(“/nThe result is:%d/n/n“,n); (分数:30.00)解析:48 s+ sum 解析 本题是把字符串中是数字字符转换成对应的数值并进行累加。 填空 1:“0“字符对应的 A
7、SCII 码值是 48,因此数字字符转换成对应数值时只要减去 48,即是该数字字符对应的数值,所以应填 48。 填空 2:判断完一个字符之后,将字符串指针移到下一个位置,所以应填 s+。 填空 3:返回累加和 sum,所以应填 sum。二、程序改错题(总题数:1,分数:30.00)2.下列给定的程序中,函数 fun 的功能是:计算并输出 k 以内最大的 10 个能被 13 或 17 整除的自然数之和。k 的值由主函数传入,若 k 的值为 500,则函数的值为 4622。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序
8、: #includestdio.h #includeconio.h #includestdlib.h int fun(int k) int m=0,mc=0,j; while(k2)(mc10) /*found*/ if(k%13=0)|(k%17=0) m=m+k;mc+; k-; /*found*/ return m; void main() system(“CLS“); printf(“%d/n“,fun(500); (分数:30.00)_正确答案:()解析:if(k%13=0)|(k%17=0) 解析 (1)C 语言中,x 能被 y 整除的表示方法是 x%y0,而不是题目中所表示的 x
9、%y0。所以,if(k%130)|(k%170)修改后的结果应该是答案所示信息。 (2)程序中缺少程序完整所需的“,此类信息在做题时一定要注意,可以在做题前先运行一下程序,这样明显的错误一般都会有错误信息显示出来。比如丢失“的错误信息是“Compound statement missing in function fun“。三、程序设计题(总题数:1,分数:40.00)3.编写函数 fun,它的功能是:求小于形参 n 同时能被 3 与 7 整除的所有自然数之和的平方根,并作为函数值返回。 例如,若 n 为 1000 时,程序输出应为:s=153.909064。 注意:部分源程序给出如下。 请勿
10、改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 试题程序: #includemath.h #includestdio.h double fun(int n) main()/*主函数*/ printf(“s=%f/n“,fun(1000); (分数:40.00)_正确答案:()解析:double fun( int n) double sum=0.0; int i; for(i=21; i=n; i+) if(i % 3=0) return sgrt(sum); 解析 本题考查算术运算的算法,首先利用一个 for 循环判断小于 n 且能同时被 3 和 7 整除的整数,并将满足条件的整数累加到 sum,之后调用 sgrt 函数计算 sum 的平方根,并作为函数的返回值。