第11章 文件
11.1典型考试题剖析
11.1.1选择题
【例1】若fp是指向某文件的指针,且已读到文件末尾,则库函数feof(fp)的返回值是       
A) EOF    B) 1    C) 非零值    D) NULL
        考点:feof函数的返回值
        分析:根据定义,当文件指针指向文件末尾时,函数feof值为“真”(非0)。
        答案:C
【例2】下面的程序执行后,文件test.t中的内容是       
#include <stdio.h>
void fun(char *fname,char *st)
{ FILE *myf;
int i;
myf=fopen(fname,"w" );
for(i=0;i<strlen(st);i++)
fputc(st[i],myf);
fclose(myf);
}
main()
{ fun("test.t","new world");
    fun("test.t","hello,");
}
A) hello          B) new worldhello
C) new world        D) hello, rld
        考点:文件的打开方式。
        分析:本题中fun函数功能是将一个字符串写入文件中,向文件写入数据的方式是“w”方式。用“w”方式向文件写入数据时,若原文件不存在,则在打开时建立文件,若原文件存在,则在打开时将该文件删除,然后重新建立一个新文件。程序中第一次调用fun函数时,建立了“test.t”文件,并将字符串“new world”写入,第二次调用fun时,将上一次建立的“test.t”文件删去,新建一个“test.t”文件,并写入字符串“hello,”,因此程序执行结束后“test.t”文件的内容为“hello,”
        答案:A
【例3】若要打开A盘上user子目录下名为的文本文件进行读、写操作,下面符合此要求的函数调用是_______。
A) fopen("A:\","r")
B) fopen("A:\\user\\","r+")
C) fopen("A:\","r")
D) fopen("A:\\user\\","w")
        考点:文件打开函数。
        分析:fopen函数有两个参数,第一个参数为文件名,当函数给出的是文件路径时,要用\\进行分隔,这是因为用双引号括起来的字符序列表示字符串,字符串中“\\”表示转义字符,实际代表“\”。fopen的第二个参数是文件的打开方式,题目要求是进行读写操作,“r”代表只读,“w”代表只写,因此只有答案B符合要求。
        答案:B
【例4】有以下程序,程序运行后的输出结果是_______。
#include <stdio.h>
main()
{ FILE *fp;
int i=20,j=30,k,n;
fp=fopen("d1.dat","w");
fprintf(fp,"%d\n",i);
fprintf(fp,"%d\n",j);
fclose(fp);
fp=fopen("d1.dat","r");
fscanf(fp,"%d%d",&k,&n);
printf("%d  %d\n",k,n);
fclose(fp);
}
A) 20  30    B) 20  50    C) 30  50    D) 30  20
        考点:文件格式化读写函数。
        分析:该程序先以写方式打开文件,将变量i和j的值写入文件,再以读方式打开文件,将刚刚写入的信息输出到变量k和n中,最后打印变量k和n并关闭文件。得到的结果实际就是变量i和j的初始值。
        答案:A
【例5】对于下述程序,在方式串分别采用“w”和“wb”运行时,两次生成的文件TEST的长度是_______。
#include <stdio.h>
void main()
{ FILE *fp=fopen("TEST",方式串);
fputc('A',fp);
fputc('\n',fp);
fputc('B',fp);
fputc('\n',fp);
fputc('C',fp);
fclose(fp);
}
A) 7字节、7字节          B) 7字节、5字节 
C) 5字节、7字节          D) 5字节、5字节
        考点:文件打开方式对文件内容的影响。
        分析:本例考查文本操作的字符转换特性。在文本方式操作时,某些字符会被转换,例如“\n”会被转换成为两个连续字符“\r”和“\n”写入文件,在读出时恰好相反。但二
进制操作时没有任何转换。
        答案:B
【例6】以下程序的功能是_______。
#include <stdio.h>
main()
{ FILE *fp1,*fp2;
fp1=fopen("file1","r");
fp2=fopen("file2","w");
while(!feof(fp1))
fputc(fgetc(fp1),fp2);
fclose(fp1);
fclose(fp2);
}
A) 将磁盘文件的内容显示到屏幕上
B) 将两个磁盘文件合并为一个
C) 将一个磁盘文件复制到另一个磁盘文件中
D) 将两个磁盘文件合并后送到屏幕
        考点:文件打开函数和文件读写函数。
        分析:本题中以读的方式打开file1文件,以写的方式打开file2文件,再将输出语句fputc(fgetc(fp1),fp2)放入循环体内,表示只要fp1指向的文件没有结束,就从该文件中读出一个字符送到fp2指向的文件中。
        答案:C
11.1.2填空题
【例1】下面程序把从终端读入的10个整数以二进制方式写到一个名为bi.dat的新文件中,请填空。
#include <stdio.h>
FILE *fp;
main( )
{ int i,j;
if((fp=fopen(  1  ,"wb"))==NULL) exit(0);
for(i=0;i<10;i++)
{ scanf("%d",&j);
fwrite(&j,sizeof(int),1,  2  );
}
fclose(fp);
}
        考点:文件打开函数和文件写函数。
        分析:将键入的数据存到指定文件,必须先打开文件,因此第一个空应该填入打开文件的文件名;根据fwrite的函数原型可以知道,最后一个参数应该是文件指针,所以填入fp。
        答案:【1】"bi.dat" 【2】fp
【例2】以下程序中用户由键盘输入一个文件名,然后输入一串字符(用#结束输入)存放到此文件文件中形成文本文件,并将字符的个数写到文件尾部,请填空。
#include <stdio.h>
main( )
{ FILE *fp;
char ch,fname[32];
int count=0;
printf("Input the filename:");
scanf("%s",fname);
if((fp=fopen(  1  ,"w+"))==NULL)
{ printf("Can't open file%s \n"fname);
exit(0);}
printf("Enter data:\n");
while((ch=getchar())!='#')
{ fputc(chfp);
count++;}
fprintf(  2  ,"\n%d\n",count);
fclose(fp);
}
        考点:文件打开函数和文件写函数。
        分析:操作前要打开文件,因此第一空一定应填入文件名,即fname。根据题意知道,将字符全部写入文件后,还要在文件末尾写入字符个数,程序中采用的是fprintf函数,根据fprintf函数原型可知,它的第一个参数是文件指针,因此第二空应填入文件指针fp。
        答案:【1】fname 【2】 fp
【例3】以下程序段打开文件后,先利用fseek函数将文件位置指针定位在文件末尾,然后调用ftell函数返回当前文件位置指针的具体位置,从而确定文件长度,请填空。
FILE *myf;
long f1;
myf=      ("test.t","rb");
fseek(myf,0,SEEK_END);
f1=ftell(myf);
fclose(myf);
printf("%ld\n",f1);
        考点:文件打开函数和文件定位函数。
        分析:在对文件操作之前一定要打开文件,因此空白处应该填入fopen。函数fseek的功能是将文件指针myf移到文件末尾处。函数ftell的功能是得到流式文件中的当前位置,即相对于文件开头的位移量。
        答案: fopen
【例4】以下程序用来统计文件中字符的个数,请填空。
#include <stdio.h>
main()
{ FILE *fp;
long num=0L;
if((fp=fopen("fname.dat","r"))==NULL)
{  printf("Open error\n");
exit(0); }
while(      )
{ fgetc(fp);
num++;
}
printf("num=%ld\n",num-1);
fclose(fp);
}
        考点:文件读函数和文件状态函数。
fgets和fgetc的区别        分析:while循环对文件中的字符进行逐个的统计,这种统计应该随着文件结束而结束,所以空白处应填入的循环条件为判断文件是否结束。
        答案:!feof(fp)或feof(fp)==0。
【例5】若fp已确定为一个文件指针,d1.dat为二进制文件,请填空,以便为“读”而打开此文件:
fp=fopen(  【  】  );

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。