《第八章文件》由会员分享,可在线阅读,更多相关《第八章文件(16页珍藏版)》请在金锄头文库上搜索。
1、第八章 文 件一、单项选择题1C语言中,文件由( A )。 A字符(字节)序列组成 B记录组成 C数据行组成 D数据块组成2若文件型指针fp中指向某文件的末尾,则函数feof(fp)的返回值是( C )。 A0B-1C非零值DNULL3. 下列语句将输出( B ) #include printf(“%d %d %d”, NULL,0,EOF); A. 0 0 1 B. 0 0 1 C. NULL EOF D. 1 0 EOF4下列语句中,将fp定义为文件型指针的是( B )。 AFILE fp;BFILE *fp;Cfile fp;Dfile *fp;5. 定义FILE *fp; 则文件指针f
2、p指向的是( D )。 A. 文件在磁盘上的读写位置 B. 文件在缓冲区上的读写位置C. 整个磁盘文件 D. 文件类型结构体6. 缓冲文件系统的缓冲区位于( C )。 A. 磁盘缓冲区中 B. 磁盘文件中C. 内存数据区中 D. 程序中7. 以“只读”方式打开文本文件a:aa.dat,下列语句中哪一个是正确的( D )。 A、fp=fopen(”a:aa.dat”,”ab”); B、fp=fopen(”a:aa.dat”,”a”); C、fp=fopen(”a:aa.dat”,”wb”); D、fp=fopen(”a:aa.dat”,”r”);8. 以“追加”方式打开文本文件a:aa.dat,
3、下列语句中哪一个是正确的( B )。 A、fp=fopen(”a:aa.dat”,”ab”); B、fp=fopen(”a:aa.dat”,”a”); C、fp=fopen(”a:aa.dat”,”r+”); D、fp=fopen(”a:aa.dat”,”w”);9. 如果二进制文件a.dat已存在,现要求写入全新的数据,应以什么方式打开( A )。A. “w” B. “wb” C. “w+” D. “wb+”10. 为读写建立一个新的文本文件a:aa.dat,下列语句中哪一个是正确的( B )。 A、fp=fopen(”a:aa.dat”,”ab”); B、fp=fopen(”a:aa.da
4、t”,”w+”); C、fp=fopen(”a:aa.dat”,”wb”); D、fp=fopen(”a:aa.dat”,”rb+”);11以读写方式打开一个已有的二进制文件filel,并且定义FILE *fp,下面fopen函数正确的调用方式是( B )。 Afp=fopen (“file1”, ”r”) Bfp=fopen (“file1”, ”rb+”) Cfp=fopen (“file1”, ”rb”)Dfp=fopen (“file1”, ”wb+”)12标准库函数fputs (p1,p2)的功能是( C )。 A从p1指向的文件中读一个字符串存入p2指向的内存 B从p2指向的文件中
5、读一个字符串存入p1指向的内存 C从p1指向的内存中读一个字符串写到p2指向的文件中 D从p2指向的内存中读一个字符串写到p1指向的文件中二、填充题1C语言中调用 fopen 函数打开文件,调用 fclose 函数关闭文件。2. fopen函数的返回值是 包含文件缓冲区信息的FILE结构体地址 。3. 文件操作的三大特征是 文件保存在外存中 , 文件中数据有序 , 数据数量可以不定 。4feof函数可用于 文本 文件和 二进制 文件,它用来判断即将读入的是 否为 文件结束标志 ,若是,函数值为 非零 。5若ch为字符变量,fp为文本文件指针,从fp所指文件中读入一个字符时,可用的二 种不同的输
6、入语句是 ch=fgetc(fp) 和 fscanf(fp,”%c”, &ch) 。把一个字符输 出到fp所指文件中的二种不同的输出语句是 fputc(ch,fp) 和fprintf(fp,”%c”, ch) 。6sp=fgets (str, n, fp) ; 函数调用语句从 fp 指向的文件输入 n-1 个字符,并把它们放到 字符数组str中,sp得到 str 的地址。而 fputs 函数的作用是向指定的文件输出 一个字符串,输出成功函数返回值为 0 ,fprintf函数输出成功函数返回值为实际输出的字符数 。7“FILE *fp”的作用是定义了一个 文件型指针变量 ,其中的“FILE”是在
7、 stdio.h 头文件中定义的。8在对文件进行操作的过程中,若要求文件指针的位置回到文件的开头,应当调用的函数是rewind ( ) 函数。9下面的程序用来统计文件中字符的个数,请填空。 #include void main( ) FILE *fp ; long num=0 ; if (fp=fopen (“fname. dat”, ”r”) = =NULL) printf (“Can t open file!n”); exit (0) ; while (!feof (fp) fgetc (fp) ; num+ ; printf (“num=%dn”, num) ; fclose (fp)
8、;10下面程序完成从磁盘文件stu.dat中读取N个学生的姓名、学号、成绩后在屏幕上显示 输出。请将程序补充完整。#include #define N 100struct student char name20; int no; int score; studN;void main () FILE *fp; int i ; if (fp=fopen (“stu.dat”, ”rb”)=NULL) printf (“Can not open file!n”); exit (0); fread (stud, sizeof (struct student), N, fp) ; for (i=0; i
9、N; i+) printf (“name : %s NO: %d score : %dn”, studi. name, studi. no, studi. score); fclose (fp)11. 开辟一个存储n个int数据的内存区、并将内存区首地址送入p(指向int类型的指 针变量)的语句为 p=(int )malloc(sizeof(int)*n); 。12释放由fp所指向的内存区的语句为 free(fp); 。13fp为文件位置指针,将fp移到离当前位置25个字节处的语句为 fseek(fp,25L ,1); 。14. 输入若干个学生的姓名、学号、数学、英语、计算机成绩到文件中stu
10、dent.dat。 #include void main() FILE *fp; char name8,numb8; int m,e,c,n,i ; scanf(%d,&n); fp=fopen(“student.dat”,”w”); for(i=1;i=n;i+) scanf(%s%s%d%d%d,name,numb,&m,&e,&c); fprintf(fp,%s %s %d %d %dn,name,numb,m,e,c); fclose(fp); ; 15. 下列程序将文件a.dat、b.dat按原顺序(文件中每行一个数,按从小到大排列) 合并到文件c.dat中。 #include vo
11、id main() FILE *f1,*f2,*f3; int x,y;if(f1=fopen(a.dat,r)=NULL) printf (“Can not open file!n”); exit (0); if(f2=fopen(b.dat,r)=NULL) printf (“Can not open file!n”); exit (1); if( f3=fopen(“c.dat”,”w”) )=NULL) printf (“Can not open file!n”); exit (2); fscanf(f1,%d,&x); fscanf(f2,%d,&y); while(!feof(f1
12、)&!feof(f2) if(xy) fprintf(f3,%dn,x); fscanf(f1,%d,&x); else fprintf(f3,%dn,y); fscanf(f2,%d,&y); if(feof(f1) fprintf(f3,”%dn”, y ); while(!feof(f2) fscanf(f2,%d,&y); fprintf(f3,”%dn”,y); else fprintf(f3, “%dn”, x ); while(!feof(f1) fscanf(f1,”%d”,&x); ; fprintf(f3,%dn,x); fclose(f1); fclose(f2); fclose(f3); 三、程序分析题