1、国家二级 C语言机试(操作题)模拟试卷 400及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是:把形参 s所指字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移出字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动(注:字符串的长度大于等于2)。例如,形参 s所指的字符串为:abcdefgh,执行结果为:ahcbedgf。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1C 中。 不得增行或删行,也不得更改程序的结构!1 #inclu
2、destdioh2 void fun(char *s)3 int i,n,k;char c;4 n=0,5 for(i=0;si!=0;i+)n+;6 *found*7 if(n2=0)k=n_1_;8 else k=n-2;9 *found*10 c=_2_;11 for(i=k-2; i=1j i=i-2) si+2=si;12 *found*13 s1=_3_;14 15 main()16 char s80=abcdefgh;17 printf(nThe original string is:sn,s);18 fun(s);19 printf(nThe result is:sn,s);2
3、0 (分数:2.00)_二、程序修改题(总题数:1,分数:2.00)2.给定程序 MODI1C 中函数 fun的功能是:计算并输出 high以内最大的 10个素数之和。high 的值由主函数传给 fun函数。 若 high的值为:100,则函数的值为:732。 请改正程序中的错误,使程序能输出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构!1 #includestdioh2 #includemathh3 int fun(int high)4 int sum=0,n=0,j,yes;5 *found*6 while(high=2) i=1j i=i-2) si+
4、2=si;12 *found*13 s1=_3_;14 15 main()16 char s80=abcdefgh;17 printf(nThe original string is:sn,s);18 fun(s);19 printf(nThe result is:sn,s);20 (分数:2.00)_正确答案:(正确答案:(1)1 (2)sk (3)c)解析:解析:函数 fun的功能是移动下标为奇数位置的字符。 第一空:“for(i=0;si!=0;i+)n+;”n 记录了数组 s的长度,“if(n2=0)”如果长度 n是偶数,那么最右边被移出的字符的下标是在 n-1,如果 n是奇数,那么最
5、右边被移出的字符的下标是 n-2,因此第一空处应为“1”。 第二空:题目要求最右边被移出字符串的字符绕回放到第一个奇数位置,因此最右边被移出的字符是 sk,在 sk被替换之前必须先把 sk保存在其他变量中,故第二空处应为“sk”,将 sk保存在 c中。 第三空:此处是把最右边被移出字符串的字符绕回放到第一个奇数位置,最右边被移出字符保存在 c,第一奇数位置是 s1,故第三处应为“c”。二、程序修改题(总题数:1,分数:2.00)2.给定程序 MODI1C 中函数 fun的功能是:计算并输出 high以内最大的 10个素数之和。high 的值由主函数传给 fun函数。 若 high的值为:100
6、,则函数的值为:732。 请改正程序中的错误,使程序能输出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构!1 #includestdioh2 #includemathh3 int fun(int high)4 int sum=0,n=0,j,yes;5 *found*6 while(high=2) break;)解析:解析:函数的功能是计算并输出 high以内最大的 10个素数之和。 (1)C 语言中左右括弧必须成对出现,在第一个标识下“while(high=2)&(n10)”中,显然缺少一个右括弧,应改为“while(2=high)&(n10)”。 (2)在
7、判断素数的循环过程中,只要被判断的数能被某数整除就不是素数,就会跳出判断循环,在 C语言中使用 break语句跳出循环,并且 C语言中的语句使用分号为结尾。所以“break”应改为“break;”。三、程序设计题(总题数:1,分数:2.00)3.请编写函数 fun,函数的功能是:统计一行字符串中单词的个数,作为函数值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开始没有空格。 注意:部分源程序在文件 PROG1C 中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。1 #includestdioh2
8、 #includestringh3 #define N 804 int fun(char *s)5 67 8 main()9 char 1ineN;int num=0; void NONO();10 printf(Enter a string:n);gets(line);11 num=fun(line);12 printf(The number of wordis:dnn,num);13 NONO();14 15 void NONO()16 *请在此函数内打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。*17 FILE *rf,*wf;int i,num;charlineN,*p
9、;18 rf=fopen(indat,r);19 wf=fopen(outdat,w);20 for(i=0;i10;i+)21 fgets(1ine,N,rf);22 p=strchr(1ine,n);23 if(p!=NULL) *p=0;24 num=fun(1ine);25 fprintf(wf,dn,num);26 27 fclose(rf);fclose(wf);28 (分数:2.00)_正确答案:(正确答案:1 int i,n=0;字符统计初始值设置为 0 2 for(i=0;istrlen(s);i+) 3 小于字符串长度进行字符循环判断 4 5 if(si=a &si=z &si+1= si+1=0) 单词判断条件 6 n+; 单词统计计数器加 1 7 8 return n; 返回统计值)解析:解析:(1)首先,求得字符串的长度。 (2)只要小于字符串的长度,就对字符进行循环判断。 (3)根据题干要求,只要字符是小写字母,并且下一个紧靠的字符是空格或者尾符,那么单词统计计数器就加1。