1.选择题
(1)若要打开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")
(2)在C语言程序中,可把整型数以二进制形式存放到文件中的函数是 。
A.fprintf( )函数 B.fread( )函数 C.fwrite( )函数 D.fputc( )函数
(3)系统的标准输入设备是指 。
A.键盘 B.显示器 C.CPU D.硬盘
(4)系统的标准输出设备是指 。
A.键盘 B.显示器 C.CPU D.硬盘
(5)若执行fopen( )函数时发生错误,则函数的返回值是 。
A.空值 B.1 C.0 D.EOF
(6)用fopen( )函数打开一个新的二进制文件,要求既能读也能写,则文件的打开方式应为 。
A."ab+" B."wb+" C."rb+" D."ab"
(7)若以"a+"方式打开一个已经存在的文件,则以下叙述中,正确的是 。
A.文件打开时,原有文件内容不被删除,位置指针移到文件末尾,可进行添加和读操作
B.文件打开时,原有文件内容不被删除,位置指针移到文件开头,可进行重写和读操作
C.文件打开时,原有文件内容被删除,只可进行写操作
D.以上说法均不正确
(8)利用fseek( )函数可实现的操作是 。
A.改变文件的位置指针 B.文件的顺序读写
C.文件的随机读写 D.以上答案均正确
(9)以下叙述中,错误的是 。
A.二进制文件打开后,可以先读文件的末尾,而顺序文件不可以
B.在程序结束时,应用fclose( )函数关闭已打开的文件
C.在利用fread( )函数从二进制文件中读数据时,可以用数组名给数组中的所有元素读入数据
D.不可以用FILE定义指向二进制文件的文件指针
(10)函数调用语句fseek(fp,-10L,SEEK_END)的含义是 。
A.将文件位置指针移到距离文件头10个字节处
B.将文件位置指针从当前位置向后移动10个字节
C.将文件位置指针从文件末尾向前移动10个字节
D.将文件位置指针移到距离当前位置10个字节处
(11)函数rewind( )的作用是 。
A.使文件位置指针移至文件的开头
B.将文件位置指针移至文件中的特定位置
C.使文件位置指针移至文件的末尾
D.使文件位置指针移至下一个字符位置
(12)若fp是指向某文件的指针,且已读到此文件末尾,则库函数feof(fp)的返回值是
。
A.EOF B.0 C.非0值 D.NULL
(13)函数ftell(fp)的作用是 。
A.得到流式文件中的当前位置 B.移动流式文件的位置指针
C.初始化文件的文件位置指针 D.以上答案均正确
(14)以下程序执行后,文件test.txt中的内容是 。
#include <stdio.h>
void fun(char *fname,char *st)
{
FILE *myf;
int i;
myf=fopen(fname,"w");
for(i=0;i<strlen(st);i++)
fputc(st[i],myf);
fclose(myf);
}
main()
{
fun("test","new world");
fun("test","hello,");
}
A.hello B.new worldhello
C.new world D.hello, rld
(15)以下程序的输出结果是 。
#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
(16)以下程序要把从终端输入的字符输出到名为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没有定义
2.填空题
(1)若fp已正确定义为一个文件指针,d1.dat为二进制文件,为实现读操作而打开此文件的语句是fp=fopen( );。
(2)以下C语言程序将磁盘中的一个文件复制到另一个文件中,两个文件名在命令行中已给出。
#include <stdio.h>
main(int argc,char *argv[])
{
FILE *f1,*f2;
char ch;
if(argc< )
{
printf("Parameters missing!\n");
exit(0);
}
if(((f1=fopen(argv[1],"r")) == NULL)||((f2=fopen(argv[2],"w")) == NULL))
{
printf("Can’t open this file!\n");
exit(0);
}
while( )
fputc(fgetc(f1),f2);
fclose(f1);
fclose(f2);
}
(3)设有如下程序:
#include <stdio.h>
void fc(FILE *fp)
{
char c;
while((c=getc(ifp))!='#')
putchar(c-32);
}
main(int argc,char *argv[])
{
FILE *fp;
void fc();
int i=1;
while(--argc>0)
if((fp=fopen(argv[i++],"r"))==NULL)
{
printf("Can’t open this file! \n");
exit(0);
}
else
{
fc(fp);
fclose(fp);
}
}
以上程序经编译、连接后,生成可执行文件,名为cpy.exe。设磁盘上有三个文本文件,其文件名和内容如表11-2所示。
表11-2 文件名与内容表
文件名 |
内容 |
a |
aaaa# |
b |
bbbb# |
c |
cccc# |
如果在DOS系统下输入:
cpy a b c<CR>
则程序输出 。
(4)以下程序用来统计文件中字符的个数。
#include <stdio.h>
main()
{
FILE *fp;
long num=0;
if(( fp=fopen("fname.dat","r"))==NULL)
{
printf( "Can't open this file! \n");
exit(0);
}
while
{
fgetc(fp);
num++;
}
printf("num=%d\n",num);
fclose(fp);
}
(5)以下程序将从输入设备读入的文本(用@作为文本结束标志)复制到一个名为bi.dat的新文件中。
#include <stdio.h>
FILE *fp;
main()
{
char ch;
if((fp=fopen( ))==NULL)
exit(0);
while ((ch=getchar())!='@')
fputc(ch,fp);
;
}
(6)以下程序的功能是:从键盘上输入一个字符串,将该字符串中的小写字母转换为大写字母,输出到文件test.txt中,然后从该文件读出字符串并显示。
#include <stdio.h>
main()
{
FILE *fp;
char str[100];
int i=0;
if((fp=fopen("text.txt", ))==NULL)
{
printf("Can't open this file.\n");
exit(0);
}
printf("Input a string:\n"); gets(str);
while (str[i])
{
if(str[i]>='a'&&str[i]<='z')
str[i]= ;
fputc(str[i],fp);
}
fclose(fp);
fp=fopen("test.txt", );
fgetc(str,100,fp);
printf("%s\n",str);
fclose(fp);
}
(7)以下程序将从输入设备读入的10个整数,以二进制方式写到一个名为bi.dat的新文件中。
#include <stdio.h>
FILE *fp;
main()
{
int i,j;
if((fp=fopen( ,"wb"))==NULL)
exit(0);
for(i=0;i<10;i++)
{
scanf("%d",&j);
fwrite(&j,sizeof(int),1, );
}
fclose(fp);
}
(8)在以下程序中,用户从键盘输入一个文件名,然后输入一串字符(用“#”结束输入),存放到此文件中形成文本文件,并将字符的个数写到文件尾部。
#include <stdio.h>
main()
{
FILE *fp;
char ch,fname[32];
int count=0;
printf("Input the filename :");
scanf("%s",fname);
if((fp=fopen( ,"w+"))==NULL)
{
printf("Can't open this file: %s \n",fname);
exit(0);
}
printf("Enter a data:\n");
while((ch=getchar())!='#')
{
fputc(ch,fp);
count++;
}
fprintf( ,"\n%d\n",count);
fclose(fp);
}
(9)以下程序用来统计文件中字符的个数。
#include <stdio.h>
main()
{
FILE *fp;
long num=0L;
if((fp=fopen("fname.dat","r"))==NULL)
{
pirntf("Open error\n");
exit(0);
}
while( )
{
fgetc(fp);
num++;
}
printf("num=%1d\n",num-1);
fclose(fp);
}
(10)以下程序的功能是:打开文件后,先利用fseek()函数将文件位置指针定位在文件末尾,然后调用ftell( )函数返回当前文件位置指针的具体位置,从而确定文件长度。
#include <stdio.h>
main()
{
FILE *myf;
long f1;
myf= ("test.txt","rb");
fseek(myf,0L, );
f1=ftel(myf);
fclose(myf);
printf("%d\n",f1);
}
3.上机操作题
(1)编写一个程序,实现从键盘上输入一个字符串,将其中的所有字母改成小写字母后,输出到文件file.dat中。
(2)编写一个程序,实现将两个文件file1.txt和file2.txt合并成一个文件res.txt。
(3)编写一个程序,实现将一个文本文件的内容输出到计算机屏幕上。
(4)编写一个程序,实现有10条学生信息,每条学生信息由学号和成绩组成。将10条学生信息保存到一个文件中。