1、第十六部分:文件 一、选择题: (1)以下叙述中错误的是 A)C 语言中对二进制文件的访问速度比文本文件快 B)C 语言中,随机文件以二进制代码形式存储数据 C)语句 FILE fp; 定义了一个名为 fp 的文件指针 D)C 语言中的文本文件以 ASCII 码形式存储数据 (2)有以下程序 #include main() FILE *fp; int i, k, n; fp=fopen(“data.dat“, “w+“); for(i=1; i main() FILE *fp1; fp1=fopen(“f1.txt“,“w“); fprintf(fp1,“abc“); fclose(fp1);
2、 若文本文件 f1.txt 中原有内容为:good,则运行以上程序后文件 f1.txt 中的内容为 A) goodabc B) abcd C) abc D) abcgood (6) 有以下程序 #include main( ) FILE *fp; int i,k=0,n=0; fp=fopen(“d1.dat”,”w”); for(i=1;i main( ) FILE *fp; int i,a4=1,2,3,4,b; fp=fopen(“data.dat“,“wb“); for(i=0;i main() FILE *fout; char ch; fout=fopen(abc.txt,w); c
3、h=fgetc(stdin); while(ch!=#) fputc(ch,fout); ch=fgetc(stdin); fclose(fout); 出错的原因是 A) 函数 fopen 调用形式错误 B) 输入文件没有关闭 C) 函数 fgetc 调用形式错误 D) 文件指针 stdin 没有定义 (12) 有以下程序 #include main() FILE *fp; int i=20,j=30,k,n; fp=fopen(“d1.dat”“w”); fprintf(fp,“%dn”,i);fprintf(fp,“%dn”j); fclose(fp); fp=fopen(“d1.dat”
4、, “r”); fp=fscanf(fp,“%d%d”, printf(“%d%dn”,k,n); fclose(fp); 程序运行后的输出结果是 A) 20 30 B) 20 50 C) 30 50 D) 30 20 (13) 以下叙述中错误的是 A) 二进制文件打开后可以先读文件的末尾,而顺序文件不可以 B) 在程序结束时,应当用 fclose 函数关闭已打开的文件 C) 在利用 fread 函数从二进制文件中读数据时,可以用数组名给数组中所有元素读入数据 D) 不可以用 FILE 定义指向二进制文件的文件指针 (14) 若要打开 A 盘上 user 子目录下名为 abc.txt 的文本文
5、件进行读、写操作,下面符合此要求的函数调用是 A) fopen(“A:userabc.txt“,“r“) B) fopen(“A:userabc.txt“,“r+“) C) fopen(“A:userabc.txt“,“rb“) C) fopen(“A:userabc.txt“,“w“) (15) 下面的程序执行后,文件 testt.t 中的内容是 #include void fun(char *fname.,char *st) FILE *myf; int i; myf=fopen(fname,“w” ); for(i=0;i main() FILE *fr; char str40; fge
6、ts(str,5,fr); printf(“%sn“,str); fclose(fr); (2) 若 fp 已正确定义为一个文件指针,d1.dat 为二进制文件,请填空,以便为“读”而打开此文件:fp=fopen( 2 );。 (3) 以下程序用来统计文件中字符个数。请填空。 #include “stdio.h“ main() FILE *fp; long num=0L; if(fp=fopen(“fname.dat“,“r“)=NULL) pirntf(“Open errorn“); exit(0); while( 【3】 ) fgetc(fp); num+; printf(“num=%1d
7、n“,num-1); fclose(fp); (4) 以下程序段打开文件后,先利用 fseek 函数将文件位置指针定位在文件末尾,然后调用 ftell 函数返回当前文件位置指针的具体位置,从而确定文件长度,请填空。 FILE *myf; ling f1; myf= 【4】 (“test.t”,“rb”); fseek(myf,0,SEEK_END); f1=ftel(myf); fclose(myf); printf(“%dn”,f1); (5) 下面程序把从终端读入的文本(用作为文本结束标志)输出到一个名为 bi.dat 的新文件中。请填空。#include “stdio.h” FILE *
8、fp; char ch; if( (fp=fopen ( 【5】 ) )= = NULL)exit(0); while( (ch=getchar( ) != ) fputc (ch,fp); fclose(fp); (6) 以下程序中用户由键盘输入一个文件名,然后输入一串字符(用#结束输入)存放到此文件文件中形成文本文件,并将字符的个数写到文件尾部,请填空。 #include main( ) FILE *fp; char ch,fname32; int count=0; printf(“Input the filename :“); scanf(“%s“,fname); if(fp=fopen
9、( 【6】 ,“w+“)=NULL) printf(“Cant open file:%s n“,fname); exit(0); printf(“Enter data:n“); while(ch=getchar()!=“#“) fputc(ch,fp); count+; fprintf( 【7】 ,“n%dn“, count); fclose(fp); (7) 下面程序把从终端读入的 10 个整数以二进制方式写到一个名为 bi.dat 的新文件中,请填空. #include FILE *fp; main() int i,j; if(fp=fopen( 【8】, “wb“)=NULL) exit
10、(0); for(i=0; i=a main() char ch; if(fp=fopen( 【13】)=NULL)exit(0); while (ch=getchar()!=)fputc(ch,fp); 【14】 (10) 以下程序由终端输入一个文件名,然后把从终端键盘输入的字符依次存放到该文件中,用#作为结束输入的标志.请填空. #include main() FILE * fp; char ch,fname10; printf(“lnput the name of filen“); gets(fname); if(fp=【15】)=NULL) printf(“Cannot openn“)
11、; exit(0); printf(“Enter datan“); while(ch=getchar()!=#) fputc(【16】,fp); fclose(fp); (11) 下面的程序用来统计文件中字符的个数,请填空。 #include main() FILE *fp; long num=0; if( fp=fopen(“fname.dat“,“r“)=NULL) printf( “Cant open file! n“); exit(0); while 【17】 fgetc(fp); num+; printf(“num=%dn“, num); fclose(fp); (12)以下 C 语
12、言程序将磁盘中的一个文件复制到另一个文件中,两个文件名在命令行中给出。 #include main(int argc, char *argv) FILE *f1,*f2; char ch; if(argc 【18】 ) printf(“Parameters missing!n“); exit(0); if( (f1=fopen(argv1,“r“) = = NULL)|(f2=fopen(argv2,“w“) = = NULL) printf(“Can not open file!n“); exit(0); while( 【19】 )fputc(fgetc(f1),f2); fclose(f1
13、); fclose(f2); 答案: 一、选择题: 01) C 02) D 03) D 04) B 05) C 06) B 07) D 08) A 09) D 10) D 11) A 12) A 13) D 14) B 15) A 16) C 17) A 18) B 二、填空题: (1) Hell (2) “d1.dat”,”rb”或 “d1.dat”,”r+b”或”d1.dat”,”rb+” (3) !feof(fp) (4) fopen (5) “bi.dat”,“w”或“bi.dat”,“wt”或“bi.dat”,“w+t” (6) fname (7) fp (8) “bi.dat“ (9) fp (10) “w“或“w+“或“wt“或“w+t“或“wt+“ (11) stri-32 或 stri-(a-A或 stri-a+A (12) “r“或“r+“或“r+t“或“rt+“ (13) “bi.dat“,“w“ (14) fclose(fp) (15) fopen(fname,“w“) (16) ch (17) (!feof(fp) (18) 3 (19) !feof(f1)