12.5 综合自测
一、选择题
1.C语言中系统的标准输出文件是指( )。
A.显示器 B.键盘 C.软盘 D.硬盘
2.若fp是指向某文件的指针,且未读到文件的末尾,则表达式feof(fp)的返回值是( )。
A.EOF B.1 C.0 D.非零值
3.已知一个文件中存放了若干学生的档案记录,其数据结构如下:
struct st
{ char num[10];
int age;
float score [5];
};
定义一个数组:structsta[10];
假定文件已正确打开,不能正确地从文件中读入10名学生数据到数组中的是( )。
A.fread(a,sizeof(structst),10,fp);
B.for(i=0;i<10;i++)fread(a[i],sizeof(structst),1,fp);
C.for(i=0;i<10;i++)fread(a+i,sizeof(structst),1,fp);
D.for(i=0;i<10;i+=2)fread(a+i,sizeof(structst),2,fp);
4.如果需要打开一个已经存在的非空文件“FILE”并向文件尾添加数据,正确的打开语句是( )。
A.fp=fopen("FILE", "r"); B.fp=fopen("FILE", "r+");
C.fp=fopen("FILE", "w+"); D.fp=fopen("FILE","a+");
5.若以下程序所生成的可执行文件名为filel.exe,当输入以下命令执行该程序时:
FILEL CHINA BEIJING SHANGHAI
程序的输出结果是( )。
main(int argc,char *argv[])
{ while(argc-->0)
++argv;printf("% s ",*argv);
}
A.CHINABEIJINGSHANGHAI B.FILELCHINABEIJING
C.CBS D.FCB
6.在高级语言中,对文件操作的一般步骤是( )。
A.打开文件->操作文件->关闭文件 B.操作文件->修改文件->关闭文件
C.读写文件->打开文件->关闭文件 D.读文件->写文件->关闭文件
7.C语言可以处理的文件类型是( )。
A.文本文件和数据文件 B.文本文件和二进制文件
C.数据文件和二进制文件 D.以上答案都不完全
8.以下叙述中,错误的是( )。
A.二进制文件打开后可以先读文件的末尾,而顺序文件不可以
B.在程序结束时,应当用函数fclose()关闭已打开的文件
C.在利用函数fread()从二进制文件中读数据时,可以用数组名给数组中所有元素读入数据
D.不可以用FILE定义指向二进制文件的文件指针
9.函数调用语句fseek(fp,10L,2);的含义是( )。
A.将文件位置指针移动到距离文件头10个字节处
B.将文件位置指针从当前位置向文件尾方向移动10个字节
C.将文件位置指针从当前位置向文件头方向移动10个字节
D.将文件位置指针从文件末尾处向文件头方向移动10个字节
10.若要用fopen()函数打开一个新的二进制文件,该文件要既能读也能写,则打开方式是( )。
A."ab+" B."wb+" C."rb+" D."ab"
11.有以下程序(提示:程序中“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
12.若要以"a+"方式打开一个已存在的文件,则以下叙述正确的是( )。
A.文件打开时,原有文件内容不被删除,位置指针移动到文件末尾,可做添加和读操作
B.文件打开时,原有文件内容不被删除,位置指针移动到文件开头,可做重写和读操作
C.文件打开时,原有文件内容被删除,只可做写操作
D.以上各种说法都不正确
13.fscanf()函数的正确调用形式是( )。
A.fscanf(文件指针,格式字符串,输出列表);
B.fscanf(格式字符串,输出列表,文件指针);
C.fscanf(格式字符串,文件指针,输出列表);
D.fscanf(文件指针,格式字符串,输入列表);
14.函数ftell(fp)的作用是( )。
A.得到流式文件中的当前位置 B.移动流式文件的位置指针
C.初始化流式文件的位置指针 D.以上答案均正确
15.fgetc()函数的作用是从指定文件读入一个字符,该文件的打开方式必须是( )。
A.只写 B.追加
C.读或读写 D.选项B和选项C都正确
16.在执行fopen()函数时,ferror()函数的初值是( )。
A.TURE B.-1 C.1 D.0
二、操作题
下列给定程序的功能是调用fun()函数建立班级通信录。通信录中记录每位学生的编号、姓名和电话号码。班级人数和学生信息从键盘读入,每个人的信息作为一个数据块写到名为myfile5.dat的二进制文件中。请在标号处填入正确的内容,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构。
试题程序
#include <stdio.h>
#define N 5
typedef struct
{ int num;
char name[10];
char tel[10];
}STYPE;
void check();
/*****found*****/
int fun(【1】*std)
{ /*****found*****/
【2】*fp;int i;
if((fp=fopen("myfile5.dat","wb"))==NULL)return(0);
printf("\nOutput data to file!\n");
for(i=0;i<N;i++)
/*****found*****/
fwrite(&std[i],sizeof(STYPE),1,【3】);
fclose(fp);
return(1);
}
main()
{STYPE s[10] =
{ {1,"aaaaa","111111"},{1,"bbbbb","222222"},{1," ccccc","333333"},{1,"ddddd "," 444444 "}, { 1," eeeee ","555555"}};int k = fun(s);
if(k==1)
{ printf("Succeed!");check();}
else printf("Fail!");
}
void check()
{ FILE *fp;int i;
STYPE s[10];
if((fp=fopen("myfile5.dat","rb"))==NULL)
{printf("Fail!!\n");exit(0);}
printf(" \nRead file and output to screen:\n");
printf("\n numnametel\n");
for(i=0;i<N;i++)
{ fread(&s[i],sizeof(STYPE),1,fp);
printf("% 6d% s% s\n",s[i].num,s [i].name,s[i].tel);
}
fclose(fp);
}