1、国家二级 C语言机试(操作题)模拟试卷 456及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.下列给定程序中,函数 fun的功能是:找出 100一 x(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、4
2、92,共有 26个。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #include stdioh int fun(int x) int n , s1 , s2 , s3 , t; /*found*/ n= 【1】 ; t=100; /*found*/ while(t = 【2】 ) s1=t10;s2=(t/10)10; s3=t/100; if(s1+s2+s3=1 5) printf(“d,t); n+; /*found*/ 【3】 ; return n; main() int x=
3、一 1; while(x 999 |x 0) printf(“Please input(0 x =999):“);scanf(“d“,&x); printf(“/nThe resultis:d/n“,fun(x); (分数:2.00)_二、程序修改题(总题数:1,分数:2.00)2.下列给定程序中,函数 fun的功能是:先将 s所指字符串中的字符按逆序存放到 t所指字符串中,然后把 s所指串中的字符按正序连接到 t所指串之后。 例如,当 s所指的字符串为“ABCDE”时,t 所指的字符串应为“EDCBAABCDE”。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不
4、得增行或删行,也不得更改程序的结构! 试题程序:#include stdlibh #include conioh #include stdioh #include stringh void fun(char*s,char*t)/*found*/ int i; s1=str1en(s); for(i=0;i s1;i+)/*found*/ ti=ss1一 i; for(i=0 ; i =s1 ; i+) ts1+i=si; t2*s1=/0;void main() char s1 00,t1 00; system(“CLS“); printf(“/n Please enterstring s:“
5、); scanf(“s“,s); fun(S,t); printf (“The result is:s/n“,t);(分数:2.00)_三、程序设计题(总题数:1,分数:2.00)3.函数 fun的功能是:将 a、b 两个两位正整数合并成一个新的整数放在 c中。合并的方式是:将 a中的十位和个位数依次放在变量 c的百位和个位上,b 中的十位和个位数依次放在变量 c的千位和十位上。 例如,当 a=45,b=12,调用该函数后 c=1425。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序:#include c
6、onioh #include stdioh void fun(int a,int b,long*c)main() int a,b; long c; printf(“Input a,b:“); scanf(“dd“,&a,&b); fun(a,b,&c); printf(“The result is:id/n“,c);(分数:2.00)_国家二级 C语言机试(操作题)模拟试卷 456答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.下列给定程序中,函数 fun的功能是:找出 100一 x(x999)之间各位上的数字之和为 15的所有整数,并在屏幕输出
7、;将符合条件的整数的个数作为函数值返回。 例如,当 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个。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #include stdioh int fun(int x) int n , s1 , s
8、2 , s3 , t; /*found*/ n= 【1】 ; t=100; /*found*/ while(t = 【2】 ) s1=t10;s2=(t/10)10; s3=t/100; if(s1+s2+s3=1 5) printf(“d,t); n+; /*found*/ 【3】 ; return n; main() int x=一 1; while(x 999 |x 0) printf(“Please input(0 x =999):“);scanf(“d“,&x); printf(“/nThe resultis:d/n“,fun(x); (分数:2.00)_正确答案:(正确答案:(1)
9、0 (2)x (3)t+)解析:解析:填空 1:变量 n用于存放符合条件的整数的个数,应赋初值为 0。 填空 2:根据题目要求,确定循环变量 t的取值范围为 t=x。 填空 3:循环变量 t自增 1操作。二、程序修改题(总题数:1,分数:2.00)2.下列给定程序中,函数 fun的功能是:先将 s所指字符串中的字符按逆序存放到 t所指字符串中,然后把 s所指串中的字符按正序连接到 t所指串之后。 例如,当 s所指的字符串为“ABCDE”时,t 所指的字符串应为“EDCBAABCDE”。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结
10、构! 试题程序:#include stdlibh #include conioh #include stdioh #include stringh void fun(char*s,char*t)/*found*/ int i; s1=str1en(s); for(i=0;i s1;i+)/*found*/ ti=ss1一 i; for(i=0 ; i =s1 ; i+) ts1+i=si; t2*s1=/0;void main() char s1 00,t1 00; system(“CLS“); printf(“/n Please enterstring s:“); scanf(“s“,s);
11、 fun(S,t); printf (“The result is:s/n“,t);(分数:2.00)_正确答案:(正确答案:(1)int i,s1; (2)ti =ss1 一 i一 1;)解析:解析:(1)变量 s1没有定义。 (2)该循环实现将 s串中的字符逆序存入 t串中,ti对应 s串中的ss1一 i一 1。三、程序设计题(总题数:1,分数:2.00)3.函数 fun的功能是:将 a、b 两个两位正整数合并成一个新的整数放在 c中。合并的方式是:将 a中的十位和个位数依次放在变量 c的百位和个位上,b 中的十位和个位数依次放在变量 c的千位和十位上。 例如,当 a=45,b=12,调用
12、该函数后 c=1425。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序:#include conioh #include stdioh void fun(int a,int b,long*c)main() int a,b; long c; printf(“Input a,b:“); scanf(“dd“,&a,&b); fun(a,b,&c); printf(“The result is:id/n“,c);(分数:2.00)_正确答案:(正确答案:void fun (int a,int b,long*c) /*b 10 获取 b的个位,a/10 获取 a的十位,a 10 获取 a的个位,b/1 0 获取 b的十位*/ *c=a 10+(b 10)* 10+(a/10)* 100+(b/10)* 1000; )解析:解析:本题的主要问题是如何取出 a和 b的个位数和十位数,取出后如何表示成 c中相应的位数。由于 a和 b都是只有两位的整数,所以分别对它们除 10可得到它们的十位数,分别用 10对它们求余可得到它们的个位数。得到后对应乘以 1000、100、10、1,就可得到 c的千位数、百位数、十位数和个位数。注意使用 c时要进行指针运算。