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