1、国家二级 C语言机试(操作题)模拟试卷 333及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是:统计形参 s所指字符串中数字字符出现的次数,并存放在形参 t所指的变量中,最后在主函数中输出。例如,形参 s所指的字符串为:abcdef35adgh3kjsdf7。输出结果为:4。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1C 中。 不得增行或删行,也不得更改程序的结构!1 #includestdioh2 void fun(char *s,in
2、t *t)3 int i,n;4 n=0;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!nn); exit(0);20 for(2=0;si;i+)21
3、ifsi0 si722 printf(Error: c not is ocatal digits!nn,si);exit(0);23 printf(The original string:);puts(s);24 n=fun(s);25 printf(nS is convered to integer number:dnn,s,n);26 (分数:2.00)_三、程序设计题(总题数:1,分数:2.00)3.函数 fun的功能是:将 a、b 中的两个两位正整数合并形成一个新的整数放在 c中。合并的方式是:将a中的十位和个位数依次放在变量 c的千位和十位上,b 中的十位和个位数依次放在变量 c的个
4、位和百位上。 例如,当 a=45,b=12。调用该函数后,c=4251。 注意:部分源程序存在文件 PROG1C 中。数据文件 INDAT 中的数据不得修改。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。1 #includestdioh2 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(indat,r);10 wf=fopen(outdat
5、,w);11 for(i=0;i10;i+)12 fscanf(rf,d,d,a,21 printf(Input a,b:);22 scanf(dd,a,b);23 fun(a,b,c);24 printf(The result is:1dn,c);25 NONO();(分数:2.00)_国家二级 C语言机试(操作题)模拟试卷 333答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是:统计形参 s所指字符串中数字字符出现的次数,并存放在形参 t所指的变量中,最后在主函数中输出。例如,形参 s所指的字符串为:abcde
6、f35adgh3kjsdf7。输出结果为:4。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1C 中。 不得增行或删行,也不得更改程序的结构!1 #includestdioh2 void fun(char *s,int *t)3 int i,n;4 n=0;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;in
7、t i;int n ;18 printf(Enter a string (ocatal digits):);gets(s);19 if(strlen(s)5)printf(Error:stririg too longer!nn); exit(0);20 for(2=0;si;i+)21 ifsi0 si722 printf(Error: c not is ocatal digits!nn,si);exit(0);23 printf(The original string:);puts(s);24 n=fun(s);25 printf(nS is convered to integer numb
8、er:dnn,s,n);26 (分数:2.00)_正确答案:(正确答案:(1)n=*p-0; (2)n=n*8+*p-0;)解析:解析:函数功能是实现八进制到十进制的转换。 (1)第一个标识下面:语句“n=*p-o;”中的o不是数字零,而是字母o,根据前面的分析因此改为:“n=*p-0;”。 (2)第二个标识下面:语句“n=n*8+*p-o”,首先进行同(1)相同的修改,变量 P没有定义,根据题意要求这里应该是“*p-0”,所以此句改为:“n=n*8+*p-0;”。三、程序设计题(总题数:1,分数:2.00)3.函数 fun的功能是:将 a、b 中的两个两位正整数合并形成一个新的整数放在 c中
9、。合并的方式是:将a中的十位和个位数依次放在变量 c的千位和十位上,b 中的十位和个位数依次放在变量 c的个位和百位上。 例如,当 a=45,b=12。调用该函数后,c=4251。 注意:部分源程序存在文件 PROG1C 中。数据文件 INDAT 中的数据不得修改。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。1 #includestdioh2 void fun(int a,int b,long *c)3 4 5 void NONO()6 *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 *7 FILE *rf,*wf;8 in
10、t i,a,b;long c ;9 rf=fopen(indat,r);10 wf=fopen(outdat,w);11 for(i=0;i10;i+)12 fscanf(rf,d,d,a,21 printf(Input a,b:);22 scanf(dd,a,b);23 fun(a,b,c);24 printf(The result is:1dn,c);25 NONO();(分数:2.00)_正确答案:(正确答案:*c=(a10) *1000+(b10)*100+(a10)*10+(b10);)解析:解析:(1)分解两位数的正整数 n的个位和十位数,可用 n10 和 n10 实现。(2)设x0、x1、x2、x3 为一位数,则 x0、x110、x2100、x31000,可以分别使 x0、x1、x2、x3 构成个、十、百、千带权数,而 x0+x110+x2100+x31000构成四位数。本题最多只考虑四位数。