1、国家二级 C语言机试(操作题)模拟试卷 539及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是: 将形参 s所指字符串中的所有数字字符顺序前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。 例如, s所指字符串为: asdl23fgh543df,处理后新字符串为: 123543asdfghdf。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include string h #include stdlib h #include ctype
2、 h char*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 n; i+) if(isdigit(si) *found* p【 1】 =si; j+; ) else tk=si; k+; ) *found* for(i=0; i 【 2】 ; i+) Pj+i=ti; Pj+k=0; *found* return 【 3】 ; main() char s8
3、0; printf(“Please input: “); scanf(“ s“, s); printf(“ nThe result is: s n“, fun(s); 二、程序修改题 2 给定程序中函数 fun的功能是:首先把 b所指字符串中的字符按逆序存放,然后将 a所指字符串中的字符和 b所指字符串中的字符,按排列的顺序交叉合并到 c所指数组中,过长的剩余字符接在 c所指的数组的尾部。例如,当 a所指字符串中的内容为 “abedefg“, b所指字符串中的内容为 “1234“时, c所指数组中的内容应为“a4b3c2dlefg“;而当 a所指字符串中的内容为 “1234“, b所指字符串的
4、内容为“abedefg“时, c所指数组中的内容应该为 “1g213e4deba“。 请改正程序中的错误,使它能得出正确的结果。 注意:部分源程序在文件 MODI1 C中,不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h #include string h void fun(char* a, char*b, char*c) int i, j; char ch; i=0; j=strlen(b)一 1; *found* while(i j) ch=bi; bi=bj; bj=ch; i+; j一一; while(*a |*b) *fo
5、und* Tf(* a) *c = * a; c+, a+, if(*b) *c= *b; c+; b+; *c=0; ) main() char s1100, s21 00, t2 00; print: f(“ nEnter s1 string: “); scanf(“ s“, s1); printf(“ nEnter s2 string: “); scanf(“ s“, s2); fun(s1, s2, t); printf(“ nThe result is: s n“, t); 三、程序设计题 3 函数 fun的功能是:将 s所指字符串中下标为偶数同时 ASCII值为奇数的字符删除, s
6、所指串中剩余的字符形成的新串放在 t所指的数组中。 例如,若 s所指字符串中的内容为 “ABCDEFG12345”,其中字符 C的 ASC 码值为奇数,在数组中的下标为偶数,因此必须删除;而字符 1的 ASC 码值为奇数,在数组中的下标为奇数,因此不应当删除,其他依此类推。最后 t所指的数组中的内容应是 “BDFl2345“。 注意:部分源程序在文件 PROG1 C中。 请勿改动 main函数和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include stdio h #include string h void fun(char*s, char t)
7、 main() char s100, t100; void NONO(); printf(“knPlease enter string s: “); scanf(“ s“, s); fun(s, t); printf(“knThe result is: s、 n“, t); NONO(); void NONO() *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 * char si00, t100; FILE, *rf, *wf; int i; rf=fopen(“in dat“, “r“); wf=fopen(“out dat“, “W“); for(i=0; i 10 ; i
8、+) fscanf(rf, “ s“, s), fun(s, t); fprintf(wf, “ s n“, t); fclose(rf); fclose(wf); 国家二级 C语言机试(操作题)模拟试卷 539答案与解析 一、程序填空题 1 【正确答案】 (1)j (2)k (3)p或 (p) 【试题解析】 填空 1:函数中申请了两个内存空间,其中 p存放数字字符串, t存放非数字字符串,根据条件可知, p依次存放数字字符串,其位置由 j来控制,所以应填 j。 填空 2:利用 for循环再把 t中的内容依次追加到 p中,其中 t的长度为 k,所以应填 k。 填空 3:处理之后的字符串存放到
9、p中,最后返回 p的首地址即可,所以应填 p。 二、程序修改题 2 【正确答案】 (1)while(i j) (2)if( *a) 【试题解析】 (1)由 i和 j定义的初始值可知,此处应该判断 i是否小于 j,所以应改为 while(i j)。 (2)此处将 if错写成 If,这个错误比较简单,但往往不容易发现。 三、程序设计题 3 【正确答案】 void fun (char *s, char t ) int i, j = 0 : for (i = 0 ; i strlen (s) ; i+) 【试题解析】 本题是从一个字符串按要求生成另一个新的字符串。我们使用 for循环语句来解决这个问题。在赋值新的字符串之前,先对数组元素的下标和ASCII码的值进行判断,将满足要求的元素赋给新的字符串。