C语言二级考试——文件操作
只要求缓冲文件系统(即高级磁盘I/O系统),对非标准缓冲文件系统(即低级磁盘I/O系统)不要求
- 文件类型指针(FILE类型指针)
- 文件的打开与关闭(fopen,fclose)
- 文件的读写(fputc,fgetc,fputs,fgets,fread,fwrite,fprintf,fscanf函数的应用),文件的定位(rewind,fseek函数的应用)
知识点参考【C语言】文件操作-CSDN博客
文件类型指针
第十九套40题
本题考查文件类型。选C
第二十套15题
本题考查C语言文件的概念。
C语言的源代码是文本文件。
文件的打开与关闭
第一套21题
本题考查EOF的作用。
EOF只作为文本文件的标志,但是文件必须是文本文件。EOF的值为-1.选B
第一套22题
本题考查对fopen函数的理解。
C库函数
FILE*fopen(const char* filename,const char* mode);
函数运行成功时,返回指向新文件流的指针,赋给文件指针变量,从而与文件联系起来,即把程序中要读写的文件与磁盘上实际的数据文件联系起来。失败时,返回空指针NULL。选A
文件的读写
第一套15题
#include <stdio.h>
int main ()
{
FILE* fp;
int i,a[6]={1,2,3,4,5,6} ,k;
fp=fopen("data.dat","w+");
/*首先建立一个新文件,进行写操作,随后可以从头开始读,
如果指定的文件已存在,则原有的内容将全部消失*/
for(i=0;i<6;i++){//遍历数组a[i]
fseek(fp,0L,0);//为给出的流位置设置数据,从文件的0位置偏移0L处开始
fprintf(fp,"%d\n",a[i]);//当i=0时向文件写入a[i=o],即k=1
}
//注意:每次循环写入会覆盖原文件中的内容
rewind(fp);//使文件的位置指针回到文件的开头
fscanf(fp,"%d",&k);//将最后的k值输入文件
fclose(fp);
printf("%d\n",k);
}
//输出:6
第一套23题
本题考查文件输出函数。选C
第八套40题
本题考查文件处理函数。
本题中第一次调用fwrite函数是向文件中写入s2的值“Beijing”,第二次调用fwrite函数是向文件中写入s1的值“China”,并将先前的“Beijing”的前几个字符覆盖,得到“Chinang”。选B
#include <stdio.h>
int main ()
{
FILE* fp;
char* s1='China',*s2="Beijing";
fopen("abc.dat","wb+");
fwrite(s2,7,1,pf);
/*对fp所指向的文件存入1次,每次存放一个大小为7字节的数据块,
将存入的数据块存到s2指向的内存区,如果s2内存区有数据,则将其覆盖。*/
rewind(pf);//文件位置指针回到文件开头
fwrite(s1,5,1,pf);
fclose(pf);
}
第十套33题
定义一个FILE类型结构体指针fp,以“只写”方式打开一个test.txt文件,第一次向文件输入指针变量s1指向的7个字符,则此时文件内的内容为“Fotran”,执行fseek函数文件位置指针移动到文件的开头,第二次向文件输入指针变量s2指向的5个字符。
易错:虽然此时的文件前5个字符已被“Fortr”所占用,但向文件输入“Basic”这5个字符时,系统会覆盖原有的内容“Forta",所以最后test.txt里的内容为:Basican。
第九套40题
#include <stdio.h>
int main ()
{
FILE* fp;
char str[10];
fp=fopen("myfile.dat","w");//打开文件进行写操作
/*如果文件不存在,则建立一个新文件,如果文件存在,文件中原有的内容全部消失*/
fputs("abc",fp);//把字符串"abc"输出到文件fp中
fclose(fp);
fp=fopen("myfile.dat","a+");//打开原来的文件不删除
fprintf(fp,"%d",28);//在原来的文件尾部添加新内容
rewind(fp);//使文件的位置指针重新返回到文件的开头
fscanf(fp,"%s",str);//从文件fp中按字符串格式输入到str中
puts(str);
fclose(fp);
}
//输出:abc28
考查文件的读写。
注意:
w
打开文件时:如果文件不存在,则建立一个新文件,如果文件存在,文件中原有的内容全部消失。a+
打开文件时:表示原来的文件不删除,在文件尾部添加新的内容。在该题中“w”只读,但是第二次打开文件的方式是“a+”,第一次输出到文件中的数据会保留,并同时和第二次的文件操作一起输出。
第十二套28题
r
只读出,w
只写入(存储)。- fwrite()函数和fread()函数一次只能把一个数据写入或读出文件,当要读出多个数据放到不同的变量中取得时候,就要重复调用函数;而fprintf()函数和fscanf()函数则可以对不同的变量通过固定的格式写入或读出文件。选B
第十二套31题
32题
a
为在文件后面添加数据而打开文本文件。这时如果指定的文件不存在,系统将用在fopen调用中指定的文件名建立一个新文件;如果指定的文件已存在,则文件中原有的内容将保存,新的数据写在原有内容之后。
a+
功能与a
相同,只是在文件尾部添加新的数据之后,可以从头开始读。
第十三套14题
w
为写而打开文本。如果指定的文件不存在,系统将用在fopen调用中指定的文件名建立一个新文件;如果指定的文件已存在,则将从文件的起始位置开始写,文件中原有的内容将全部消失。选C
第十七套39题
- C语言中,有两种对文件的存取方式:顺序存取和直接存取
- 在对文件进行操作后关闭文件是为了防止文件缓冲区中的剩余数据的丢失
40题
易错项:C
注意:数组ch包含:a,b,c,d,'\0’五个元素(‘\0’为系统自加的),执行fseek函数,文件类型指针fp从文件尾向前移动2个字符,即指针指向“c”,选B
第十八套37题
- 由于原文件不存在,本题以
w
打开的方式直接新建了文件d1.dat- 然后通过for循环将数据a中的数据写到文件指针fp所指向的d1.dat文件中。
- 接下来通过fscanf(fp,“%d”,&n);将fp指向的文件中的数据送给变量n,最终通过fprintf输出变量的值为123.选B