1、国家二级 C+机试(操作题)模拟试卷 161及答案与解析 一、基本操作题 1 给定程序中,函数 fun的功能是:将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。 请在程序的中括号处填入正确的内容并把中括号删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include void fun(char*s, int a, double f) *found* 【 1】 fp; char ch; fp=fopen(“filel txt“, “W“); fprintf(fp, “ s d
2、f n“, s, a, f); fclose(fp); fp=fopen(“file1 txt“, “r“); printf(“ nThe result: n n“); ch=fgetc(fp); *found* while(!feof(【 2】 ) *found* putchar(【 3】 ; ch=fgetc(fp); putchar( n); fclose(fp); main() char a10=“Hello“; 2nt b=12345; double c=98 76; fun(a, b, c); 二、简单应用题 2 下列给定程序中,函数 fun的功能是:将 S所指字符串中最后一次出现
3、的与 t1所指字符串相同的子串替换成 t2所指字符串,所形成的新串放在 w所指的数组中。要求 t1和 t2所指字符串的长度相同。 例如,当 s所指字符串中的内容为 “abcdab fabc”, t1所指串中的内容为 “ab”, t2所指子串中的内容为 “99”时,结果在 W所指的数组中的内容应为 “abcdabf99c”。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include #include #include void fun(char*s, char t1, char t2, char W) cha
4、r*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+; main() char s100, t1100, t2100, w100; printf(“ nPlease enter string s: “); Scanf(“ s“, s); printf(“ nPlease enter substring tl: ”); Scanf(“ s“, t1)
5、; 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(“ nError: strlen(t1)!=strlen(t2) n“); 三、综合应用题 3 请编写一个函 数,用来删除字符串中的所有空格。 例如,输入 asd af aa z67,则输出为 asdafaaz67。 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中
6、的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include #include #include #include void fun(char*str) main() char str81; char Msg=“Input a string: “; int n; FILE*out; printf(Msg); gets(str); puts(str); fun(str); printf(“*str: s n“, str); * out=fopen(“out dat“, “w“); fun(Msg); fprintf(out, “ s“, Msg); fclose(o
7、ut); * 国家二级 C+机试(操作题)模拟试卷 161答案与解析 一、基本操作题 1 【正确答案】 (1)FILE* (2)fp (3)ch 【试题解析】 填空 1:由语句 fopen(“filel txt“, “r“)可知, fp应该是文件类型指针,因此本空应该填写 FILE*。 填空 2: feof函数只能对文件类型数据进行操作,因此本空应填写 fp。 填空 3: putchar()代表输入一个字符,从 ch=fgetc(fp)可以看出本题应该填写ch。 二、简单应用题 2 【正确答案】 (1)while(*w) (2)if(*r=*p) 【试题解析】 (1)此处要判断的是值的真假,而
8、不是地址,所以改乡为while(*w)。 (2)C语言中关键字区分大小写,只需运行程序,就可以根据错误提示找到。 三、综合应用题 3 【正确答案】 void fun(char*str) int i=0; char*=str; while(*p) if(*p!=) *删除空格 * stri+=*p; p+; stri= 0; *加上结束符 * 【试题解析】 本题要求删除所有空格,即保留除了空格以外的其他所有字符。由于 C语言中没有直接删除字符的操作,所以对不需要删除的字符采用 “保留 ”的操作。用指针 p指向字符串中的每一个字符,每指向到一个字符都判断其是否为空格,若不是空格则保存到 stri。