1、国家二级 C语言机试(操作题)模拟试卷 693及答案与解析 一、程序填空题 1 给定程序的功能是:调用函数 fun将指定源文件中的内容复制到指定的目标文件中,复制成功时函数返回值为 1,失败时返回值为 0。在复制的过程中,把复制的内容输出到终端屏幕。主函数中源文件名放在变量 sfname中,目标文件名放在变量 tfname中。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 1 #include stdoo h 2 #include stdlib h 3 int fun(c
2、har *source, char*target) 4 FILE *fs, *ft; char ch; 5 *found* 6 if(fs=fopen(source, _1_)=NULL) 7 return 0; 8 if(ft=fopen(target, w)=NULL 9 return 0; 10 prontf( nThe data in file: n); 11 ch=fgetc(fs); 12 *found* 13 while(!feof(_2_) 14 (put: char(ch); 15 *found* 16 fputc(ch, _3_); 17 ch=fgetc(fs); 18
3、19 fclose(fs); fclose(ft); 20 printf( n n); 21 return 1; 22 23 main() 24 char Sfname20=myfile1, tfname20=myfile2; 25 FILE *myf; int i; char c; 26 myf=fopen(sfname, w); 27 printf( nThe original data: n); 28 for(i=1; i 30; i+) 29 c=A+rand() 25; 30 fprintf(myf, c, c); 31 printf( c, c);) 32 fclose(myf);
4、 printf( n n); 33 if(fun(Sfname, tfname) 34 printf(Succeed!); 35 else printf(”Fail!”); 36 二、程序修改题 2 给定程序 MODI1 C中函数 fun的功能是:将长整型数 s中每一位上为偶数的数依次取出,构成一个新数放在 t中。高位仍在高位,低位仍在低位。 例如,当 S中的数为: 87653142时, t中的数为: 8642。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 1 #include stdio h 2 void fun(lon
5、g s, long *t) 3 int d; 4 long s1=1; 5 *t=0; 6 while(s 0) 7 d=s 10; 8 *found* 9 if(d 2=0) 10 *t=d* s1+*t; 11 s1*=10; 12 13 *found* 14 s =1 0; 15 16 main() 17 long s, t; 18 printf( nPlease enter s: );scanf( id, s); 19 fun(s, 12 printf( nThe result is: s n, t); 13 NONO(); 14 void NONO() 15 *本函数用于打开文件,输
6、入数据,调用函数,输出数据,关闭文件。 * 16 char s100, t100; 17 FILE *rf *wf; 18 int i; 19 rf=fopen(in dat, r); 20 wf=fopen(out dat, w); 21 for(i=0; i 10; i+) 22 fscanf(rf, s, s); 23 fun(s, t); 24 fprintf(wf, s n, t); 25 26 fclose(rf); 27 fclose(wf); 国家二级 C语言机试(操作题)模拟试卷 693答案与解析 一、程序填空题 1 【正确答案】 (1)r (2)fs (3)ft 【试题解析
7、】 fun函数要求实现的功能是将指定源文件中的内容复制到指定的目标文件中,即以只读方式打开源文件,以只写方式打开目标文件,然后将源文件内的内 容复制到目标文件中。 第一空:将指定源文件中的内容复制到指定的目标文件中,源文件只需读,因此,以只读方式打开即可,故第一空处应该是“if(fs=fopen(source,“r“)=NULL)”。 第二空: “while(!feof(_2_)”循环的目的是不断读取源文件直至到达源文件的末尾,循环结束标志是已达到文件的末尾。用 feof()函数来检查是否已经到了文件末尾,文件状态检测函数 feof()的调用形式是: feof(fs),如果已经到达文件尾函数返
8、回非零值,否则返回 0,故第二空处应 该是 “while(!feof(fs)”。 第三空:考察 fputc函数的使用方法, fputc函数的调用形式是: fputc(ch, ft),ch是要输出的字符,由 “ch=fgetc(fs)”从源文件读到字符 ch,然后将 ch写到目标文件中,故第三空处应该是 “fputc(ch, ft); ”。 二、程序修改题 2 【正确答案】 (1)if(d 2=0) (2)s =10; 【试题解析】 本题中函数的功能是将长整型数 s中每一位上为偶数的数依次取出,构成一个新数放在 t中。首先在函数中对长整型数的每一位 来进行截取,然后对其进行判断,最后根据判断结果
9、进行操作。 (1)第一个标识是判断 d是否是偶数,即比较 “d 2”是否等于 0,在 C语言中,“=”表示的是 “等于 ”,而 “=”是赋值,因此,第一个标识下 “if(d 2=0)”应改为“if(d 2=0)”。 (2)第二个标识下的 “s =10; ”是对 a的截取,这里的 “ ”本意应该是除号,但这个在 C语言中是不可识别的,所以第二个标识下 “s =10; ”应该改为 “s=10; ”。 三、程序设计题 3 【正确答案】 1 int i, j=0; 2 for(i=0; i strlen(s); i+=2) 3 if(si 2=0)tj+=si; 4 tj= 0; 【试题解析】 该程序功能是将字符串中除了下标为偶数、 ASCII值也为偶数的字符外,其余的全都删除。解题过程利用 if条件判断表达式选择符合条件的字符,然后将符合条件的字符放入指定的字符串。 (1)判断一个字符串中的某一字符下标 i是否为偶数,可用 “i 2=0”来判断;也可以从下标 0开始,每次增 2。判断字符中的 ASCII码值是否为偶数,则可用“si 2=0”来 判定。 (2)对串 s中下标为偶数的字符进行考查,满足 ASCII码值是偶数条件的字符就顺序放在新串 s中,否则就不存放。 (3)所有字符处理完后,记得在新串 s的末尾加上结束符 “ 0”。