1、二级 C 语言-179 及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.下列给定程序中,函数 fun 的功能是:找出 100X(X999)之间各位上的数字之和为 15 的所有整数,并在屏幕输出;将符合条件的整数的个数作为函数值返回。 例如,当 n 值为 500 时,各位数字之和为 15 的整数有:159、168、177、186、195、249、258、267、276、 285、294、339、348、357、366、375、384、393、429、438、447、456、465、474、483、492,共有 26个。 请在下划线处填入正确
2、的内容,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #includestdio.h int fun(int x) (int n,s1,s2,s3,t; /*found*/ n= 1; t=100; /*found*/ while(t= 2) s1=t%10;s2=(t/10)%10; s3=t/100; if(s1+s2+s3=15) (printf(“%d“,t); n+; /*found*/ 3; return n; main() int X=-1; while(x999|X0) (printf(“Please input(0X9
3、99):“); scanf(“%d“,x); printf(“/nThe result is:%d/n“,fun(x); (分数:30.00)二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun 的功能是:先将 s 所指字符串中的字符按逆序存放到 t 所指字符串中,然后把 s 所指串中的字符按正序连接到 t 所指串之后。 例如,当 s 所指的字符串为“ABCDE”时,t 所指的字符串应为“EDCBAABCDE”。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序: #includestdlib
4、.h #includeconio.h #includestdio.h #includestring.h void fun(char *s,char *t) /*found*/ int i; s1=strlen(s); for(i=0;is1;i+) /*found*/ ti=ss1-i; for(i=0;is1;i+) ts1+i=si; t2*s1=“/0“; main() char s100,t100; system(“CLS“); printf(“/nPlease enter string s:“); scanf(“%s“,s); fun(s,t); printf(“The result
5、 is:%s/n“,t); (分数:30.00)_三、程序设计题(总题数:1,分数:40.00)3.函数 fun 的功能是:将 a、b 两个两位正整数合并成一个新的整数放在 c 中。合并的方式是:将 a 中的十位和个位数依次放在变量 c 的百位和个位上,b 中的十位和个位数依次放在变量 c 的干位和十位上。 例如,当 a=45,b=12,调用该函数后 c=1425。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 试题程序: #includeconio.h #includestdio.h void fun(int
6、 a,int b,long*c) main() int a,b; long c; printf(“Input a,b:“); scanf(“%d%d“,a,b); fun(a,b,c); printf(“The result is:%ld/n“,c); (分数:40.00)_二级 C 语言-179 答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.下列给定程序中,函数 fun 的功能是:找出 100X(X999)之间各位上的数字之和为 15 的所有整数,并在屏幕输出;将符合条件的整数的个数作为函数值返回。 例如,当 n 值为 500 时,各位
7、数字之和为 15 的整数有:159、168、177、186、195、249、258、267、276、 285、294、339、348、357、366、375、384、393、429、438、447、456、465、474、483、492,共有 26个。 请在下划线处填入正确的内容,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #includestdio.h int fun(int x) (int n,s1,s2,s3,t; /*found*/ n= 1; t=100; /*found*/ while(t= 2) s1=t%10;s2=(
8、t/10)%10; s3=t/100; if(s1+s2+s3=15) (printf(“%d“,t); n+; /*found*/ 3; return n; main() int X=-1; while(x999|X0) (printf(“Please input(0X999):“); scanf(“%d“,x); printf(“/nThe result is:%d/n“,fun(x); (分数:30.00)解析:0 x t+ 考点 本题关键字有:变量赋初值;while 循环语句。 解析 填空 1:符合条件的整数的个数存放在变量 n 中,所以将 n 赋初值为 0。 填空 2:题目要求求 1
9、00x 之间各位上的数字之和为 15 的整数,所以 t 的取值范围为 t=x。 填空 3:计算下一个整数,所以循环变量 t 自增 1。二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun 的功能是:先将 s 所指字符串中的字符按逆序存放到 t 所指字符串中,然后把 s 所指串中的字符按正序连接到 t 所指串之后。 例如,当 s 所指的字符串为“ABCDE”时,t 所指的字符串应为“EDCBAABCDE”。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序: #includestdlib.h #
10、includeconio.h #includestdio.h #includestring.h void fun(char *s,char *t) /*found*/ int i; s1=strlen(s); for(i=0;is1;i+) /*found*/ ti=ss1-i; for(i=0;is1;i+) ts1+i=si; t2*s1=“/0“; main() char s100,t100; system(“CLS“); printf(“/nPlease enter string s:“); scanf(“%s“,s); fun(s,t); printf(“The result is:
11、%s/n“,t); (分数:30.00)_正确答案:()解析:int i,s1; ti=ss1-i-1; 考点 本题关键字有:变量定义;字符串操作。 解析 (1)变量 s1 没有定义。 (2)将 s 串中的字符逆序存入 t 串中通过循环完成,ti对应 ss1-i-1。三、程序设计题(总题数:1,分数:40.00)3.函数 fun 的功能是:将 a、b 两个两位正整数合并成一个新的整数放在 c 中。合并的方式是:将 a 中的十位和个位数依次放在变量 c 的百位和个位上,b 中的十位和个位数依次放在变量 c 的干位和十位上。 例如,当 a=45,b=12,调用该函数后 c=1425。 注意:部分源
12、程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 试题程序: #includeconio.h #includestdio.h void fun(int a,int b,long*c) main() int a,b; long c; printf(“Input a,b:“); scanf(“%d%d“,a,b); fun(a,b,c); printf(“The result is:%ld/n“,c); (分数:40.00)_正确答案:()解析:void fun(int a,int b,long*c) /*b%10 获取 b 的个位,a/10 获取 a 的十位 a%10 获取 a 的个位,b/10 获取 b 的十位*/ *c=a%10+(b%10)*10+(a/10)*100+(b/10)*1000; 考点 本题关键字有:某数的各位上数值的表示方法;已知某数的各个位数值如何表示该数值;指针型变量。 解析 由于 a 和 b 都是两位数,所以对它们除,对 10 对求余可得到它们的十位数和个位数,也就是 c 的各位数,然后将其组合成 c,需注意 c 是指针。