《模块10文件电子课件 C语言程序设计案例教程.pptx》由会员分享,可在线阅读,更多相关《模块10文件电子课件 C语言程序设计案例教程.pptx(65页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C语言程序设计案例教程作者:模块 10 文件假设学生成绩表如表7-1所示。编写一个C程序,以结构体数组类型存储表71中学生的信息。(1)编写input函数,循环输入并计算每位学生所有课程的总分成绩,将结果保存在“d:student.dat”文件中。(2)编写sort函数,从“d:student.dat”读取数据,按照总分成绩由大到小排序,将排序结果保存到“d:stuSort.dat”文件中。(3)编写search函数,在student.dat文件或stuSort.da文件中查找某位学生的成绩。(4)编写主函数,设计菜单,根据用户需要调用相关的函数实现。尝试从实用的角度设计一个相对完美的成绩管理
2、系统。任务描述模块 10文件(1)能够用结构体数据类型表述客观事物。(2)能够熟练运用结构体数组。(3)能够熟练创建文本文件和二进制文件。(4)能够熟练读取文本文件和二进制文件的数据,并进行相关的处理。(5)培养实际应用程序的编码能力。任务目标模块 10文件#include#include#define N 3#define M 6typedef struct studentchar name12;float scoreM,sum;ST;void input()源代码展示模块 10文件int i,j;float total;ST sN;FILE*fp;for(i=0;iN;i+)total=0
3、;printf(请输入第%d位同学的姓名:,i+1);scanf(%s,si.name);源代码展示模块 10文件printf(请输入该同学%d门课成绩:,M);for(j=0;jM;j+)scanf(%f,&si.scorej);total+=si.scorej;si.sum=total;if(fp=fopen(d:student.dat,wb)=NULL)源代码展示模块 10文件printf(file can not openn);exit(1);fwrite(s,sizeof(ST),N,fp);fclose(fp);void sort()int i,j,k;ST sN,t;FILE*f
4、p;源代码展示模块 10文件if(fp=fopen(d:student.dat,rb)=NULL)printf(file can not openn);exit(1);fread(s,sizeof(ST),N,fp);for(i=0;iN;i+)k=i;for(j=i+1;jsk.sum)k=j;源代码展示模块 10文件if(i!=k)t=si;si=sk;sk=t;if(fp=fopen(d:stuSort.dat,wb)=NULL)printf(file can not openn);exit(1);fwrite(s,sizeof(ST),N,fp);源代码展示模块 10文件fclose(
5、fp);void search()int i,j;ST sN;char n12;FILE*fp;if(fp=fopen(d:student.dat,rb)=NULL)源代码展示模块 10文件printf(file can not openn);exit(1);fread(s,sizeof(ST),N,fp);printf(n请输入要查找的姓名:);scanf(%s,n);for(i=0;iN;i+)if(strcmp(si.name,n)=0)printf(n姓名数学语文英语物理化学生物总分);源代码展示模块 10文件printf(n%s,si.name);for(j=0;j=N)printf
6、(“查无此人n”);main()源代码展示模块 10文件int k;while(1)system(cls);printf(nnn);printf(ttt简易学生成绩管理系统n);printf(ttt*n);printf(ttt1.录入数据n,N);printf(ttt2.成绩排序n);源代码展示模块 10文件printf(ttt3.成绩查询n);printf(ttt4.退出n);printf(ttt请输入您的选择(1-4):);scanf(%d,&k);printf(n);switch(k)case 1:input();break;case 2:sort();break;case 3:sear
7、ch();break;源代码展示模块 10文件case 4:return 0;getch();程序运行结果如图10-1、图10-2所示。源代码展示运行结果模块 10文件函数input将一组学生信息输入并计算总分,然后将数据用fwrite函数写到文件“d:student.dat”中;函数sort先从“d:student.dat”文件中用fread函数读出数据,然后按总分排序,并将排序结果保存到“d:stuSort.dat”中;函数search从student.dat读取数据,比较查询数据;主函数根据选择进行录入、排序及查询操作。录入和排序只要执行一次信息就保存在文件中,所以以后可以随时查询访问,
8、当然再一次录入的话,将更新数据。程序设计一定要理清设计的思路,然后把每个模块详细实现即可。到目前为止,为程序提供数据的方式有两种:一是使用赋值语句,二是根据实际需要从键盘输入,程序的运行结果也只能在显示器上显示。程序分析模块 10文件但对于实用的管理信息系统来说,它面对的数据信息十分庞大,仅依赖于键盘的输入和显示输出是完全不够的。大部分情况下,原始数据、中间处理数据以及结果数据都需要存档以备查阅与重复利用。通常情况下,解决问题的办法是将数据以文件的形式记录在某些介质上,利用这些介质的存储特性,可以使程序和数据分离,增加程序复用性,也可以长久保存数据。本模块将学习文件的概念、文件的读/写等操作。
9、程序分析10.1 文 件 概 述文件是程序设计中一个重要的概念,是一组相关数据的集合。如今大都把文件存储在磁盘上,因此也称为磁盘文件。操作系统是以文件为单位对数据进行管理的。为了区分不同的文件,每个文件都有一个文件名。文件的存取是按文件名进行的,当要读取文件中的数据时,必须先指出文件名及其位置,再按文件位置找到文件,然后才能读取其中的数据。当需要将一批数据保存起来时,也必须先确定保存的位置及文件名,然后才能向它输出数据。10.1.1 文件的概念文件通常是指存储在外部存储介质上的数据的集合。在C语言程序设计中,按文件的内容可以将其分为两类:程序文件和数据文件。存储程序代码的文件称为程序文件,存储
10、数据的文件称为数据文件。1.文件的读和写在程序中,当调用输入函数从外部文件中输入数据赋给程序中的变量时,这种操作称为“输入”或“读”;当调用输出函数把程序中变量的值输出到外部文件中时,这种操作称为“输出”或“写”。2.流式文件“流”可以解释为流动的数据及其来源和去向,并将文件看成承载数据流动所产生的结果的媒介。而对文件的读写就看成是在“文件流”中取出或存入数据。在C语言中,对于输入和输出的数据都按“数据流”的形式进行10.1.1 文件的概念处理。3.文本文件和二进制文件文本文件也称为ASCII文件,是一种字符流文件。当输出时,数据转换成一串字符,每个字符以字符的ASCII码存储到文件中,一个字
11、符占一字节。文本文件的结束标志在头文件stdio.h中定义为EOF(值为-1),可对其进行检测。文本文件的优点是可以用各种文本编辑器直接阅读,但文本文件占用存储空间较多,计算机进行数据处理时需要转换为二进制形式,程序效率比较低。二进制文件是把内存中的数据按其在内存中的存储形式存放到磁盘上,是一种二进制流文件。二进制文件占用存储空间少,数据可以不必转换直接在程序中使用,程序执行效率高。10.1.1 文件的概念文本文件和二进制文件不是用后缀来确定的,而是以内容来确定的,但是文件后缀往往隐含其类别,如*.txt代表文本文件,*.doc,*.bmp,*.exe一般是二进制文件。4.顺序存取文件和随机存
12、取文件顺序存取文件的特点是,每当打开此类文件进行读写操作时,总是从文件的开头开始,从头到尾顺序地读或写。直接存取文件又称为随机存取文件,其特点是,可以通过调用C语言的库函数指定开始读或写的字节号,然后直接对此位置上的数据进行读,或把数据写到此位置上。5.缓冲区文件ANSI标准规定,在对文件进行输入或输出时,系统将为输入或输出文件10.1.1 文件的概念开辟缓冲区。缓冲区是系统在内存中为各文件开辟的一片存储区。当对某个文件进行输出时,系统首先把输出的数据填入为该文件开辟的缓冲区内,当缓冲区被填满时,就把缓冲区的内容一次性地输出到对应文件中;当从某个文件输入数据时,将从输入文件中输入一批数据放入该
13、文件的缓冲区中,输入数据将从缓冲区中依次读取数据,当该缓冲区中的数据被读完时,将再从输入文件中输入一批数据放入。这种方式使得读、写操作不必频繁地访问外设,从而提高了读、写操作速度。10.1.2 文件指针在缓冲文件系统中,关键的概念是文件指针,每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息(如文件的名字、文件状态和文件当前位置等)。文件指针实际上是指向一个结构体类型的指针。在头文件stdio.h中,通过typedef把此结构体定义名为FILE,用于存放文件当前的有关信息。程序使用一个文件,系统就为此文件开辟一个FILE类型变量。程序使用几个文件,系统就开辟几个FILE类型变量,存放
14、各个文件的相关信息。通常对FILE结构体的访问是通过FILE类型指针变量(文件指针)完成的,文件指针变量指向文件类型变量,简单地说,文件指针指向文件。定义文件指针变量的一般形式如下。FILE*指针变量名;例如:10.1.2 文件指针FILE*fp1,*fp2;事实上只需要使用文件指针完成文件的操作,根本不必关心文件类型变量的内容。在打开一个文件后,系统开辟一个文件变量并返回此文件的文件指针,将此文件指针保存在一个文件指针变量中,以后所有对文件的操作都通过此文件指针变量完成,直到关闭文件,文件指针指向的文件类型变量释放。10.2 文件的基本操作在C语言中,对文件的基本操作包括文件的建立、文件的打
15、开与关闭、文件的读和写等。由于输入/输出函数的信息包含在头文件中,因此在使用输入/输出函数时,首先要在程序的开头包含头文件。10.2.1 文件的打开和关闭1.文件的打开文件打开后才能进行操作,文件打开通过调用fopen函数实现。调用fopen函数的格式如下。FILE*fp;fp=fopen(文件名,文件操作方式);例如:FILE*fp;fp=fopen(d:a1.txt,r);表示要打开d:a1.txt文件,使用文件方式为“读入”,fopen函数带回指向a1文件的指针并赋给fp,这样fp就和a1相联系了,或者说fp指向a1文件。文件操作方式说明如下。10.2.1 文件的打开和关闭(1)r方式,
16、为读打开文本文件。只能从文件读数据而不能向文件写入数据。该方式要求欲打开的文件已经存在。(2)rb方式,为读打开二进制文件。其余功能与r同。(3)w方式,为写而打开文本文件。只能向文件写入数据而不能从文件读数据。如果文件不存在则创建文件,如果文件存在则原文件被删除,重新创建文件(覆盖原文件)。(4)wb方式,为写打开二进制文件,可以在指定位置进行写操作,其余功能与w同。(5)a方式,为在文件后面添加数据而打开文本文件。如果指定文件不存在,系统将用在fopen调用中指定的文件名建立一个新文件;如果指定文件已存在,则文件中原有的内容将保存,新的数据写在原有内容之后。10.2.1 文件的打开和关闭(
17、6)ab方式,为在文件后面添加数据而打开二进制文件。其余功能与a同。(7)r+方式,为读/写而打开文本文件。用这种方式时,指定的文件应当已经存在,既可以对该文件进行读,也可对该文件进行写。只是对于文本文件来说,读和写总是从文件的起始位置开始。在写新的数据时,只覆盖新数据所占的空间,其后的原数据并不丢失。(8)rb+方式,为读/写而打开二进制文件。功能与r+同,只是在读和写时,可以由位置函数设置读和写的起始位置,即不一定从文件的起始位置开始读和写。(9)w+方式,以读/写方式打开一个文本文件。如果文件不存在,则建立新文件,这时应该先向文件写入数据,然后才可以读出数据。如果文件10.2.1 文件的
18、打开和关闭已经存在,新写入的数据将取代原有的内容。(10)wb+方式,功能与w+相同,只是在随后的读和写时,可以由位置函数设置读和写的起始位置。(11)a+方式,功能与a相同,只是在文件尾部添加新的数据后,可以从头开始读。(12)ab+方式,功能与a+相同,只是在文件尾部添加新的数据后,可以由位置函数设置开始新的起始位置。无论哪种文件操作方式,函数都返回一个FILE类型的指针。如果文件打开正确,fopen函数的返回值就是文件在内存中的起始地址,若将该地址赋给文件指针fp,就在打开文件和文件指针fp之间建立起了联系,此后对文件的操作就可以通过文件指针进行,而不再使用文件名。如果文件没有被成功10
19、.2.1 文件的打开和关闭打开,那么函数将返回NULL。为确保文件操作的正常进行,有必要在程序中检测文件是否正常打开。常用下面的程序段来打开一个文件,并检查是否打开成功。FILE*fp;if(fp=fopen(“d:usertext1.txt”,”r”)=NULL)printf(file can not open!n);exit(1);该程序段调用了fopen函数,以只读的方式打开文件d:usertest1.txt。打开后,其返回值赋给fp。如果打开失败,则输出信息file can not open!,10.2.1 文件的打开和关闭然后调用函数exit,终止程序运行。exit函数也定义在头文件
20、中。如果打开成功,fp就指向该文件,就可以通过fp对文件进行相应的操作。打开文件后,文件内部指针指向文件中的第1个数据,当读取了它所指向的数据后,指针会自动指向下一个数据。当向文件写入数据时,写完后指针也是自动指向下一个要写入数据的位置。2.文件的关闭文件使用完毕后必须关闭,养成在程序终止前关闭所有文件的习惯,以避免数据丢失。关闭文件可调用函数fclose来实现。fclose函数的格式如下。fclose(文件指针);例如:fclose(fp);当文件成功关闭时,函数返回0,否则返回非0。10.2.2 字符读/写函数1.写字符函数fputc写字符函数fputc实现向指定的文本文件写入一个字符的操
21、作。调用写字符函数fputc的格式如下。fputc(要输出的字符,文件指针);其中,“要输出的字符”就是要往文件上写入的字符,它可以是一个字符常量,也可以是字符变量。“文件指针”是接收字符的文件。若输出成功函数返回输出的字符,输出失败返回EOF(-1)。每次写入一个字符,文件位置指针自动指向下一字节。【例10-1】从键盘输入一个字符串,将其保存到“d:shixuntext1.txt”中。程序代码如下。10.2.2 字符读/写函数#include#include main()FILE*fp;int k;char str81;gets(str);if(fp=fopen(d:shixuntext1.
22、txt,w)=NULL)printf(file can not open!n);10.2.2 字符读/写函数exit(1);for(k=0;strk!=0;k+)fputc(strk,fp);fclose(fp);2.读字符函数fgetc读字符函数fgetc用于从指定的文本文件中读取一个字符。调用fgetc函数的格式如下。fgetc(文件指针);函数返回值为输入的字符,若遇到文件结束或出错,则返回EOF(-1)。10.2.2 字符读/写函数关于读字符函数说明如下。(1)每次读入一个字符,文件位置指针自动指向下一字节。(2)文本文件的内部全部是ASCII字符,其值不可能是EOF(-1),所以可以
23、使用EOF(-1)确定文件结束;但是对于二进制文件不能这样做,因为可能在文件中间某字节的值恰好等于-1,如果此时使用-1判断文件结束是不恰当的。为了解决这个问题,ANSI C提供了feof(fp)函数判断文件是否真正结束。【例10-2】将【例101】保存到text1.txt中的内容读出并显示。程序代码如下。#include#include 10.2.2 字符读/写函数main()FILE*fp;char ch;if(fp=fopen(d:shixuntext1.txt,r)=NULL)printf(file can not open!n);exit(1);while(!feof(fp)10.2
24、.2 字符读/写函数ch=fgetc(fp);putchar(ch);fclose(fp);10.2.3 数据块读/写函数fgetc函数和fputc函数可以用来读/写文件中的一个字符,但是常常要求一次读入一组数据,如从文件(特别是二进制文件)读/写一块数据(如数组中的元素或结构体变量的数据等),这时使用数据块读/写函数非常方便。调用数据块读/写函数的语法格式分别如下。int fread(void*buffer,int size,int count,FILE*fp);int fwrite(void*buffer,int size,int count,FILE*fp);其中:(1)buffer是指
25、针,对fread是用于存放读入数据的首地址,对fwrite是要输出数据的首地址。(2)size是一个数据块的字节数(每块大小),count是要读写的数据块块数。10.2.3 数据块读/写函数(3)fp是文件指针。(4)fread、fwrite返回读取/写入的数据块块数(正常情况=count)。(5)以数据块方式读写,文件通常以二进制方式打开。例如,如果有一个如下定义的结构体类型。struct student char num10;char name20;char sex;float score;char addr30;stud40;10.2.3 数据块读/写函数结构体数组stud有40个元素,
26、每个元素存放一个学生的信息。假设学生的数据已经存放在磁盘文件中,可以用以下fread函数读入40个学生的数据。fread(stud,sizeof(struct student),40,fp);【例10-3】把数组中的10个数据写入二进制文件“d:shixuntext3.dat”中,然后读出并显示在屏幕上。程序代码如下。#include#include#include main()10.2.3 数据块读/写函数FILE*fp;int a10=1,2,3,4,5,6,7,8,9,10,b10,i;if(fp=fopen(d:shixuntext3.dat,wb)=NULL)printf(file
27、can not open!n);exit(1);fwrite(a,sizeof(int),10,fp);fclose(fp);if(fp=fopen(d:shixuntext3.dat,rb)=NULL)10.2.3 数据块读/写函数printf(file can not open!n);exit(1);fread(b,sizeof(int),10,fp);fclose(fp);printf(n);for(i=0;i10;i+)printf(%d,bi);getch();10.2.4 其他读/写函数1.字符串读/写函数1)写字符串函数写字符串函数fputs用于将一个字符串写入指定的文本文件中。
28、fputs函数的调用格式如下。fputs(字符串,文件指针);例如,“fputs(China,fp);”将字符串“China”写到fp所指的文件中。fputs函数中第一个参数可以是字符串常量、字符数组名或字符型指针,字符串末尾的0不写进去。若成功函数值为0,失败时函数值为EOF。2)读字符串函数fgets读字符串函数fgets用于从指向的文本文件中读取字符串。fgets函数的调用格式如下。10.2.4 其他读/写函数fgets(字符指针,输入字符个数,文件指针);例如,“fgets(str,n,fp);”从文件指针fp 所指向的文件中一次最多读取n-1个字符,并将这些字符放到以str为起始地址
29、的单元中。如果在读入n-1个字符结束前遇到换行符或EOF,读入结束。字符串读入后最后加一个0字符。fgets函数的返回值为str的首地址。2.格式读/写函数格式读/写函数fscanf()、fprintf()与scanf()、printf()函数的功能相似,都是格式化读写函数。格式读/写函数是从文件中读取指定格式的数据或把指定格式的数据写入文件。因此,这是按数据格式要求的形式进行的文件输入/输出。函数的调用形式如下。10.2.4 其他读/写函数fscanf(文件指针,格式控制字符串,输入地址表列);fprintf(文件指针,格式控制字符串,输出表列);例如,若文件指针fp已指向一个已打开的文本文
30、件,a、b分别为整型变量,则以下语句实现从fp所指的文件中读入两个整数放入变量a和b中。fscanf(fp,%d%d,&a,&b);同样,若文件指针fp已指向一个已打开的文本文件,x、y分别为整型变量,则以下语句实现把x和y中的数据按%d格式输出到fp所指的文件中。fprintf(fp,%d%d,x,y);10.3 文件定位函数前面介绍的对文件的读/写方式都是顺序读/写,即读/写文件只能从头开始,顺序读/写数据。但在实际问题中常常要求只读/写文件中某一指定部分。为了解决这个问题,可移动文件指针到需要读/写的位置,再进行读/写。文件定位当前的读/写位置的函数有两个,即rewind函数和fseek
31、函数。10.3.1 rewind函数rewind函数用于使文件位置指针重返文件的开头。其调用格式如下。rewind(文件指针);【例10-4】有一个文本文件,第一次使它显示在屏幕上,第二次把它复制到另外一个文件中。程序代码如下。#include main()FILE*fp1,*fp2;fp1=fopen(string1.txt,r);fp2=fopen(string2.txt,w);10.3.1 rewind函数while(!feof(fp1)putchar(getc(fp1);rewind(fp1);while(!feof(fp1)putc(getc(fp1),fp2);fcloseall(
32、);/*关闭所有文件*/10.3.2 fseek函数fseek函数用于移动文件读/写文件指针,以便随机读/写,一般用于二进制文件。其语法格式如下。fseek(FILE*fp,long offset,int whence);其中:(1)fp是文件指针。(2)offset是以字节为单位的偏移量。从计算起始点开始再偏移offset,得到新的文件指针位置。offset为正,向后偏移;offset为负,向前偏移。(3)whence用于计算起始点(计算基准)。计算基准如表10-1所示。10.3.2 fseek函数【例10-5】编程,读出文件student.dat中第三个学生的数据。程序代码如下。#incl
33、ude#include struct student int num;char name20;char sex;int age;float score;10.3.2 fseek函数main()struct student stud;FILE*fp;int i=2;if(fp=fopen(student.dat,rb)=NULL)printf(cant open file stud.datn);exit(1);10.3.2 fseek函数fseek(fp,i*sizeof(struct student),SEEK_SET);/*定位第3个记录*/if(fread(&stud,sizeof(str
34、uct student),1,fp)=1)/*将1个记录读出*/printf(%d,%s,%c,%d,%fn,stud.num,stud.name,stud.sex,stud.age,stud.score);elseprintf(record 3 does not presented.n);fclose(fp);等级考试重点及真题解析本模块主要考查文件打开与关闭、文件读写、文件定位等。此部分知识属于C语言程序设计提高部分,相对较难。应该理解性地掌握文件的读写操作。另外,对于文件的定位也不能忽视。一、重点、难点解析1.文件的打开与关闭C语言规定,对文件读写之前应该打开,在使用结束之后应该关闭。用
35、fopen函数打开一个文件,其调用的一般形式为:文件指针名=fopen(文件名,使用文件方式);其中,“文件指针名”必须是用FILE类型定义的指针变量;“文件名”是被打开文件的文件名字符串常量或该串的首地址值;“使用文件方式”是指文件的类型和操作要求,通常有等级考试重点及真题解析“r”“w”“a”“rb”“wb”“ab”“r+”“w+”“a+”“rb+”“wb+”“ab+”等字符串,请熟悉每个字符串代表的意义。注意书写“文件名字符串”时,常常要描述文件路径,其中的反斜杠必须用“”表示。打开文件后,文件内部指针指向文件中的第1个数据,当读取了它所指向的数据后,指针会自动指向下一个数据。当向文件写
36、入数据时,写完后指针也是自动指向下一个要写入数据的位置。2.文件的读写1)fgetc、fputc函数fgetc函数是从指定的文件中读出一个字符,其一般调用形式为:ch=fgetc(fp);等级考试重点及真题解析fputc的函数是把一个字符写到文件中去,其一般调用形式为:fputc(ch,fp);2)fread、fwrite函数fread函数用来一次读入一组数据,fwite函数用来一次向文件中写一组数据。调用格式分别为:fread(buffer,size,count,fp);fwrite(buffer,size,count,fp);其中,buffer是一个指针,在fread函数中,它表示存放数据
37、的首地址;在fwrite函数中,它表示输出数据的首地址。size表示数据块的字节数。count表示要读写的数据块的块数。fp则是文件指针。3.文件的定位等级考试重点及真题解析移动文件内部位置指针的函数主要有两个,即rewind和fseek函数。rewind函数的功能是把文件内部的位置指针移到文件首。fseek函数可以改变文件位置的指针。调用形式为:rewind(文件指针);fseek(文件指针,位移量,起始点);其中,“位移量”表示移动的字节数,要求位移量是long型数据,以便在文件长度大于64 KB时不会出错。“起始点”表示从何处开始计算位移量,规定的起始点有3种:文件首(SEEK_SET,
38、值为0)、文件指针当前位置(SEEK_CUR,值为1)和文件尾(SEEK_END,值为2)。等级考试重点及真题解析二、真题解析1.标准函数 fgets(s,n,f)的功能是()。2017年9月A.从文件f中读取长度为n的字符串存入指针s所指的内存B.从文件f中读取长度不超过n-1的字符串存入指针s所指的内存C.从文件f中读取n个字符串存入指针s所指的内存D.从文件f中读取长度为n-1的字符串存入指针s所指的内存 fgets函数的功能是从文件指针fp 所指向的文件中一次最多读取n-1个字符,如果在读完n-1 个字符之前遇到换行符或EOF,读入即结束,并将这些字符放到以str为起始地址的单元中。答
39、案为B。2.若fp是指向某文件的指针,且已读到该文件的末尾,则C语言函数feof(fp)的返回值是()。2016年9月等级考试重点及真题解析A.EOFB.-1C.非零值D.NULL feof(fp)遇到文件结束符返回非零值,答案为C。3.设fp已定义,执行语句“fp=fopen(file,w);”后,以下针对文本文件file操作叙述的选项中正确的是()。2011年3月A.写操作结束后可以从头开始读B.只能写不能读C.可以在原有内容后追加写D.可以随意读和写 语句“fp=fopen(file,w);”,文件使用方式是“w”,所以只写打开或新建一个文本文件,只能写入数据。答案为B。4.有以下程序。
40、#include main()等级考试重点及真题解析FILE*pf;char*s1=China,*s2=Beijing;pf=fopen(abc.dat,wb+);fwrite(s2,7,1,pf);rewind(pf);fwrite(s1,5,1,pf);fclose(pf);以上程序执行后abc.dat文件的内容是()。2008年9月A.ChinaB.ChinangC.ChinaBeijingD.BeijingChina等级考试重点及真题解析该知识点考察的是几个文件指针函数。fwrite(s2,7,1,pf)表示把从地址s2开始的7个字符写到pf所指的文件中,即把“Beijing”写到了文
41、件中;rewind(pf)表示把文件的位置移动到文件的开头;fwrite(s1,5,1,pf)表示把从地址s1开始的5个字符写到pf所指的文件中,即又把“China”写到文件中,于是覆盖了s2 所指字符串的前5个字符,所以最后文件中的内容是“Chinang”。答案为B。5.以下程序运行后的输出结果是()。2011年3月main()FILE*fp;int x6=1,2,3,4,5,6,i;fp=fopen(test.dat,wb);等级考试重点及真题解析fwrite(x,sizeof(int),3,fp);rewind(fp);fread(x,sizeof(int),3,fp);for(i=0;
42、i6;i+)printf(%d,xi);printf(n);fclose(fp);注意fp只是以写的方式打开文件test.dat,所以执行fwrite后,将x中3个数据依次写到文件中,然后执行rewind(fp)又使指针移到文件首,但后面的fread并不执行。所以输出的x还是原来的数据,即123456。答案为123456。思考与练习一、选择题1.以下()操作后,文件的指针不指向文件首。A.rewind(fp);B.fseek(fp,0L,0);C.fseek(fp,0L,2);D.fopen(f.c,r);2.使用fopen函数打开一个文件时,读写指针()。A.一定在文件首B.一定在文件尾C.
43、不确定D.可能在文件首,也可能在文件尾3.若fp是指向某文件的指针,且已读到文件末尾,则库函数feof(fp)的返回值是()。A.EOFB.-1C.非零值D.NULL4.在C语言中,可把整型数以二进制形式存放到文件中的函数是()。思考与练习A.fprintfB.freadC.fwriteD.fputc5.若打开文件为了先读后写,则打开方式应选择()。A.rB.r+C.w+D.w6.C语言中,能识别处理的文件为()。A.文本文件和数据块文件B.文本文件和二进制文件C.流文件和文本文件D.数据文件和二进制文件二、编程题1.编写程序,从键盘上输入一行字符,形成一个名为“text.dat”的文件,存于指定的目录下。2.在一个文本文件中有若干句子,要求将它读入内存,然后在输出到另一个文件时使一个句子单独为一行。思考与练习3.将10名职工的信息从键盘输入,送入文件workers.rec中保存,然后从文件中输出职工信息。设职工信息包括工号、姓名、性别、年龄和工资。4.修改本模块案例程序,设计一个“高考成绩管理系统”,学生信息增加“准考证号”。(1)修改search函数,查询条件增加验证“准考证号”,在排序后的文件中折半查找。(2)添加两个输出模块,分别实现录入数据后结果显示及排序后结果显示。Thank you