复习题十答案及详细分析

  • 格式:doc
  • 大小:44.50 KB
  • 文档页数:6

文件1.以下叙述中错误的是A C语言中对二进制文件的访问速度比文本文件快。

B C语言中,随机文件以二进制代码形式存储数据。

C 语句FILE fp;定义了一个名为fp的文件指针。

D C语言中的文本文件以ASCII码形式存储数据。

1)定义fp的文件指针应为:FILE *fp,所以C选项不正确2.有以下程序:#include <stdio.h>main(){ FILE *fp; int i,k,n;fp=fopen("data.dat","w+");for(i=1;i<6;i++){ fprintf(fp,"%d ",i);if(i%3==0) fprintf(fp,"\n");}rewind(fp);fscanf(fp,"%d%d",&k,&n); printf("%d %d\n",k,n);fclose(fp);}程序运行后的输出结果是A 0 0B 123 45C 1 4D 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<stdio.h>main(){ FILE *fp1;fp1=fopen("f1.txt","w");fprintf(fp1,"abc");fclose(fp1);}若文本文件f1.txt中原有内容为:good,则运行以上程序后文件f1.txt中的内容为A goodabcB abcdC abcD abcgoodfprintf(fp1,”abc”)是使得abc依次写到指针fp1指向的位置,所以abc覆盖good,所以f1.txt中的内容变为abcd,选C.5.有以下程序:#include <stdio.h>main(){ FILE *fp;int i,k=0,n=0;fp=fopen("d1.dat","w");for(i=1;i<4;i++) fprintf(fp," %d",i);fclose(fp):fp=fopen("d1.dat","r");fscanf(fp," %d%d",&k,&n); printf("%d %d\n",k,n);fclose(fp);}执行后的输出结果是A 1 2B 123 0C 1 23D 0 02)通过第一个for语句,依次将1,2,3写入到文件中,并且1,2,3之间无间隔符,所以通过fscanf(fp,”%d%d”,&k,&n);将123赋给了k, n为赋值,仍为初始化的值,所以最后的结果为123 0,选B6.有以下程序(提示:程序中fseek(fp,-2L*sizeof(int),SEEK_END);语句的作用是使位置指针从文件尾向前移2*sizeof(int)字节);#include<stdio.h>main(){ FILE *fp;int i,a[4]={1,2,3,4},b;fp=fopen("data.dat","wb");for(i=0;i<4;i++) fwrite(&a[i],sizeof(int),1,fp);fclose(fp);fp=fopen("data.dat","rb");fseek(fp,-2L*sizeof(int),SEEK_END);fread(&b,sizeof(int),1,fp); /*从文件中读取sizeof(int)字节的数据到变量b中*/ fclose(fp);printf("%d\n",b);}执行后的输出结果是A 2B 1C 4D 3通过第一个for循环使得数组中的值依次写入文件中,fseek(fp,-2L*sizeof(int),SEEK_END), 使得指针移到3所在的字节的首位置,fread(&b,sizeof(int),1,fp);把指针fp所指的值放到变量b中,所以结果是3,选D7.若fp已正确定义并指向某个文件,当未遇到该文件结束标志时函数feof(fp)的值为A 0B 1C -1D 一个非0的值因为feof(文件指针)的作用是判断文件是否结束,是则返回1否则返回0,本题中未遇到文件结束,所以应返回0,选A8.下列关于C 语言数据文件的叙述中正确的是A 文件由ASCII码字符序列组成,C语言只能读写文本文件。

B 文件由二进制数据序列组成,C 语言只能读写二进制文件。

C 文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件。

D 文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件。

选D.略.9.以下叙述中不正确的是A C语言中的文本文件以ASCII码形式存储数据。

B C 语言中对二进制文件的访问速度比文本文件快。

C C语言中,随即读写方式不适用于文本文件。

D C 语言中,顺序读写方式不适用于二进制文件。

选D.略.10.以下程序企图把从终端输入的字符输出到名为abc.txt的文件中,知道从终端读入字符#号时结束输入和输出操作,但程序有错。

#include<stdio.h>main(){ 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<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");fp=fscanf(fp,"%d%d", &k,&n); printf("%d%d\n",k,n);fclose(fp);}程序运行后的输出结果是A20 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("A:\user\abc.txt","r")B fopen("A:\\user\\abc.txt","r+")C fopen("A:\user\abc.txt","rb")D fopen("A:\\user\\abc.txt","w")答案:B解析:考察文件路径的书写格式和fopen函数的写法。

参看课本P127页打开文件部分。

14.执行以下程序后,若文件能正常打开,test.txt文件的内容是#include <stdio.h>main(){ FILE *fp;char *s1="Fortran",*s2="Basic";if((fp=fopen("test.txt","wb"))==NULL){ printf("Can't 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 BasicanB BasicFortranC BasicD FortranBasic 答案:A解析:此题查几种打开文件方式区别,读者参考课本P127页,弄清楚这几张方式的不同。