文件
1.以下叙述中错误的是
A C语言中对二进制文件的访问速度比文本文件快。 B C语言中,随机文件以二进制代码形式存储数据。 C 语句FILE fp;定义了一个名为fp的文件指针。 D C语言中的文本文件以ASCII码形式存储数据。
1) 定义fp的文件指针应为:FILE *fp,所以C选项不正确
2.有以下程序: #include
{ FILE *fp; int i,k,n; fp=fopen(\ for(i=1;i<6;i++)
{ fprintf(fp,\ \
if(i%3==0) fprintf(fp,\ }
rewind(fp);
fscanf(fp,\ %d\\n\fclose(fp); }
程序运行后的输出结果是 A 0 0 B 123 45 C 1 4
D 1 2
打开文件data.dat,并且使得文件指针fp指向该文件,I的值为1,2,3,4,5时,满足条件2,依次将1,2,3,4,5输入到文件中,并且在I为3时满足(I%3==0),所以输入3之后换行,再输入的4,5.rewind(fp)使得文件指针fp指到文件的开头,然后将指针的当前位置开始,取两个数到变量k,n中,使得k=123,n=45,因为数据是以间隔符分开的.所以结果是123 45,选B.
3.以下与函数fseek(fp,0L,SEEK_SET)有相同作用的是 A feof(fp) B ftell(fp) C fgetc(fp)
D rewind(fp)
fseek(fp,n,SEEK_SET)的作用是使得文件指针移动到文件开始后的的n个字节位置上,此处的n为0,所以就是移动的文件的开始处,这与rewind(fp)作用相同,所以选D.
4.有如下程序: #include
{ FILE *fp1;
fp1=fopen(\ fprintf(fp1,\ fclose(fp1); }
若文本文件f1.txt中原有内容为:good,则运行以上程序后文件f1.txt中的内容为 A goodabc B abcd C abc D abcgood
fprintf(fp1,”abc”)是使得abc依次写到指针fp1指向的位置,所以abc覆盖good,
所以f1.txt中的内容变为abcd,选C.
5.有以下程序: #include
{ FILE *fp;int i,k=0,n=0; fp=fopen(\
for(i=1;i<4;i++) fprintf(fp,\ %d\ fclose(fp):
fp=fopen(\
fscanf(fp,\ %d%d\ printf(\ %d\\n\ fclose(fp); }
执行后的输出结果是 A 1 2 B 123 0 C 1 23
D 0 0
2) 通过第一个for语句,依次将1,2,3写入到文件中,并且1,2,3之间无间隔符,所以通过fscanf(fp,”%d%d”,&k,&n);将123赋给了k, n为赋值,仍为初始化的值,所以最后的结果为123 0,选B
6.有以下程序(提示:程序中fseek(fp,-2L*sizeof(int),SEEK_END);语句的作用是使位置指针从文件尾向前移2*sizeof(int)字节); #include
{ FILE *fp;int i,a[4]={1,2,3,4},b; fp=fopen(\
for(i=0;i<4;i++) fwrite(&a[i],sizeof(int),1,fp); fclose(fp);
fp=fopen(\
fseek(fp,-2L*sizeof(int),SEEK_END);
fread(&b,sizeof(int),1,fp); /*从文件中读取sizeof(int)字节的数据到变量b中*/ fclose(fp);
printf(\}
执行后的输出结果是 A 2 B 1 C 4 D 3
通过第一个for循环使得数组中的值依次写入文件中,fseek(fp,-2L*sizeof(int),SEEK_END), 使得指针移到3所在的字节的首位置,fread(&b,sizeof(int),1,fp);把指针fp所指的值放到变量b中,所以结果是3,选D
7.若fp已正确定义并指向某个文件,当未遇到该文件结束标志时函数feof(fp)的值为 A 0 B 1 C -1 D 一个非0的值
因为feof(文件指针)的作用是判断文件是否结束,是则返回1否则返回 0,本题中未遇到文件结束,所以应返回0,选A
8.下列关于C 语言数据文件的叙述中正确的是
A 文件由ASCII码字符序列组成,C语言只能读写文本文件。 B 文件由二进制数据序列组成,C 语言只能读写二进制文件。
C 文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件。 D 文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件。
选D.略.
9.以下叙述中不正确的是
A C语言中的文本文件以ASCII码形式存储数据。 B C 语言中对二进制文件的访问速度比文本文件快。 C C语言中,随即读写方式不适用于文本文件。 D C 语言中,顺序读写方式不适用于二进制文件。
选D.略.
10.以下程序企图把从终端输入的字符输出到名为abc.txt的文件中,知道从终端读入字符#号时结束输入和输出操作,但程序有错。 #include
{ FILE *fout; char ch; fout=fopen('abc.txt','w'); ch=fgetc(stdin); while(ch!='#')
{ fputc(ch.fout); ch=fgetc(stdin); }
fclose(fout); }
出错的原因是
A 函数fopen调用形式错误 B 输入文件没有关闭 C 函数fgetc调用形式错误 D 文件指针stdin没有定义
10)选A,fopen中的文件名和打开方式都应该用双引号引起.
11.有以下程序 #include
{ FILE *fp; int i=20,j=30,k,n; fp=fopen(\
fprintf(fp,\ fprintf(fp,\ fclose(fp);
fp=fopen(\
fp=fscanf(fp,\ printf(\ fclose(fp); }
程序运行后的输出结果是
A 20 30 B 20 50 C 30 50 D 30 20
答案:A
解析:考察fprintf函数和fscanf函数。程序首先以写文本文件的形式向文件写入整数20,换行符号’\\n’,然后再写入整数30,换行符号’\\n’然后调用fscanf函数读出两个整数,分别赋给k,n。这里要注意的是在文件中存放的是2和0的ASCII值,换行符’\\n’的ASCII码值,
3和0的ASCII值,换行符’\\n’的ASCII码值。所以读取整数时是先取出2和0的ASCII码值,当读到换行符’\\n’时,发现其不是数字,不是整数的一部分,于是就将2和0作为整数,于是的到20。同样再读下一个整数时,先找到3和0,遇到换行符是停止,得到30。注意此题与第五题的区别。 12.以下叙述中错误的是
A 二进制文件打开后可以先读文件的末尾,而顺序文件不可以。 B 在程序结束时,应当用fclose函数关闭已打开的文件。
C 在利用fread函数从二进制文件中读数据时,可以用数组名给数组中所有元素读入数据。 D 不可以用FILE定义指向二进制文件的文件指针。
答案:D
解析:概念的理解,参考课本。FILE可以指向二进制和文本文件。
13.若要打开A 盘上user子目录下名为abc.txt的文本文件进行读、写操作,下面符合此要求的函数调用是
A fopen(\ B fopen(\C fopen(\ D fopen(\
答案:B
解析:考察文件路径的书写格式和fopen函数的写法。参看课本P127页打开文件部分。
14.执行以下程序后,若文件能正常打开,test.txt文件的内容是 #include
{ FILE *fp;
char *s1=\ if((fp=fopen(\
{ printf(\ open test.txt file\\n\ exit(1); }
fwrite(s1,7,1,fp); /*把从地址s1开始的7个字符写到fp所指文件中*/ fseek(fp,0L,SEEK_SET); /*文件位置指针移到文件开头*/ fwrite(s2,5,1,fp); fclose(fp); }
A Basican B BasicFortran C Basic D FortranBasic
答案:A
解析:此题查几种打开文件方式区别,读者参考课本P127页,弄清楚这几张方式的不同。程序开头用”wb”方式打开文件,即以写的方式打开二进制文件,注意这里不是追加,所以打开时文件指针指向文件头,通过fwrite写入
“Fortran”后,通过fseek函数重新将文件指针移到了开头,所以后面的操作
将会覆盖掉前面的。由于写入”Basic”为5个字节,所以原先的最后两个字符没有覆盖掉。故选“Basican”。
15.有以下程序 #include
{ FILE *fp; int i; char ch[]=\
fp=fopen(\
for(i=0;i<4;i++) fwrite(&ch[i],1,1,fp); fseek(fp,-2L,SEEK_END); fread(&t,1,1,fp); fclose(fp);
printf(\}
程序执行后的输出结果是 A d B c C b
D a
答案:B
解析:考查fseek函数,这个函数中预定义表示SEEK_END是指最后一个字符的后面。所以此题首先写入”abcd”,再从最后开始向前移动两个,即从字符“d”的后头开始向前移动2个,这是指向字符“c”。故选B。
填空题
1.已有文本文件test.txt,其中的内容为:Hello.everyone!.以下程序中,文件test.txt已正确为“读”而打开,由文件指针fr指向该文件,则程序的输出结果是 #include
{ FILE *fr; char str[40]; .......
fgets(str,5,fr); printf(\ fclose(fr); }
1、答案:Hell
解析:靠查函数fgets参考课本P132页,这里实际输入的字符个数比给定的要少一个。题目给定的是5,所以实际输入的应该是5-1=4,即Hell。
2.若fp已正确定义为一个文件指针,d1.dat为二进制文件,请填空,以便为“读”而打开此文件:fp=fopen( );
2、答案:“d1.dat”,”rb”
解析:此题考查函数fopen的用法,注意文件的打开方式,以读打开二进制文件的方式为”rb”。
3.以下程序用来统计文件中字符个数,请填空 #include
{ FILE *fp; long num=0L;
if((fp=fopen(\ { printf(\ error\\n\ exit(0);} while( ) { fgetc(fp); num++;}
printf(\ fclose(fp): }
3、答案:!feof(fp)
解析:考察函数feof的使用。参考课本P128页。如果文件结束返回1,否则返回0。所以这里如果还没有到文件结尾的时候就继续读入字符。
4.有以下程序,其功能是:以二进制“写”方式打开文件d1.dat,写入1~100这100个整数后关闭文件;再以二进制“读”方式打开文件d1.dat,将这100个整数读入到另一个数组b中,并打印输出。请填空。 #include
{ FILE *fp;
int i,a[100],b[100]; fp=fopen(\ for(i=0;i<100;i++) a[i]=i+1; fwrite(a,sizeof(int),100,fp); fclose(fp);
fp=fopen(\ ); fread(b,sizeof(int),100,fp); fclose(fp):
for(i=0;i<100;i++) printf(\}
4、答案:“rb”
解析:考察文件的打开方式。题目首先是以写的方式打开二进制文件。然后关闭文件。重新打开文件时只要读取数据,所以以只读的方式打开就可。由此文件是二进制文件。所以用二进制方式打开。故答案为“rb”。