中午好 ,今天是: 2025年5月2日
|
|
|
|
|
|
 
单元练习
第1章 C语言程序设计基本知识
第2章 算法及其描述
第3章 数据类型及表达式
第4章 结构化程序设计
第5章 数组
第6章 函数与预处理
第7章 指针
第8章 结构体、共用体和枚举类型
第9章 位运算
第10章 文件
模拟测试
模拟测试一
模拟测试二
模拟测试三
第10章 文件
发布人:
陈裕雄
一、选择题
1.以下说法正确的是(  )。
A.文件的格式只能是二进制
B.文件关闭函数是文件打开函数使用时经常要用到的一个函数
C.文件中的内容只能顺序存取
D.文件测试函数可以当作调式程序用

2.有一abc.txt文件内容如下:
0123456789abcdefABCDEF
对abc.txt文件进行操作的程序如下:
#include <stdio.h>
void main()
{
FILE *fp;
char ch;
char str[15];
fp=fopen("abc.txt","rb");
if(fp!=NULL)
{
fseek(fp,2,SEEK_SET);
fgetc(fp);
fgetc(fp);
fgets(str,15,fp);
fseek(fp,-4,SEEK_CUR);
fgetc(fp);
fseek(fp,4,SEEK_CUR);
ch=fgetc(fp);
printf("ch=%c\n",ch);
fclose(fp);
}
}
程序运行的结果是ch为字符( )。
A.B B.D C.E D.9

3.下面( )是从文件中读取一个字符。
A.ch=getc(); B.Dfputc(ch,fp);
C.fscanf(fp, "%c",&ch); D.scanf("%c",&ch);

4.C语言中的文件类型可以分为(  )。
A.索引文件和文本文件两种
B.ASCII文件和二进制文件两种
C.只有文本文件一种
D.只有二进制文件一种

5. C语言中,数据文件的存取方式(  )。
A.只能顺序存取
B.只能随机存取(也叫随机存取)
C.可以顺序存取和随机存取
D.只能从文件的开头进行存取

6. 以下关于C语言数据文件的叙述中错误的是(  )。
A.C语言中的文本文件以ASCII码形式存放数据
B.C语言对二进制文件的访问速度比文本文件快
C.C语言对二进制文件的访问速度和对文本文件的访问速度一样快
D.只能从文件的开头进行存取

7. 在C语言中,用“w”方式打开一个已含有10个字符的文本文件,并写入了5个新字符,则该文件中存放的字符是(  )。
A.新写入的5个字符
B.新写入的5个字符覆盖原有字符中的前5个字符,保留原有的后5个字符
C.原有的10个字符在前,新写入的5个字符在后
D.新写入的5个字符在前,原有的10个字符在后

8.设已正确打开一个已存有数据的文本文件,文件中原有数据为abcdef,新写入的数据为xyz,若文件中的数据变为xyzdef,则该文件打开的方式是(  )。
A.w B.w+ C.a+ D.r+

9. 以下叙述中正确的是(  )。
A.EOF只能作为二进制文件的结束标志,feof()只能作为文本文件的结束标志
B. EOF只能作为文本文件的结束标志,feof()只能作为二进制文件的结束标志
C. feof()只能作为二进制文件的结束标志,EOF则可作为文本文件和二进制文件的结束标志
D. EOF只能作为文本文件的结束标志, feof()则可作为文本文件和二进制文件的结束标志

10.若fp是指向某文件的指针,且已读到文件的末尾,则C语言函数feof(fp)的返回值是(  )。
A.EOF      B.-1       C.非0值      D.NULL

11.在C语言中,可以把整数以二进制形式存放到文件中的函数是(  )。
A.fprintf()函数       B.fread()函数       C.fwrite()函数         D.fputc()函数

12.以下程序的运行结果是(  )。
#include <stdio.h>
void main()
{
FILE *fp;
int i=20,j=30,k,n;
fp=fopen("d1.dat","w+");
fprintf(fp,"%d ",i);
fprintf(fp,"%d\n",j);
rewind(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

13.标准库函数fgets(s,n,f)的功能是(  )。
A.从文件f中读取长度为n的字符串存入指针s所指的内存。
B.从文件f中读取长度不超过n-1的字符串存入指针s所指的内存。
C.从文件f中读取n个字符串存入指针s所指的内存。
D.从文件f中读取长度为n-1的字符串存入指针s所指的内存。

二、填空题
1.如果要把一个字符‘A’写入文件指针fp所指定的文件里,应:
______________________________________________________________ ;
如果要把一个字符串“Hello!”写入文件指针fp所指定的文件里,应:
______________________________________________________________。
2.如果有三个整数以ASCII码方式写入了文件指针fp所指定的文件里,且整数之间以逗号相隔。用a、b、c三个整数变量来获取这三个整数:
______________________________________________________________。
3.调用fopen函数以文本方式打开文本文件aaa.txt如下:
FILE *fp=fopen("aaa.txt",_________);
如果为了读取而打开应在空白处填入__________;如果为了输入而打开应在空白处填入____________;如果为了追加而打开应在空白处填入_______________。
4.以下C程序将磁盘中的一个文件复制到另一个文件中,两个文件名已在程序中给出(假定文件名无误),请填空。
#include <stdio.h>
void main()
{
FILE *f1,*f2;
f1=fopen("file_a.dat","r");
f2=fopen("file_b.dat","w");
while(__________)
fputc(fgetc(f1),__________);
____________________;
____________________;
}
5.以下程序由键盘输入一个文件名,然后把键盘输入的字符依次存放到该文件中,用#号作为结束输入的标志,请填空。
#include <stdio.h>
#include <stdlib.h>
void main()
{
FILE *fp;
char ch,fname[10];
printf("Enter the name of file:\n");
gets(fname);
if((fp=__________)==NULL)
{
printf("Open error\n");
exit(0);
}
printf("Enter data:\n");
while((ch=getchar())!='#')
fputc(__________,fp);
fclose(fp);
}
6.以下程序用来统计文件中字符的个数,请填空。
#include <stdio.h>
void main()
{
FILE *fp;
long num=0;
fp=fopen("fname.dat",__________);
while__________
{
  __________;
  num++;
}
printf("num=%ld\n",num);
fclose(fp);
}
7.假定磁盘当前目录下有文件名为a.dat、b.dat、c.dat三个文件,文件中内容分别为aaaa#、bbbb#和cccc#,执行以下程序后将输出__________。
#include <stdio.h>
void fc(FILE *);
void main()
{
FILE *fp;
int i=3;
char fname[][10]={"a.dat","b.dat","c.dat"};
while(--i>=0)
{
fp=fopen(fname[i], "r");
fc(fp);
fclose(fp);
}
}
void fc(FILE *ifp)
{
char c;
while((c=fgetc(ifp))!='#')
putchar(c-32);
}
三、程序填空题
有5个学生的成绩需要保存在score.dat文件中,保存格式如下:
学生姓名,年龄,成绩<CR>  (“<CR>”代表回车)
学生姓名,年龄,成绩<CR>
……
……
请完成下面这段源代码。
void main()
{
FILE *fp;
int i;
char name[80];
int age;
float score;
fp=fopen("__________","w");
for(i=0;i<5;i++)
{
printf("请输入第%d个学生的信息\n",__________);
printf("姓名:");
scanf(__________);
printf("年龄:");
____________________ 
printf("成绩:"); 
fprintf(fp,__________,name,age,score);
____________________
}
         ____________________
}

四、程序设计题
1.将文件boot.int(文件的目录是C:\boot.ini)中的内容显示在屏幕上。
2.将文件boot.int中存放的前10个字符显示到屏幕上。
3.编写程序使用字符串写函数将字符串“Welcome you”写入到ASCII文件file2.txt中,并使用函数定位到文件首部,再使用字符串读函数将刚才写入文件的字符串读入内存中并显示出来。
4.将从键盘上输入的若干个字符送入到磁盘文件file3.txt中,当输入的字符为“*”时停止。
5.从键盘输入10个浮点数,以二进制形式存入文件中,再从文件中读出数据显示在屏幕上。
答案:
1、选择题
(1)D  (2)B  (3)C  (4)B  (5)C  (6)C、D  (7)A  (8)D  (9)D  (10)C  (11)C  (12)A  (13)B

2、填空题
(1) fputc(‘A’,fp);     fputs(“Hello!”,fp);
(2) fscanf(fp,”%d,%d,%d”,&a,&b,&c);
(3) “r”    “w”    “a+”
(4) !feof(f1)     f2       fclose(f1)       fclose(f2)
(5) fopen(fname,”w”)       ch
(6) “r”      (!feof(fp))       fgetc(fp)
(7) CCCCBBBBAAAA 

3、程序填空题
   score.dat      
   i+1          
  “%s”,name       
  scanf(“%d”,&age);  
  scanf(“%f”,&score);   
  “%s,%d,%f”    
  fclose(fp);        
4、程序设计题
(1) /*
源文件名:xiti41.c
功能:读取一个文件的内容并显示出来。
*/
#include<stdio.h>
void main()
{
   FILE *fp;         /*定义一个文件指针*/
char c;
   if((fp=fopen("C:\\boot.ini","rt"))==NULL)
{
printf("file can not open,press any key to exit!\n");
getch(); /*从键盘上任意输入一字符,结束程序*/
exit(1);
}
c=fgetc(fp); /*从文件中逐个读取字符*/
 /*只要读出的字符没有到文件尾就把该字符显示在屏幕上*/
while(c!=EOF)
{
putchar(c);
c=fgetc(fp);
}
printf("\n");
fclose(fp);
}

(2)      /*
源文件名:xiti42.c
功能:读取一个文件的内容并显示出来。
*/
#include<stdio.h>
void main()
{
   FILE *fp;         /*定义一个文件指针*/
char ch;
int i;
   if((fp=fopen("C:\\boot.ini","rt"))==NULL)
{
printf("file can not open,press any key to exit!\n");
getch(); /*从键盘上任意输入一字符,结束程序*/
exit(1);
}
for(i=0;i<10;i++)
{
if(feof(fp))
break; /*如果是文件尾,则退出循环*/
ch=fgetc(fp);
putchar(ch);
}
printf("\n");
fclose(fp);
}

(3)       /*
源文件名:xiti43.c
                  功能:写一行字符到文件中,然后读取文件的内容并显示出来。
*/
#include<stdio.h>
void main()
{
   FILE *fp;                      /*定义一个文件指针*/
char c;
   if((fp=fopen("file2.txt","w+"))==NULL)
{
printf("file can not open,press any key to exit!\n");
getch(); /*从键盘上任意输入一字符,结束程序*/
exit(1);
}
printf("Please input a string:");
c=getchar(); /*从键盘读入一个字符后进入循环*/
while(c!= '\n') /*判断读入的字符不是回车符时进入循环*/
{
fputc(c,fp); /*将字符写入文件之中*/
c=getchar(); /*继续从键盘读入下一个字符*/
}
/*用于把fp所指文件的内部位置指针移到文件头。*/
rewind(fp);
c=fgetc(fp); /*从文件中逐个读取字符*/
/*只要读出的字符没有到文件尾就把该字符显示在屏幕上*/
while(c!=EOF)
{
putchar(c);
c=fgetc(fp);
}
printf("\n");
fclose(fp);
}

(4)      /*
源文件名:xiti44.c
*/
#include<stdio.h>
void main()
{
   FILE *fp;                      /*定义一个文件指针*/
char c;
   if((fp=fopen("file2.txt","w+"))==NULL)
{
printf("file can not open,press any key to exit!\n");
getch(); /*从键盘上任意输入一字符,结束程序*/
exit(1);
}
printf("Please input a string:");
c=getchar(); /*从键盘读入一个字符后进入循环*/
while(c!= '*') /*判断读入的字符不是回车符时进入循环*/
{
fputc(c,fp); /*将字符写入文件之中*/
c=getchar(); /*继续从键盘读入下一个字符*/
}
/*用于把fp所指文件的内部位置指针移到文件头。*/
rewind(fp);
c=fgetc(fp); /*从文件中逐个读取字符*/
/*只要读出的字符没有到文件尾就把该字符显示在屏幕上*/
while(c!=EOF)
{
putchar(c);
c=fgetc(fp);
}
printf("\n");
fclose(fp);
}
(5)  /*
源文件名:xiti45.c
功能:从键盘输入10个浮点数,以二进制形式存入文件中。再从文件中读出数据显示在屏幕上。
*/
#include<stdio.h>
void main()
{
  FILE *fp;         /*定义一个文件指针*/
int i;
double a[10];
   if((fp=fopen("data.txt","wb+"))==NULL)
{
printf("file can not open,press any key to exit!\n");
getch(); /*从键盘上任意输入一字符,结束程序*/
exit(1);
}
for(i=0;i<10;i++)
scanf("%lf",&a[i]);
for(i=0;i<10;i++)
fwrite(a+i,sizeof(double),1,fp);
printf("\n");
rewind(fp);
fread(a,sizeof(double),10,fp);
for(i=0;i<10;i++)
printf("%f\n",a[i]);
printf("\n");
fclose(fp);
}
 

Copyright©2012,All Rights Reserved
版权所有:广东南方职业学院计算机系 设计:陈裕雄