1、国家二级 C语言机试(操作题)模拟试卷 493及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序的功能是:调用函数 fun将指定源文件中的内容复制到指定的目标文件中,复制成功时函数返回值为 1,失败时返回值为 0。在复制的过程中,把复制的内容输出到终端屏幕。主函数中源文件名放在变量 sfname中,目标文件名放在变量 tfname中。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1C 中。 不得增行或删行,也不得更改程序的结构! #include #include i
2、nt fun(char *source, char *target) FILE *fs,*ft; char ch; /*found* */ if (fs=fopen(source,【1】) =NULL) return 0; if (ft=fopen(target,“w“)=NULL ) return 0; printf (“/nThe data in file :/n“); ch=fgetc(fs); /*found*/ while (! feof (【2】) ) putchar(ch); /* found* */ fputc (ch,【3】) ; ch=fgetc(fs); fclose(f
3、s); fclose(ft); printf(“/n/n“); return 1; main () char sfname20 =“myfilel“, tfname20=“myfile2“; FILE *myf; int i; char c; myf=fopen(sfname,“w“); printf(“/nThe original data :/n“); for(i=l; i_二、程序修改题(总题数:1,分数:2.00)2.给定程序 MODI1.C中函数 fun的功能是:将长整型数 s中每一位上为偶数的数依次取出,构成一个新数放在 t中。高位仍在高位,低位仍在低位。 例如,当 s中的数为:8
4、7653142 时,t 中的数为:8642。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构! #include void fun (long s, long *t) int d; long sl=l; *t = 0; while (s 0) d = s%10; /* found*/ if (d%2=0) *t=d* sl+ *t; s1 *= 10; /* found* */ s /= 10; main () long s, t; printf(“/nPlease enter s:“); scanf (“%ld“, fun (s
5、, printf(“The result is:%ld/n“,t); (分数:2.00)_三、程序设计题(总题数:1,分数:2.00)3.函数 fun的功能是:将 s所指字符串中除了下标为偶数、同时 ASCII值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在 t所指的数组中。 例如,若 s所指字符串中的内容为:“ABCDEFG123456“,其中字符 A的 ASCII码值为奇数,因此应当删除;其中字符 B的 ASCII码值为偶数,但在数组中的下标为奇数,因此也应当删除;而字符 2的 ASCII码值为偶数,所在数组中的下标也为偶数,因此不应当删除,其他依此类推。最后 t所指的
6、数组中的内容应是:”246”。 注意:部分源程序存在文件 PROG1C 中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。#include stdio.h#include string.hvoid fun(char *s, char t)main()char s100, t100;void NONO ();printf(“/nPlease enter string S:“); scanf(“%s“, s);fun(s, t); printf(“/nThe result is:%s/n“,t);NONO();void NONO ()* 函数用于
7、打开文件,输入数据,调用函数,输出数据,关闭文件。 *char s100, t100 ;FILE *rf, *wf ;int i ;rf = fopen(“in.dat“,“r“);wf = fopen(“out.dat“,“w“) ;for(i = 0 ; i 10 ; i+) fscanf(rf, “%s“, s);fun(s, t);fprintf(wf, “%s/n“, t);fclose(rf);fclose(wf) ; (分数:2.00)_国家二级 C语言机试(操作题)模拟试卷 493答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给
8、定程序的功能是:调用函数 fun将指定源文件中的内容复制到指定的目标文件中,复制成功时函数返回值为 1,失败时返回值为 0。在复制的过程中,把复制的内容输出到终端屏幕。主函数中源文件名放在变量 sfname中,目标文件名放在变量 tfname中。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1C 中。 不得增行或删行,也不得更改程序的结构! #include #include int fun(char *source, char *target) FILE *fs,*ft; char ch; /*found* */ if
9、(fs=fopen(source,【1】) =NULL) return 0; if (ft=fopen(target,“w“)=NULL ) return 0; printf (“/nThe data in file :/n“); ch=fgetc(fs); /*found*/ while (! feof (【2】) ) putchar(ch); /* found* */ fputc (ch,【3】) ; ch=fgetc(fs); fclose(fs); fclose(ft); printf(“/n/n“); return 1; main () char sfname20 =“myfilel
10、“, tfname20=“myfile2“; FILE *myf; int i; char c; myf=fopen(sfname,“w“); printf(“/nThe original data :/n“); for(i=l; i_正确答案:(正确答案:(1)“r“ (2)fs (3)ft)解析:解析:第一空:将指定源文件中的内容复制到指定的目标文件中,源文件只需读,因此,以只读方式打开即可,故第一空处应该是“if(fs=fopen(source,“r“)=NULL)”。 第二空:“while(!feof(【2】)”循环的目的是不断读取源文件直至到达源文件的末尾,循环结束标志是己达到文件的
11、末尾。用 feof()函数来检查是否已经到了文件末尾,文件状态检测函数 feof()的调用形式是:feof(fs),如果已经到达文件尾函数返回非零值,否则返回 0,故第二空处应该是“while(!feof(fs)”。第三空:考察 fputc函数的使用方法,fputc 函数的调用形式是:fputc(ch,ft),ch 是要输出的字符,由“ch=fgetc(fs)”从源文件读到字符 ch,然后将 ch写到目标文件中,故第三空处应该是“fputc(ch,ft);”。二、程序修改题(总题数:1,分数:2.00)2.给定程序 MODI1.C中函数 fun的功能是:将长整型数 s中每一位上为偶数的数依次取
12、出,构成一个新数放在 t中。高位仍在高位,低位仍在低位。 例如,当 s中的数为:87653142 时,t 中的数为:8642。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构! #include void fun (long s, long *t) int d; long sl=l; *t = 0; while (s 0) d = s%10; /* found*/ if (d%2=0) *t=d* sl+ *t; s1 *= 10; /* found* */ s /= 10; main () long s, t; printf(“
13、/nPlease enter s:“); scanf (“%ld“, fun (s, printf(“The result is:%ld/n“,t); (分数:2.00)_正确答案:(正确答案:(1)if(d2=0) (2)s=10;)解析:解析:(1)第一个标识是判断 d是否是偶数,即比较“d2”是否等于 0,在 C语言中,“=”表示的是“等于”,而“=”是赋值,因此,第一个标识下“if(d2=0)”应改为“if(d2=0)”。 (2)第二个标识下的“s=10;”是对 a的截取,这里的“”本意应该是除号,但这个在 C语言中是不可识别的,所以第二个标识下“s=10;”应该改为“s=10;”。三
14、、程序设计题(总题数:1,分数:2.00)3.函数 fun的功能是:将 s所指字符串中除了下标为偶数、同时 ASCII值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在 t所指的数组中。 例如,若 s所指字符串中的内容为:“ABCDEFG123456“,其中字符 A的 ASCII码值为奇数,因此应当删除;其中字符 B的 ASCII码值为偶数,但在数组中的下标为奇数,因此也应当删除;而字符 2的 ASCII码值为偶数,所在数组中的下标也为偶数,因此不应当删除,其他依此类推。最后 t所指的数组中的内容应是:”246”。 注意:部分源程序存在文件 PROG1C 中。 请勿改动主函数
15、 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。#include stdio.h#include string.hvoid fun(char *s, char t)main()char s100, t100;void NONO ();printf(“/nPlease enter string S:“); scanf(“%s“, s);fun(s, t); printf(“/nThe result is:%s/n“,t);NONO();void NONO ()* 函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 *char s100, t100 ;FI
16、LE *rf, *wf ;int i ;rf = fopen(“in.dat“,“r“);wf = fopen(“out.dat“,“w“) ;for(i = 0 ; i 10 ; i+) fscanf(rf, “%s“, s);fun(s, t);fprintf(wf, “%s/n“, t);fclose(rf);fclose(wf) ; (分数:2.00)_正确答案:(正确答案:int i, j=0; for(i=0; i解析:解析:(1)判断一个字符串中的某一字符下标 i是否为偶数,可用“i2=0”来判断;也可以从下标 0开始,每次增 2。判断字符中的 ASCII码值是否为偶数,则可用“si2=0”来判定。 (2)对串 s中下标为偶数的字符进行考查,满足 ASCII码值是偶数条件的字符就顺序放在新串 s中,否则就不存放。 (3)所有字符处理完后,记得在新串 s的末尾加上结束符“0”。