1、国家二级 C语言机试(操作题)模拟试卷 333及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:统计形参 s所指字符串中数字字符出现的次数,并存放在形参 t所指的变量中,最后在主函数中输出。例如,形参 s所指的字符串为: abcdef35adgh3kjsdf7。输出结果为: 4。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 1 #include stdio h 2 void fun(char *s, int *t) 3 int i, n; 4 n=0;
2、 5 *found* 6 for(i=0; _1_ !=0; i+) 7 *found* 8 if(si =0 9 while(*p!=0) 10 *found* 11 n=n*8+*p-0; 12 p+; 13 14 return n; 15 16 main() 17 char s6; int i; int n ; 18 printf(Enter a string (ocatal digits): ); gets(s); 19 if(strlen(s) 5)printf(Error: stririg too longer! n n); exit(0); 20 for(2=0; si; i+)
3、 21 ifsi 0 si 7 22 printf(Error: c not is ocatal digits! n n, si); exit(0); 23 printf(The original string: );puts(s); 24 n=fun(s); 25 printf( n S is convered to integer number: d n n, s, n); 26 三、程序设计题 3 函数 fun的功能是:将 a、 b中的两个两位正整数合并形成一个新的整数放在 c中。合并的方式是:将 a中的十位和个位数依次放在变量 c的千位和十位上, b中的十位和个位数依次放在变量 c的个
4、位和百位上。 例如,当 a=45, b=12。调用该函数后, c=4251。 注意:部分源程序存在文件 PROG1 C中。数据文件 IN DAT中的数据不得修改。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 1 #include stdio h 2 void fun(int a, int b, long *c) 3 4 5 void NONO() 6 *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 * 7 FILE *rf, *wf; 8 int i, a, b; long c ; 9 rf=fopen(in dat, r)
5、; 10 wf=fopen(out dat, w); 11 for(i=0; i 10; i+) 12 fscanf(rf, d, d, a, 21 printf(Input a, b: ); 22 scanf( d d, a, b); 23 fun(a, b, c); 24 printf(The result is: 1d n, c); 25 NONO(); 国家二级 C语言机试(操作题)模拟试卷 333答案与解析 一、程序填空题 1 【正确答案】 (1)si (2)9 (3)*t=n 【试题解析】 搜索整个字符串,判断 si =0且 si =9,满足该条件后,计数变量加 1,因此 第一空:
6、循环终止条件是达到了字符串的尾部,字符串以 “ 0”(或 NULL)结束,故第一空处应为 si。第二 空:数字字符的判断是 si =0且 si =9,故第二空处应为 “9”。第三空:这里是将数字字符出现的次数存放在形参 t里, n记录了数字字符的个数,而形参 t是指针变量,故第三处应为 “*t=n”。 二、程序修改题 2 【正确答案】 (1)n=*p-0; (2)n=n*8+*p-0; 【试题解析】 函数功能是实现八进制到十进制的转换。 (1)第一个标识下面:语句 “n=*p-o; ”中的 o不是数字零,而是字母 o,根据前面的分析因此改为: “n=*p-0; ”。 (2)第二个标识下面:语句
7、 “n=n*8+*p-o”,首先进行同 (1)相同的修改,变量 P没有定义,根据题意要求这里应该是 “*p-0”,所以此句改为: “n=n*8+*p-0; ”。 三、程序设计题 3 【正确答案】 *c=(a 10) *1000+(b 10)*100+(a 10)*10+(b 10); 【试题解析】 (1)分解两位数的正整数 n的个位和十位数,可用 n 10和 n 10实现。 (2)设 x0、 x1、 x2、 x3为一位数,则 x0、 x110、 x2100、 x31000,可 以分别使 x0、 x1、 x2、 x3构成个、十、百、千带权数,而x0+x110+x2100+x31000构成四位数。本题最多只考虑四位数。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1