第十二章  文件
一、选择题
1.当已存在一个文件时,执行函数fopen (“”, “r++”)的功能是      0级)
A) 打开文件,清除原有的内容
B) 打开文件,只能写入新的内容
C) 打开文件,只能读取原有内容
D) 打开文件,可以读取和写入新的内容
2.若用fopen( )函数打开一个新的二进制文件,该文件可以读也可以写,则文件打开模式是    1级)
        A)ab+  B) wb+    C)rb+  D)ab
    3.使用fseek函数可以实现的操作是        0级)
A) 改变文件的位置指针的当前位置
B) 文件的顺序读写
C) 文件的随机读写
D) 以上都不对 
    4.fread(buf,64,2,fp)的功能是        1级)
A) fp文件流中读出整数64,并存放在buf中;
B) fp文件流中读出整数642,并存放在buf中;
C) fp文件流中读出64个字节的字符,并存放在buf中; 
D) fp文件流中读出264个字节的字符,并存放在buf中;
5.以下程序的功能是      1级)
  main( )
  {FILE  *fp;  char str[ ]=”HELLO”;  fp=fopen(“PRN”,”w”);  fpus(str,fp);fclose(fp);  }
A) 在屏幕上显示“HELLO
B) 把“HELLO”存入PRN文件中
C) 在打印机上打印出“HELLO
D) 以上都不对
6.fp是指向某文件的指针,且已读到此文件末尾,则库函数feof(fp)的返回值是      0级)
A) EOF      B) 0      C) 非零值      D) NULL
7.以下叙述中不正确的是      0级)
A) C语言中的文本文件以ASCII码形式存储数据
B) C语言中对二进制位的访问速度比文本文件快
C) C语言中,随机读写方式不使用于文本文件
D) C语言中,顺序读写方式不使用于二进制文件
8.以下程序企图把从终端输入的字符输出到名为的文件中,直到从终端读入字符#号时结束输入和输出操作,但程序有错。
#include <stdio.h>
main()
{ FILE *fout; char ch;
fout=fopen('','w');
ch=fgetc(stdin);
while(ch!='#')
{ fputc(ch,fout);
ch =fgetc(stdin);
}
fclose(fout);
}
出错的原因是      2级)
  A) 函数fopen调用形式有误
  B) 输入文件没有关闭
  C) 函数fgetc调用形式有误
  D) 文件指针stdin没有定义
9、若fp为文件指针,且文件已正确打开,ilong型变量,以下程序段的输出结果是      1级)
fseek(fp, 0, SEEK_END);
i=ftell(fp);
printf("i=%ld\n", i);
A) –1                    B) fp所指文件的长度,以字节为单位
C) 0                      D) 2
二、填空题
    1.C语言中根据数据的组织形式,把文件分为            两种。0级)
    2.使用fopen(“abc”,”r+”)打开文件时,若abc文件不存在,则      1级)
3.使用fopen(“abc”,”w+”)打开文件时,若abc文件已存在,则        1级)
    4.C语言中文件的格式化输入输出函数对是      ;文件的数据块输入输出函数对是      ;文件的字符串输入输出函数对是      0级)
    5.C语言中文件指针设置函数是      ;文件指针位置检测函数是      0级)
6.在C程序中,文件可以用      方式存取,也可以用      方式存取。0级)
7.在C程序中,数据可以用            两种代码形式存放。0级)
8.在C语言中,文件的存取是以      为单位的,这种文件被称作      文件。
0级)
9.feof(fp)函数用来判断文件是否结束,如果遇到文件结束,函数值为      ,否则为    0级)
三、程序填空题
    1.下面程序用变量count统计文件中字符的个数。请填空。2级)
# include  <stdio.h>
  main( )
  {FILE  *fp;  long count=0; 
if((fp=fopen(“letter.dat”,  1  ))= =NULL)
{printf(“cannot open file\n”);  exit(0);  }
    while(!feof(fp))  {    2      3    ;  }
    printf(“count=%ld\n”, count);  fclose(fp);    }
2.以下程序的功能是将文件file1.c的内容输出到屏幕上并复制到文件file2.c中。请填空。2级)
  # include  <stdio.h>
    main( )
    {FILE      1c语言写入txt文件      ;  fp1= fopen(“file1.c”, ”r”);  fp2= fopen(“file2.c”, ”w”);
    while(!feof(fp1))  putchar(getc (fp1));        2     
    while(!feof(fp1))  putc    3    ;
    fclose(fp1);  fclose(fp2);  }
3.以下程序中用户由键盘输入一个文件名,然后输入一串字符(用#结束输入)存放到此文件
文件中形成文本文件,并将字符的个数写到文件尾部。2级)
#include <stdio.h>
void main(void)
{
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(ch,fp);
count++;
}
fprintf(         2        ,"\n%d\n",count);
fclose(fp);
}
四、编程题
    1.编写一个程序,由键盘输入一个文件名,然后把从键盘输入的字符依次存放到该文件中,用‘#’作为结束输入的标志。2级)
    2.编写一个程序,建立一个abc文本文件,向其中写入“this is a test”字符串,然后显示该文件的内容。2级)
    3.编写一程序,查指定的文本文件中某个单词出现的行号及该行的内容。2级)
    4.编写一程序fcat.c,把命令行中指定的多个文本文件连接成一个文件。2级)例如:
      fcat file1 file2 file3
      它把文本文件file1、file2和file3连接成一个文件,连接后的文件名为file1。
    5.编写一个程序,将指定的文本文件中某单词替换成另一个单词。2级)