您好,欢迎访问三七文档
81第八章文件一、单项选择题1.C语言中,文件由(A)。A.字符(字节)序列组成B.记录组成C.数据行组成D.数据块组成2.若文件型指针fp中指向某文件的末尾,则函数feof(fp)的返回值是(C)。A.0B.-1C.非零值D.NULL3.下列语句将输出(B)#includestdio.hprintf(“%d%d%d”,NULL,’\0’,EOF);A.001B.00–1C.NULLEOFD.10EOF4.下列语句中,将fp定义为文件型指针的是(B)。A.FILEfp;B.FILE*fp;C.filefp;D.file*fp;5.定义FILE*fp;则文件指针fp指向的是(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,下列语句中哪一个是正确的(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.dat”,”w+”);C、fp=fopen(”a:\aa.dat”,”wb”);D、fp=fopen(”a:\aa.dat”,”rb+”);11.以读写方式打开一个已有的二进制文件filel,并且定义FILE*fp,下面fopen函数正确的调用方式是(B)。A.fp=fopen(“file1”,”r”)B.fp=fopen(“file1”,”rb+”)C.fp=fopen(“file1”,”rb”)D.fp=fopen(“file1”,”wb+”)12.标准库函数fputs(p1,p2)的功能是(C)。A.从p1指向的文件中读一个字符串存入p2指向的内存B.从p2指向的文件中读一个字符串存入p1指向的内存C.从p1指向的内存中读一个字符串写到p2指向的文件中D.从p2指向的内存中读一个字符串写到p1指向的文件中82二、填充题1.C语言中调用fopen函数打开文件,调用fclose函数关闭文件。2.fopen函数的返回值是包含文件缓冲区信息的FILE结构体地址。3.文件操作的三大特征是文件保存在外存中,文件中数据有序,数据数量可以不定。4.feof函数可用于文本文件和二进制文件,它用来判断即将读入的是否为文件结束标志,若是,函数值为非零。5.若ch为字符变量,fp为文本文件指针,从fp所指文件中读入一个字符时,可用的二种不同的输入语句是ch=fgetc(fp)和fscanf(fp,”%c”,&ch)。把一个字符输出到fp所指文件中的二种不同的输出语句是fputc(ch,fp)和fprintf(fp,”%c”,ch)。6.sp=fgets(str,n,fp);函数调用语句从fp指向的文件输入n-1个字符,并把它们放到字符数组str中,sp得到str的地址。而fputs函数的作用是向指定的文件输出一个字符串,输出成功函数返回值为0,fprintf函数输出成功函数返回值为实际输出的字符数。7.“FILE*fp”的作用是定义了一个文件型指针变量,其中的“FILE”是在stdio.h头文件中定义的。8.在对文件进行操作的过程中,若要求文件指针的位置回到文件的开头,应当调用的函数是rewind()函数。9.下面的程序用来统计文件中字符的个数,请填空。#includestdio.hvoidmain(){FILE*fp;longnum=0;if(fp=fopen(“fname.dat”,”r”)==NULL){printf(“Can’topenfile!\n”);exit(0);}while(!feof(fp)){fgetc(fp);num++;}printf(“num=%d\n”,num);fclose(fp);}10.下面程序完成从磁盘文件stu..dat中读取N个学生的姓名、学号、成绩后在屏幕上显示输出。请将程序补充完整。#includestdio.h#defineN100structstudent{charname[20];intno;intscore;}stud[N];voidmain(){FILE*fp;inti;if((fp=fopen(“stu.dat”,”rb”))==NULL){printf(“Cannotopenfile!\n”);exit(0);}fread(stud,sizeof(structstudent),N,fp);for(i=0;iN;i++)83printf(“name:%sNO:%dscore:%d\n”,stud[i].name,stud[i].no,stud[i].score);fclose(fp)}11.开辟一个存储n个int数据的内存区、并将内存区首地址送入p(指向int类型的指针变量)的语句为p=(int)malloc(sizeof(int)*n);。12.释放由fp所指向的内存区的语句为free(fp);。13.fp为文件位置指针,将fp移到离当前位置25个字节处的语句为fseek(fp,25L,1);。14.输入若干个学生的姓名、学号、数学、英语、计算机成绩到文件中student.dat。#includestdio.hvoidmain(){FILE*fp;charname[8],numb[8];intm,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%d\n,name,numb,m,e,c);}fclose(fp);;}15.下列程序将文件a.dat、b.dat按原顺序(文件中每行一个数,按从小到大排列)合并到文件c.dat中。#includestdio.hvoidmain(){FILE*f1,*f2,*f3;intx,y;if((f1=fopen(a.dat,r))==NULL){printf(“Cannotopenfile!\n”);exit(0);}if((f2=fopen(b.dat,r))==NULL){printf(“Cannotopenfile!\n”);exit(1);}if((f3=fopen(“c.dat”,”w”))==NULL){printf(“Cannotopenfile!\n”);exit(2);}fscanf(f1,%d,&x);fscanf(f2,%d,&y);while(!feof(f1)&&!feof(f2))if(xy){fprintf(f3,%d\n,x);fscanf(f1,%d,&x);}else{fprintf(f3,%d\n,y);fscanf(f2,%d,&y);}if(feof(f1)){fprintf(f3,”%d\n”,y);while(!feof(f2)){fscanf(f2,%d,&y);fprintf(f3,”%d\n”,y);}}else{fprintf(f3,“%d\n”,x);84while(!feof(f1)){fscanf(f1,”%d”,&x);;fprintf(f3,%d\n,x);}}fclose(f1);fclose(f2);fclose(f3);}三、程序分析题1.读程序,指出程序所完成的功能。#includestdio.hvoidmain(){intchl,ch2;while((chl=getchar())!=EOF)if(ch1>=’a’&&chl<=’z’){ch2=chl-32;putchar(ch2);}elseputchar(chl):}该程序的功能是:从键盘读入一个字符,如果是小写字母,则变成大写输出到屏幕上,否则原样输出。当打入ctr1-z(即EOF)时,输入结束。2.读程序,写功能。#includestdio.hvoidmain(intargc,char*argv[]){FILE*f1,*f2;charch;if(argc3){printf(“Parametermissing!\n”);exit(0);}if(((f1=fopen(argv[1],”r”))==NULL||(f2=fopen(argv[2],”w”))==NULL){printf(“Cannotopenfile!\n”);exit(0);}while(!feof(f1))fputc(fgetc(f1),f2);fclose(f1);fclose(f2);}该程序的功能是:在用命令行的形式运行本程序时,必须在程序名后加二个参数,这二个参数分别表示磁盘上的二个文件名。程序运行后,能把第一个文件的内容拷贝到第二个文件。如果命令行缺少参数或文件打不开,程序终止运行并显示出错情况。3.读程序,写功能。#includestdio.hvoidmain(){FILE*fp:intn=0;charch;if((fp=fopen(“fname.txt”,”r”))==NULL){prlntf(“Cannotopenfile!\n”);exit(0);}while(!feof(fp)){ch=fgetc(fp);if(ch==’’)n++;}printf(“b=%d\n”,n);fclose(fp);85}该程序的功能是:统计文本文件fname.txt中的空格字符数。4.读程序,写功能。#include“stdio.h”voidmain(){FILE*f1,*f2;intk;if((f1=fopen(“c:\tc\pl.c”,”r”))==NULL){printf(“Cannotopenfile!\n”);exit(0);}if((f2=fopen(“a:\pl.c”,”w”))==NULL){printf(“Cannotopenfile!\n”);exit(0);}for(k=1;k=1000;k++){if(!feof(f1))break;fputc(fgetc(f1),f2);}fclose(f1);fclose(f2);}该程序的功能是:把C盘根目录下的tc目录中的文件p1.c复制到A盘的根目录下,取同样的文件名p1.c。如果C盘中的p1.c文件超过1000字节,则最多复制1000字节。5.假定在当前盘当前目录下有2个文本文件,其名称和内容如下:文件名a1.txta2.txt内容121314#252627#写出下列程序运行后的输出。#include“stdio.h”voidmain(){FILE*fp;voidfc(FILE*fp1);if((fp=fopen(“a1.txt”,”r”))==NULL){printf(“Cannotopenfile!\n”);exit(1);}else{fc(fp);fclose(fp);}if((fp=fopen(“a2.txt”,”r”))==NULL){printf(“Cannotopenfile!\n”);exit(1);}else{fc(fp);fclose(fp);}}voidfc(
本文标题:第八章 文 件
链接地址:https://www.777doc.com/doc-2190500 .html