1、二级 C 语言-211 及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.给定程序中,函数 fun 的功能是:对形参 ss 所指字符串数组中的 M 个字符串按长度由短到长进行排序。ss 所指字符串数组中共有 M 个字符串,且串长小于 N。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意 :部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #include stdio.h #include string.h #define M 5 #define N 20 void fun(char(*s
2、s)N) int i,j,k,nM;char tN; for(i=0;iM;i+) ni=strlen(ssi); for(i=0;iM-1;i+) k=i; /*found*/ for(j= 1;jM;j+) /*found*/ if(nknj) 2; if(k!=i) strcpy(t,ssi); strcpy (ssi,ssk); /*found*/ strcpy(ssk, 3); nk=ni; main() char ssMN=“shanghaf“,“guangzhou“,“beijing“,“tianjin“,“chongqing“; int i; printf(“/nThe ori
3、ginal strings are:/n“); for (i=0;iM;i+) printf(“%s“,ssi); printf(“/n“); fun(ss); printf(“/nThe result:/n“); for(i=0;iM;i+) printf(“%s“,ssi); (分数:30.00)二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun 的功能是:判断 ch 中的字符是否与 str 所指串中的某个字符相同,若相同,什么也不做;若不同,则将其插在串的最后。 请改正程序中的错误,使它能得出正确的结果。 注意 :不要改动 main 函数,不得增行或删行,也不
4、得更改程序的结构! 试题程序: #include stdio.h #include string.h /*found*/ void fun(char str,char ch) while(*str /*found*/ if(*str=ch) str0=ch; /*found*/ str1=“0“; main() char s81,c; printf(“/nPlease enter a string:/,n“);gets(s); printf(“/n Please enter the character to search:“); c=getchar(); fun(s,c); printf(“/
5、nThe result is %s/n“,s); (分数:30.00)三、程序设计题(总题数:1,分数:40.00)3.请编一个函数 fun(char*s),该函数的功能是:把字符串中的内容逆置。 例如,字符串中原有的字符串为“abcdefg”,则调用该函数后,串中的内容为“gfedcba”。 注意 :部分源程序给出如下。 请勿改动 main 函数和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。 试题程序: #includestring.h #includeconio.h #includestdio.h #define N 81 void fun(char *s) m
6、ain() char aN; printf(“Enter a string:“); gets (a); printf(“The original string is:“); puts(a); fun(a); printf(“/n“); printf(“The string after modified:“); puts(a); strcpy(a,“Hello world!“); fun(a); (分数:40.00)_二级 C 语言-211 答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.给定程序中,函数 fun 的功能是:对形参 ss 所指
7、字符串数组中的 M 个字符串按长度由短到长进行排序。ss 所指字符串数组中共有 M 个字符串,且串长小于 N。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意 :部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #include stdio.h #include string.h #define M 5 #define N 20 void fun(char(*ss)N) int i,j,k,nM;char tN; for(i=0;iM;i+) ni=strlen(ssi); for(i=0;iM-1;i+) k=i; /*found*/ f
8、or(j= 1;jM;j+) /*found*/ if(nknj) 2; if(k!=i) strcpy(t,ssi); strcpy (ssi,ssk); /*found*/ strcpy(ssk, 3); nk=ni; main() char ssMN=“shanghaf“,“guangzhou“,“beijing“,“tianjin“,“chongqing“; int i; printf(“/nThe original strings are:/n“); for (i=0;iM;i+) printf(“%s“,ssi); printf(“/n“); fun(ss); printf(“/n
9、The result:/n“); for(i=0;iM;i+) printf(“%s“,ssi); (分数:30.00)解析:i+1 k=j t 解析 填空 1:根据 for 循环要确定循环的初值,再根据选择排序可知此空应填写i+1。 填空 2:如果 k 比 j 大,则应该把 kj。 填空 3:通过字符串复制函数 strcpy,使得 ssi和 ssk交换位置。二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun 的功能是:判断 ch 中的字符是否与 str 所指串中的某个字符相同,若相同,什么也不做;若不同,则将其插在串的最后。 请改正程序中的错误,使它能得出正确的结
10、果。 注意 :不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序: #include stdio.h #include string.h /*found*/ void fun(char str,char ch) while(*str /*found*/ if(*str=ch) str0=ch; /*found*/ str1=“0“; main() char s81,c; printf(“/nPlease enter a string:/,n“);gets(s); printf(“/n Please enter the character to search:“); c=
11、getchar(); fun(s,c); printf(“/nThe result is %s/n“,s); (分数:30.00)解析:void fun(char *str, char ch) if (*str != ch) str1 =0; 解析 (1)第 1 个形参应该是字符串类型,所以应改为 void fun(char*str, char ch)。 (2)应该是判断不相等,所以应改为 if(*str!ch)。 (3)赋值字符串结束符错误,所以应改为 str10;。三、程序设计题(总题数:1,分数:40.00)3.请编一个函数 fun(char*s),该函数的功能是:把字符串中的内容逆置。
12、 例如,字符串中原有的字符串为“abcdefg”,则调用该函数后,串中的内容为“gfedcba”。 注意 :部分源程序给出如下。 请勿改动 main 函数和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。 试题程序: #includestring.h #includeconio.h #includestdio.h #define N 81 void fun(char *s) main() char aN; printf(“Enter a string:“); gets (a); printf(“The original string is:“); puts(a); fu
13、n(a); printf(“/n“); printf(“The string after modified:“); puts(a); strcpy(a,“Hello world!“); fun(a); (分数:40.00)_正确答案:()解析:void fun(char*s) char ch; int i,m,n; i=0; m=n=strlen(s)-1; /*将第 i 个和倒数第 i 个数互换,但循环的次数为数组长度的一半*/ while(i(n+1)/2) /*使用中间变量叫唤*/ ch=si; si=sm; sm=ch; i+; m-; 解析 将字符串中的内容逆置,实际上就是将第一个字符和最后一个字符交换,再将第二个字符与倒数第二个字符交换,依此类推,直到中间的字符为止。因此,长度为 n 的字符串需要交换的次数为 n/2。 本程序使用 while 语句表示每一个字符,然后将前后对应的字符进行交换。