1、二级 C 语言-45 及答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分数:30.00)请补充 fun 函数,该函数的功能是:把一个整数转换成字符串,并倒序保存在字符数组 S 中。例如,当 n=123 时,s=“321“。注意:部分源程序已给出。淆勿改动主函数 main 和其他函数中的任何内容,仅在 main 函数的横线上填入所编写的若干表达式或语句。试题程序:#includestdio.h#includeconio.h#define M 80char sM;void fun(long int n)int j=0;while(U U 1 /U /U)sj=U
2、 U 2 /U /U;n/=10;j+;U U 3 /U /U;main()long int n=1234567;printf(“The origial data/n“);printf(“n=%1d“,n);fun(n);printf(“/n%s“,s);(分数:30.00)填空项 1:_填空项 1:_填空项 1:_二、B改错题/B(总题数:1,分数:30.00)1.给定程序 MODI1.C 中函数 fun 的功能是:找出一个大于形参 m 且紧随 m 的素数,并作为函数值返回。 请改正程序中的错误,使程序能输出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。
3、 文件 MODI1.C 内容如下: #includestdio.h int fun(int m) int i, k; for(i=m+1;i+) for(k=2;ki;k+) /*found*/ if(i%k!=0)break; /*found*/ if(ki)return(i); void mainU /U int m,n; printf(“Please enter an integer number:/n“): scanf(“%d“, for(i=m+1;i+) for(k=2;ki;k+) /*found*/ if(i%k!=0)break; /*found*/ if(ki)return
4、(i); void mainU /U int m,n; printf(“Please enter an integer number:/n“): scanf(“%d“,&m); n=fun(m); printf(“The prime number after m:/n“); printf(“%d/n“,n); (分数:30.00)填空项 1:_ (正确答案:第 1 处:将“if(i%k!=0)”改为“if(i%k=0)”。 第 2 处:将“if(ki)”改为“if(k=i)”。)解析:解析 程序中的两处错误均是逻辑上的错误,所以必须分析程序使用的算法。i 循环从 m+1 开始循环,对每一个 i
5、,内层循环 k 都从 2 开始,循环到 i(不包括 i 本身),如果找到一个 k 能被 i 整除,则说明 i 不是素数应该结束本轮循环,取出下一个 i 值进行判断。所以第 1 处应该将“!=”改为“=”。k循环有两个出口,如果通过 break 中断循环,此时 ki;如果始终都没有一个 k 能被 i 整除,则当 k=i时也可跳出循环,所以跳出 k 循环后要返回 i 的值,条件一定是“k=i”的情况,所以第 2 处应该将“”改为“=”。三、B编程题/B(总题数:1,分数:40.00)2.编写函数 fun,其功能是:求 ss 所指字符串中指定字符的个数,并返回此值。 例如,若输入字符串”123412
6、132”,输入字符为”1”,则输出 3。 注意:部分源程序已给出。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。 试题程序: #includestdlib.h #includeconio.h #includestdio.h #define M 81 int fun(char*ss,char c) int i=0; for(;*ss!=/0;ss+) if(*ss=c) i+;/*求出 ss 所指字符串中指 定字符的个数*/ return 1: void main() char aM,ch; system(“CLS“); printf(“/
7、n Please enter a string:“); gets(a); printf(“/nPlease enter a char:“); ch=getchar(); printf(“/nThe number of the char is:%d/n“,fun(a,ch); (分数:40.00)_正确答案:(int fun(char*ss,char c) int i=0; for(;*ss!=/0;ss+) if(*ss=c) i+;/*求出 ss 所指字符串中指定字符的个数*/ return i; )解析:解析 此题考查用 for 循环遍历字符串和通过条件表达式*ss!=/0判断字符串是否结束。给字符串加上结束标识/0,通过 for 循环遍历字符串中每一个字符,在遇到结束标识前,如果遇到指定(即用户输入)字符,变量 i 加 1,最后将变量 i 返回,即用户输入字符在串中出现的次数。