习题8
一 单选题
1.系统的标准输出文件是【 】。
A.硬盘 B.软盘 C.显示器 D.光盘 【答案】C
【解析】系统的标准文件是指特定的设备文件—显示器和键盘。
2.在打开文件时,函数参数中表示处理方式的字符串”wb”的含义是【 】。
A.打开一个已存在的文本文件,只能读取数据 B.打开一个文本文件,只能写入数据
C.打开一个已存在的二进制文件,只能读取数据 D.打开一个二进制文件,只能写入数据 【答案】D
3.fputc函数的功能是向指定文件写入一个字符,并且文件的打开方式必须是【 】才可运用它。 A.只写 B.追加 C.可读写 D.A、B、C均正确 【答案】D
4.若定义了FILE *fp;char ch;且成功地打开了文件,欲将ch 变量中的字符写入文件,则正确的函数调用语句是【 】。 A.fputc(fp,ch); B.putc(ch,fp); C.fputc(ch); C.putchar(ch,fp); 【答案】B
5.有如下定义,用于存放学生数据:
struct student
{char name[20];float score;}st[30]; FILE *fp;
欲将学生数据写入名为stu.dat的二进制文件时,应采用【 】形式打开文件。 A.fp=open(\ B. fp=open(\,\C. fp=open(\ D. fp=open(\ 【答案】D
6.若要打开A盘根目录下名为fdata.dat的文本文件进行读写操作,应调用【 】。
A.fopen(“A:\\fdata.dat”,”w”) B.fopen(“A:\\fdata.dat”,”r”) C.fopen(“A:\\fdata.dat”,”r+”) D.fopen(“A:\\fdata.dat”,”wr”) 【答案】C
7.有如下定义,用于存放学生数据:
struct student
{char name[20];float score;}st[30]; FILE *fp;
设以写方式打开二进制文件后,欲将st数组中30位学生数据写入文件,以下不能实现此功能的语句是【 】。 A.for(i=0;i<30;i++)
fwrite(&st[i],sizeof(struct student),1,fp); B.for(i=0;i<30;i++)
fwrite(st+i,sizeof(struct student),1,fp);
C.fwrite(st,sizeof(struct student),30,fp); D.for(i=0;i<30;i++)
fwrite(st[i],sizeof(struct student),1,fp);
【答案】D
【解析】选项C是用fwrite函数一次写入30个学生数据,其中4个参数的使用均正确。选项A、B、D都是通过for循环一个一个写入学生数据,但在fwrite函数的使用中,选项D的第一个参数写错了,应该是指针类型,即存放数据的首地址。
8.若fp是指向某文件的指针,且读取文件时已读到文件末尾,则库函数feof(fp)的返回值是【 】。
A.EOF B.0 C.非零值 D.NULL 【答案】C
9.rewind函数的功能是【 】。
A.将读写位置指针返回到文件开头 B.将读写位置指针指向文件尾部 C.将读写位置指针移向指定位置 D.读写位置指针指向下一个字符 【答案】A
10.函数调用语句fseek(fp,-10L,2);的含义是【 】。
A.将读写位置指针从文件末尾处向文件开始处移动10个字节 B.将读写位置指针从文件开始处向文件末尾处移动10个字节 C.将读写位置指针从当前位置向文件开始处移动10个字节 D.将读写位置指针从当前位置向文件末尾处移动10个字节 【答案】A 二 填空题
1.C语言对文本文件的存取是以 为单位进行的。 【答案】字节(或字符)
2.将整数-618存到磁盘文件中,以ASCII值形式存储和以二进制形式占用的字节数分别是 【1】 和 【2】 。 【答案】【1】4 【2】4
3.欲将一个字符写入文本文件,可以使用 【1】 、 【2】 或 【3】 函数。 【答案】【1】fputc 【2】putc 【3】fprintf
4.C语言中,在存放单精度实型数据的二进制文件中读取数据,应使用 函数。 【答案】fread
5.feof(fp)函数用来判断文件是否结束,如果遇到文件结束,函数值为 【1】 ,否则为 【 【2】 。
【答案】【1】非0值 【2】0
6.设有如下定义,要求从存放结构体类型数据的二进制文件中读取5个结构体数据送入s数组,请写出调用fread函数形式:fread(s, 【1】 , 【2】 ,fp);
struct st {int a; float b; }s[5];
【答案】sizeof(struct st)或8 【2】5
7.下面程序是先从键盘输入一个文件名,再把键盘输入的字符存入该文件中,并用’*’作为输
入结束标志。填空将程序补充完整。
#include \#include \void main() {FILE *fp;
char fname[40],c;
printf(\ gets(fname);
if((fp= 【1】 )==NULL) {printf(\ printf(\
while((c=getchar())!='*') fputc( 【2】 ,fp); fclose(fp); }
【答案】fopen(fname,”w”) 【2】c
8.下面程序是将文件file1.c的内容输出到屏幕上并复制到文件file2.c中。填空将程序补充完整。
#include \void main()
{FILE 【1】 ; fp1=fopen(\ fp2=fopen(\
while(!feof(fp1)) putchar(getc(fp1)); 【2】
while(!feop(fp1)) putc( 【3】 ); fclose(fp1); fclose(fp2); } 【答案】【1】*fp1,*fp2 【2】rewind(fp1); 【3】getc(fp1),fp2 9.下面程序是对二进制整型文件追加5个整数。填空将程序补充完整。
#include \#include \void main() {FILE *fp;
char fname[40];
int x[5]={5,10,15,20,25}; gets(fname);
if((fp=fopen( 【1】 ))==NULL) exit(0); fwrite( 【2】 ,sizeof(int),5,fp); 【3】 ; } 【答案】【1】fname,”ab” 【2】x 【3】fclose(fp)
10.下面程序是从一个二进制文件中读取结构体数据,并将结构体数据显示在屏幕上。填空
将程序补充完整。
#include \struct st
{char name[20]; float score; }stu;
void main() {FILE *fp;
fp=fopen(\ 【1】 ); fread( 【2】 ,1,fp); while(!feof(fp)) {printf(\ fread( 【3】 ,1,fp); }
fclose(fp); } 【答案】【1】”rb” 【2】&stu 【3】&stu 三 阅读程序,写出结果
1.设文件file1.dat的内容为COMPUTER。
#include \#include \void main()
{FILE *fp;char ch;
if((fp=fopen(\ ch=fgetc(fp); while(!feof(fp))
{if(ch>='A'&&ch<='Z') fputc(ch+32,stdout); ch=fgetc(fp); } }
【答案】computer
【解析】此程序从file1.dat文件中读取一个字符后,即判断其是否为大写字母,是则输出为小写字母(大小写字母的ASCII值相差32)。stdout为标准输出文件(显示器)的文件指针。 2. #include \
#include \
void fout(char *fname,char *str) {FILE *fp;
fp=fopen(fname,\ fputs(str,fp); fclose(fp); }
void main()
{FILE *fp;char ch;
fout(\

