文件
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    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输入到文件中,并且在I3时满足(I%3==0),所以输入3之后换行,再输入的wind(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个字节位置上,此处的n0,所以就是移动的文件的开始处,这与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  goodabc            B  abcd            C  abc            D  abcgood
fprintf(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  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<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  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.以下程序企图把从终端输入的字符输出到名为的文件中,知道从终端读入字符#号时结束输入和输出操作,但程序有错。
#include<stdio.h>
main()
{  FILE  *fout;  char  ch;
  fout=fopen('','w');
  ch=fgetc(stdin);
  while(ch!='#')
{ fputc(ch.fout);
  ch=fgetc(stdin);
}fopen和open区别
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);
}
程序运行后的输出结果是
A  20    30    B  20  50    C    30    50    D  30    20
答案:A
解析:考察fprintf函数和fscanf函数。程序首先以写文本文件的形式向文件写入整数20,换行符号’\n’,然后再写入整数30,换行符号’\n’然后调用fscanf函数读出两个整数,分别赋给k,n。这里要注意的是在文件中存放的是20ASCII值,换行符’\n’ASCII码值,30ASCII值,换行符’\n’ASCII码值。所以读取整数时是先取出20ASCII码值,当读到换行符’\n’时,发现其不是数字,不是整数的一部分,于是就将20作为整数,于是的到20。同样再读下一个整数时,先到30,遇到换行符是停止,得到30。注意此题与第五题的区别。
12.以下叙述中错误的是
A  二进制文件打开后可以先读文件的末尾,而顺序文件不可以。
B  在程序结束时,应当用fclose函数关闭已打开的文件。
C  在利用fread函数从二进制文件中读数据时,可以用数组名给数组中所有元素读入数据。
D  不可以用FILE定义指向二进制文件的文件指针。
答案:D
解析:概念的理解,参考课本。FILE可以指向二进制和文本文件。
13.若要打开A 盘上user子目录下名为的文本文件进行读、写操作,下面符合此要求的函数调用是
A  fopen("A:\","r")            B  fopen("A:\\user\\","r+")
C  fopen("A:\","rb")            D  fopen("A:\\user\\","w")
答案:B
解析:考察文件路径的书写格式和fopen函数的写法。参看课本P127页打开文件部分。
14.执行以下程序后,若文件能正常打开,文件的内容是
#include <stdio.h>
main()
{  FILE  *fp;
  char  *s1="Fortran",*s2="Basic";
  if((fp=fopen("","wb"))==NULL)
  {  printf("Can't  open    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”。