文件操作 一.选择题 1.若与文件型指针中相关联的文件的当前读位置已到了文件的末尾,则函数feof(fp)的返回值是( ) ①0 ②-l ③非零值 ④NULL
2.下列语句中,将c定义为文件型指针的是( ) ① FILE c; ② FILE *c; ③ file c; ④ file *c;
3.标准库函数fputs(pl,p2)的功能是( ) ①从pl指向的文件中读一个字符串存入p2指向的内存 ②从p2指向的文件中读一个字符串存入pl指向的内存 ③从pl指向的内存中的一个字符串输出到p2指向的文件 ④从p2指向的内存中的一个字符串输出到pl指向的文件
二.填充题 1.设有定义“# define F(N) 2*N”,则表达式 F(2+3)的值是_____.
2.设有下列程序: #include<stdio.h> main(int argc,int *argv[]) { while(--argc> 0) printf(“%s”,argv[argc]); printf(“\n”); } 假定上述程序编译连接成目标程序名为p.exe,如果输入如下的命令: P 123 AAA BBB ↓(其中的↓表示回车) 则输出结果是_____.
三.程序分析题 1.阅读下面程序,写出程序运行结果。 # define PR(ar) printf(“%d,”, ar) main() { int j,a[] ={1,3,5,7, 9,11,15}; int * p= a+5; for(j=3; j; j--) switch(j) { case 1: case 2: PR( * p++); break; case 3: PR(*(--p)); } printf(“\n”); }
2.设下面的程序经编译连接后生成的目标程序名为: ABC.EXE,写出输入以下命令行后的输出: ABC FILE1 FILE2 ↓(其中的↓表示回车) # include<stdio.h> main( int argc, char *argv[]) { int i; printf(“%d \n”,argc); for(i=0;i<argc;i++) printf(“%s”,argv[i]); printf(“\n”); }
3.读程序,写功能。 # include<stdio.h> # include<string.h> main(int argc, char *argv[]) { FILE *fl,*f2; char ch; if(argc< 3) { printf(“Parameters missing! \n”); exit(0); } if(((f1 =fopen(argv[1],“r”))== NULL)||((f2=fopen(argv[2],“w”))== NULL)) { printf(“Can not open file! \n”); exit(0); } while(!feof(f1)) fputc(fgetc(f1),f2); fclose(f1); fclose(f2); }
四.程序设计题 1.设计一个复制文本文件的程序,源文件名和目标文件名随程序启动执行命令输入。 「解」直接写出程序如下:
2.设计一个程序,将随启动程序执行时输入的两个整数的和、差、积、整除商、模运算的结果输出。
3.设计一个比较字符串的程序,两个字符串随启动程序执行的命令输入,输出其中大的字符串。
4.下面的程序用来统计文件中字符的个数,请填空。 # include<stdio.h> # include<stdlib.h> main() { FILE *fp; long num=0; if((fp =fopen(“fname.day”,“r”))== NULL) { printf(“Cann‘t open file! \n”); exit(0); } while________ { fgetc(fp); num++; } printf(“num =%d \n”, num); fclose(fp); }
答案解析 1.③「解」当调用fopen函数时,系统将为实参文件设定一个存放文件读写控制信息的控制块。该控制块记录有关文件持征、使用方式,当前读写位置等文件状态,并将该控制块的指针返回,作为文件指针变量的值。以后程序通过该指针调用函数时,系统能访问到这个控制块,利用该文件控制块中的控制信息,正确完成文件的读或写。所以文件指针并不真正指向文件当前读写位置,但通过文件指针,系统能在文件控制块中访问文件的当前读写位置。若某文件与文件指针中相关联着,该文件的当前读写位置在文件的末尾时,函数调用feof(fp)的返回值是一个非零值。所以正确解答是③。
2.②「解」如上题所述,文件控制块的类型已由系统命名为FILE. 所以定义文件指针变量是c,就得用代码:“FILE *c;”。所以正确解答是②。
3.③「解」标准函数调用fputs(p1,p2)完成的功能是将由字符指针pl所指的字符串内容输出到与文件指针p2相关联的文件中,即将从pl所指的内存中的字符串内容输出到p2所指向的文件中。所以正确解答是③。
二.填空题 1.「解」F(N)被定义成2*N,表达式F(2+3)被替换成2*2+3,其值是7.
2.「解」程序启动时,参数argc的值是4,由于循环条件是一即组>0,是先减1后判大于0,循环共进行三次,顺序输出argv[3],argv[2]和argv[1],即输出BBBAAAl23.
三.程序分析题 1.「解」程序的宏定义PR以d格式输出参数的值和远号字符。程序给数组a 赋初值,并由指针p指向元素a[5].程序让j从3减至1,共循环三次。当j是3时,让p减1,并输出p所指元素的值9;当 j是2和1时,输出p所指的数组元素的值,并让p增1,顺序输出9和11.所以 程序输出: 9,9,11
2.「解」程序首先输出参数argv的值3,然后循环三次,顺序输出ABC、FILE1和FILE2,并回车 3 ABC FILE1 FILE2
3.「解」程序在argc小于3时,报告出错信息结束。当argc大于2时,以程序启动时的第一和第二参数为文件名打开文件,共用循环将第一参数的文件内容复制到第二参数的文件。
四.程序设计题 1.设计一个复制文本文件的程序,源文件名和目标文件名随程序启动执行命令输入。 「解」直接写出程序如下: # include<stdio.h> int main( int argc, char *argv[]) { FILE *rfp,*wfp; if( argc < 3) { printf(“Parameters missing ! \n”); return 0 ; } if(((rfp= fopen(argv[1],“r”))==NULL) ||((wfp=fopen(argv[2],“w”))== NLILL)) { printf(“不能打开文件\n”); return 0; } while( ! feof(rfp)) fputc( fgetc(rfp), wfp); fclose(wfp); fclose(rfp); printf(“程序结束\n”); return l; }
2.设计一个程序,将随启动程序执行时输入的两个整数的和、差、积、整除商、模运算的结果输出。 解」直接写出程序如下: # include<stdio.h> #include<stdlib.h> main( int argc,char *argv[]) { int tl,t2; if( argc < 3) { rintf(“Parmenters missing!\n”); return 0; } t1=atoi( argv[l] ); t2=atoi( argv[2] ); printf(“%d+%d=%d\n”, t1, t2,t1+t2); printf(“%d-%d=%d\n”, t1,t1,t1-t2); printf(“%d*%d=%d \n”,t1,t2,t1*t2); printf(“%d/%d=%d\n”,t1,t2, t1/t2); printf(“%d% %d=%d\n”,t1,t2, t1%t2); }
3.设计一个比较字符串的程序,两个字符串随启动程序执行的命令输入,输出其中大的字符串。 「解」直接写出程序如下: # include<stdio.h> main(int argc,char *argv[]) { char *s1,*s2; if( argc < 3) { printf(“Parameters missing! \n”); return 0; } for(s1=argv[1],s2=argv[2];*s1 && *s1==*s2;s1++,s2++ ); printf(“%s\n”,*s1< *s2? argv[2]:argv[1]); }
4.下面的程序用来统计文件中字符的个数,请填空。 # include<stdio.h> # include<stdlib.h> main() { FILE *fp; long num=0; if((fp =fopen(“fname.day”,“r”))== NULL) { printf(“Cann‘t open file! \n”); exit(0); } while________ { fgetc(fp); num++; } printf(“num =%d \n”, num); fclose(fp); } 「解」若要统计文件中的字符个数,程序设计一个计数器,并预置该计数器为0值,并打开文件。在正确打开情况下,接着是一个循环。循环在文件未结束的情况下,反复读人字符,并增加字符计数器。所以循环条件可写成:(!feof(fp))。程序有一个错误,由于num变量的类型是long型的,输出它的值应在格式符d之前加上格式修饰符‘l’,不加这个修饰符只有在long型与int型实现相同的系统才是正确的。另外,要统计文件的长度,最好用二进制方式打开,通过读入的字节数求出文件的长。这是因为正文文件方式打开时,文件中的双字符(回车字符和换行字符)读入后将被当作一个字符存储,二进制方式不进行这样的转换。
|
|
来自: running_to_you > 《文件操作》