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