1、国家二级 C 语言程序设计机试(程序修改题)模拟试卷 3 及答案解析(总分:8.00,做题时间:90 分钟)一、程序修改题(总题数:4,分数:8.00)1.下列给定程序中,函数 fun 的功能是:读入一个字符串(长度20),将该字符串中的所有字符按 ASCII码值升序排序后输出。例如,若输入“edcba”,则应输出“abode”。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序:#includestringh#includestdiohvoid fun(ehar t) char c; int i,j;*found*
2、for(i=strlen(t);i;i 一一) for(j=0;ji;j+)*found* if(tjtj+1) t c=tj; tj=tj+1; tj+1=c; main()char s81;prinff(“nPlease enter a character string:”);gets(s);printf(“nnBefore sorting:ns”,s);fun(s);printf(“nAiler sorting deeendingly:ns”,s);(分数:2.00)_2.下列给定程序中,函数 fun 的功能是:删除指针 P 所指字符串中的所有空白字符(包括制表符、回车符及换行符)。输入
3、字符串时用#结束输入。请改正程序中的错误,使它能输出正确的结果。注意:不得增行或删行,也不得更改程序的结构!试题程序:#includestringh#includestdioh#includeetypehfun(char*P)int i,t;char c80;*found*For(i=0,t=0;Pi;i+) if(!isspace(*(P+i) ct+=Pi;*found* ct=“0”; strepy(p,c);main() char c,s80; int i=0; prinff(“Input a string:”); c=getchar(); while(c!=#) si=c;i+;c=
4、getehar(); 8i=0; fun(s); puts(s);(分数:2.00)_3.下列给定程序中,函数 fun 的功能是:将 m(1m10)个字符串连接起来,组成一个新串,放入 pt 所指存储区中。例如:把三个串“abe”“CD”“EF”连接起来,结果是”abc-CDEF”。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序:#includestdioh#includestringhvoid fun(char str10,int m,char*pt)*found* Int k,q,i; for(k=0;km;k
5、+) q=strlen(strk); for(i=0;iq;i+)*found* pti=strk,i; pt+=q; pt0=0; main() int m,h; char s1010,P120; parintf(“nPlease enter m:”); seanf(“d”,&m); gets(sro); printf(“nPlease entl“d string:n”,m); for(h=0;hm;h+) gets(sh);fun(s,m,P); prinff(“nThe result is:sn”,P);(分数:2.00)_4.下列给定程序中,函数 fun 的功能是:依次取出字符串中所有
6、的数字字符,形成新的字符串,并取代原字符串。 请改正函数 fun 中的错误,使它能得出正确的结果。 注意:不得增行或删行,也不得更改程序的结构! 试题程序:#includestdlibh#includestdioh#includeeoniohvoid fun(char*s) int i,j; for(i=0,j=0;si1=0;i+) if(si=0&si=9)*found* sj=si;*found* sj=“0”;void main() char item80; system(“CLS”); prinff(“nEnter a string:”); gets(item); prinff(“n
7、The string is:sn”,item); fun(item); printf(“nThe string of changing is:sn”,item);(分数:2.00)_国家二级 C 语言程序设计机试(程序修改题)模拟试卷 3 答案解析(总分:8.00,做题时间:90 分钟)一、程序修改题(总题数:4,分数:8.00)1.下列给定程序中,函数 fun 的功能是:读入一个字符串(长度20),将该字符串中的所有字符按 ASCII码值升序排序后输出。例如,若输入“edcba”,则应输出“abode”。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或
8、删行,也不得更改程序的结构! 试题程序:#includestringh#includestdiohvoid fun(ehar t) char c; int i,j;*found* for(i=strlen(t);i;i 一一) for(j=0;ji;j+)*found* if(tjtj+1) t c=tj; tj=tj+1; tj+1=c; main()char s81;prinff(“nPlease enter a character string:”);gets(s);printf(“nnBefore sorting:ns”,s);fun(s);printf(“nAiler sorting
9、 deeendingly:ns”,s);(分数:2.00)_正确答案:(正确答案:(1)for(i=stden(t)一 1;i;i 一一)或 for(i=strlen(t)一 1;i0;i 一一) (2)if(tjtj+1)解析:解析:(1)本题是利用选择法对数组元素进行比较排序。所谓选择法,是依次用当前取得的元素和其后面的元素进行比较,在第一个元素和其后面的元素顺次比较时,可以借助中间变量来对两个数进行交换,要保证第一个元素始终存放数组中的最大数,以后依次挑选出次大数,这样最终的数组就是有序的。strlen 函数所求得的字符串长度包括字符串结束符,所以要减 1。 (2)这里是一个分析逻辑错误
10、,题中要求按升序排序,所以应改为 if(tjtj+1)。2.下列给定程序中,函数 fun 的功能是:删除指针 P 所指字符串中的所有空白字符(包括制表符、回车符及换行符)。输入字符串时用#结束输入。请改正程序中的错误,使它能输出正确的结果。注意:不得增行或删行,也不得更改程序的结构!试题程序:#includestringh#includestdioh#includeetypehfun(char*P)int i,t;char c80;*found*For(i=0,t=0;Pi;i+) if(!isspace(*(P+i) ct+=Pi;*found* ct=“0”; strepy(p,c);ma
11、in() char c,s80; int i=0; prinff(“Input a string:”); c=getchar(); while(c!=#) si=c;i+;c=getehar(); 8i=0; fun(s); puts(s);(分数:2.00)_正确答案:(正确答案:(1)for(i=0,t=0;pi;i+) (2)ct=0;)解析:解析:本题考查:C 语言关键字;字符串结束标识0。 该题目考查 C 语言关键字的书写,C 语言中关键字是区分大小写的。另外为字符串结尾添加结束符时应书写为0,而非”0”,0表示一个字符串。该程序的 if 条件中应用了 isspace 函数,该函数的
12、功能是检查 ch 是否空格、跳格符(制表符)或换行符。3.下列给定程序中,函数 fun 的功能是:将 m(1m10)个字符串连接起来,组成一个新串,放入 pt 所指存储区中。例如:把三个串“abe”“CD”“EF”连接起来,结果是”abc-CDEF”。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序:#includestdioh#includestringhvoid fun(char str10,int m,char*pt)*found* Int k,q,i; for(k=0;km;k+) q=strlen(strk
13、); for(i=0;iq;i+)*found* pti=strk,i; pt+=q; pt0=0; main() int m,h; char s1010,P120; parintf(“nPlease enter m:”); seanf(“d”,&m); gets(sro); printf(“nPlease entl“d string:n”,m); for(h=0;hm;h+) gets(sh);fun(s,m,P); prinff(“nThe result is:sn”,P);(分数:2.00)_正确答案:(正确答案:(1)int k,q,i; (2)pti=strki;)解析:解析:本题考
14、查:C 语言的书写和语法性错误,这类错误比较简单,只要编译程序,根据错误提示修改即可。 (1)关键字书写错误,定义整型变量的关键字应使用 int,而非 Int。 (2)数组元素表示错误,表示二维数组元素,应使用方括号将行坐标和列坐标分别括起来,即 strk,i应改为 strki。4.下列给定程序中,函数 fun 的功能是:依次取出字符串中所有的数字字符,形成新的字符串,并取代原字符串。 请改正函数 fun 中的错误,使它能得出正确的结果。 注意:不得增行或删行,也不得更改程序的结构! 试题程序:#includestdlibh#includestdioh#includeeoniohvoid fu
15、n(char*s) int i,j; for(i=0,j=0;si1=0;i+) if(si=0&si=9)*found* sj=si;*found* sj=“0”;void main() char item80; system(“CLS”); prinff(“nEnter a string:”); gets(item); prinff(“nThe string is:sn”,item); fun(item); printf(“nThe string of changing is:sn”,item);(分数:2.00)_正确答案:(正确答案:(1)sj+=si; (2)sj=0;)解析:解析:题目要求依次取出字符串中所有的数字字符,因此将元素 si存入 sj后要使 j 加 1,为下次存储做准备。sj=“0”;是一个语法错误。