1、国家二级 C+机试(操作题)模拟试卷 182及答案与解析 一、基本操作题 1 给定程序中,函数 fun的功能是:将形参 s所指字符串中的数字字符转换成对应的数值,计算出这些数值的累加和作为函数值返回。 例如,形参 S所指的字符串为 abs5defl26jkm8,程序执行后的输出结果为 22。 请在程序的中括号处填入正确的内容并把中括号删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include #include #include int fun(char*s) int sum=0; while(*s) *fo
2、und* 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); 二、简单应用题 2 给定程序 MODll c中,函数 fun()的功能是统计 S所指一维数组中 0的个数 (存在变量 zero中 )和 l的个数 (存在变量 orle中 ),并输出结果。 请改正函数 fun中指定部位的错误,使它能得出正确
3、的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include void fun(int*s, int n) *found* int i, one=0, zero; for(i=0; i #include 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: 1d n“, c); 国家二级 C+机试(操作题)模拟试卷 182
4、答案与解析 一、基本操作题 1 【正确答案】 (1)48或 0 (2)s+ (3)sum 【试题解析】 本题是把字符串中是数字字符转换成对应的数值并进行累加。 填空 1: 0字符对应的 ASCII码值是 48,因此数字字符转换成对应数值时只要减去 48,即是该数字字符对应的数值,所以应填 48或者 0。 填空 2:判断完一个字符之后,将 字符串指针移到下一个位置,所以应填 s+。 填空 3:返回累加和 sum,所以应填 sum。 二、简单应用题 2 【正确答案】 (1)int i, one=0, zero=0; (2)switch(si) (3)case 0: zero+; break; 【试
5、题解析】 (1)变量 zero用来统计数字 0的个数,应将其初始化为 0。 (2)语法错误, switch语句后不加分号。 (3)当数字为 0时,变量 zero加 1,此时应使用 break语句跳出 switch语句,进行下一次循环, 否则会继续执行 case 1语句,使程序不能得出正确结果。 三、综合应用题 3 【正确答案】 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的个位数和十位数,取出后如何表示成 c中相应的位数。由于 a和 b都是只有两位的整数,所以分别对它们除以10可得到它们的十位数,分别用 10对它们求余可得到它们的个位数。得到后对应乘以 1000、 100、 10、 1即可得到 c的千位数、百位数、十位数和个位数。注意使用 c时要进行指针运算。