1、全国计算机二级 C语言上机试题 18+2015年及答案解析(总分:30.00,做题时间:90 分钟)1.给定程序中,函数 fun的功能是:将形参 s所指字符串中的所有字母字符顺序前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。 例如,s 所指字符串为:asd123fgh543df,处理后新字符串为:asdfghdf123543。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1.C中。不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #include char *fun(c
2、har *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。 第二处:利用 for循环再把 t中的内容依次追加到 p中
3、,其中 t的长度为 k,所以应填:k。 第三处:字符串处理好后必须添加字符串结束符,所以应填:/0。)解析:2.给定程序 MODI1.C中函数 fun 的功能是:将 s所指字符串中最后一次出现的与 t1所指字符串相同的子串替换成 t2所指字符串,所形成的新串放在 w所指的数组中。在此处,要求 t1和 t2所指字符串的长度相同。 例如,当 s所指字符串中的内容为:“abcdabfabc“,t1 所指子串中的内容为: “ab“,t2 所指子串中的内容为:“99“时, 结果,在 w所指的数组中的内容应为: “abcdabf99c“。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 mai
4、n函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #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; while ( *r ) *a = *r; a+; r+; mai
5、n() 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 is : %s/n“, w); else printf(“
6、/nError : strlen(t1) != strlen(t2)/n“); (分数:10.00)_正确答案:(第一处:判断 w指针所指的值是否是结束符,应改为:while(*w)。 第二处:if 错写成 If。)解析:3.函数 fun的功能是:将 s所指字符串中 ASCII值为奇数的字符删除,串中剩余字符形成一个新串放在 t所指的数组中。 例如,若 s所指字符串中的内容为:“ABCDEFG12345“,其中字符 A的 ASCII码值为奇数、字符 1的 ASCII码值也为奇数、 都应当删除,其它依此类推。最后 t所指的数组中的内容应是:“BDF24“。 注意: 部分源程序存在文件 PROG1
7、.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 ; )解析: