1、全国计算机等级考试二级 C 语言操作题 18+2016 年及答案解析(总分:30.00,做题时间:90 分钟)1.给定程序中,函数 fun 的功能是:将形参 s 所指字符串中的所有字母字符顺序前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。 例如,s 所指字符串为:asd123fgh543df,处理后新字符串为:asdfghdf123543。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1.C 中。不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #include ch
2、ar *fun(char *s) int i, j, k, n; char *p, *t; n=strlen(s)+1; t=(char*)malloc(n*sizeof(char); p=(char*)malloc(n*sizeof(char); j=0; k=0; for(i=0; i if(si=a) j+; else pk=si; k+; /*found*/ for(i=0; i_正确答案:()解析:解题思路: 第一处:函数中申请了两个内存空间,其 p 是存放字母字符串,t 是存放非字母字符串,根据条件可知,p 依次存放字母字符串,其位置由 j 来控制,所以应填:si。 第二处:利用
3、for循环再把 t 中的内容依次追加到 p 中,其中 t 的长度为 k,所以应填:k。 第三处:字符串处理好后必须添加字符串结束符,所以应填:/0。2.给定程序 MODI1.C 中函数 fun 的功能是:将 s 所指字符串中最后一次出现的与 t1 所指字符串相同的子串替换成 t2 所指字符串,所形成的新串放在 w 所指的数组中。在此处,要求 t1 和 t2 所指字符串的长度相同。 例如,当 s 所指字符串中的内容为:“abcdabfabc“,t1 所指子串中的内容为: “ab“,t2 所指子串中的内容为:“99“时, 结果,在 w 所指的数组中的内容应为: “abcdabf99c“。 请改正程
4、序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include int fun (char *s, char *t1, char *t2 , char *w) int i; char *p , *r, *a; strcpy( w, s ); /*found*/ while ( w ) p = w; r = t1; while ( *r ) /*found*/ IF ( *r = *p ) r+; p+; else break; if ( *r = /0 ) a = w; w+; r = t2; whi
5、le ( *r ) *a = *r; a+; r+; main() char s100, t1100, t2100, w100; printf(“/nPlease enter string S:“); scanf(“%s“, s); printf(“/nPlease enter substring t1:“); scanf(“%s“, t1); printf(“/nPlease enter substring t2:“); scanf(“%s“, t2); if ( strlen(t1)=strlen(t2) ) fun( s, t1, t2, w); printf(“/nThe result
6、 is : %s/n“, w); else printf(“/nError : strlen(t1) != strlen(t2)/n“); (分数:10.00)_正确答案:()解析:解题思路: 第一处:判断 w 指针所指的值是否是结束符,应改为:while(*w)。 第二处:if 错写成 If。3.函数 fun 的功能是:将 s 所指字符串中 ASCII 值为奇数的字符删除,串中剩余字符形成一个新串放在 t所指的数组中。 例如,若 s 所指字符串中的内容为:“ABCDEFG12345“,其中字符 A 的 ASCII 码值为奇数、字符 1 的 ASCII 码值也为奇数、 都应当删除,其它依此类推
7、。最后 t 所指的数组中的内容应是:“BDF24“。 注意: 部分源程序存在文件 PROG1.C 中。 请勿改动主函数 main 和其它函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 给定源程序: #include #include void fun(char *s, char t) main() char s100, t100; printf(“/nPlease enter string S:“); scanf(“%s“, s); fun(s, t); printf(“/nThe result is: %s/n“, t); NONO(); (分数:10.00)_正确答案:(void fun(char *s, char t) int i, j = 0 ; for(i = 0 ; i strlen(s); i+) if(si % 2=0) tj+ = si ; tj = 0 ; )解析:解题思路: 本题是从一个字符串按要求生成另一个新的字符串。我们使用 for 循环语句来解决这个问题。