1、国家二级 C语言机试(操作题)模拟试卷 101及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:将 s所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的先后次序。例如,形参 s所指的字符串为: def35adh3kjsdf7。执行结果为: defadhkjsdf3537。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! #include void fun(char*s) int i, j=0, k: 0; char t1
2、8 0, t280; for(i=0; si!=0; i+) i f(si=0 &si #include #defime MAXLINE 20 fun(char*pstr6) int i, j; char。 P ; for(i=0 ; i0) p=*(pstr+i); /*found*/ *(pstr+i)=pstr+j; *(pstr+j)=p; main() int i; char*pstr6, str6NAXLINE; for(i=0; i #include #define M 8 1 int Eun(char*ss, char c) main() char aM, ch; void N
3、ONO(); printf(“nPlease enter a string: “); gets(a); printf(“nPlease enter a char: “)j ch=getchar(); printf(“nThe number of the char is: dn“, fun(a, ch); NONO(); void NONO() /*本函数用于打 开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。 */ int i; FILE *rf, *wf ; char aM, bM, ch; rf=fopen(“in dat“, “r“); wf=fopen(“out dat“,
4、 “w“); for(i=0; i1 0; i+) fscanf(rf, “ s“, a); fscanf(rf, “ s“, b); ch=*b; fprintf(wf, “ c= dn“, ch, fun(a, ch); fclose(rf); fclose(wf); 国家二级 C语言机试(操作题)模拟试卷 101答案与解析 一、程序填空题 1 【正确答案】 (1)j+ (2)si=t1i (3)j 【试题解析】 函数 fun的功能是将 s所指字符串中的所有数字字符移到所有非数字字符之后。 第一空:如果 si是数字字符,则将 si保存在 t2数组中,同时变量 i自增,准备下次保存数字字符,
5、故第一空处应为 “j+”。 第二空:语句 “for(i=0; ik; i+)”i从 0开始,说明将非数字字符存储到 s字符串的前面,非数字字符保存在 t1数组中,因此第二空处应为 “si=t1i”。 第三空:循环 “for(、 i=0; i _3_; i+)”是将数字字符保存在 s字符串的后面,数字字符的个数为 j,因此这里是将 j个数字字符保存在 s字符串的后面,故第三空处应为 “j”。 二、程序修改题 2 【正确答案】 (1)for(j=i十 l ; j6 ; j+) (2)*(pstr+i)=*(pstr+j); 【试题解析】 函数的功能是用冒泡法对 6个字符串按 由小到大的顺序进行排序
6、。 (1)C语言中, for语句形式是: for(表达式 1;表达式 2:表达式 3)循环体语句。因此第一个标识下, for使用错误,应该为 “for(j=i+1; i6; j+)”。 (2)if语句后的复合语句的功能是把 “*(pstr+1)”中和 “*(pstr+j)”中的内容进行交换,而 “*(pstr+i、 )=pstr+j; ”中 “pstr+j; ”是字符串地址,并不是字符串的元素内容,所以第二个标识下 “*(pstr+i)=pstr+j; ”改为 “*(pstr+i)=*(pstr+j); ”。 三、程序 设计题 3 【正确答案】 int cnt=0; char*p=ss; while(*p) if(*p=c)cnt+; p+; return cnt; 【试题解析】 该程序功能是统计字符串中指定字符的个数。解题思路是在循环过程中,对字符进行判断,如果符合题干要求,对其个数进行统计。