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