C语言程序设计(第3版)张磊编著清华大学出版社《C语言程序设计》(第3版)张磊编著,2012年10月清华大学出版社出版。该教材面向程序设计初学者编写,适合将C语言作为第一门程序设计语言的高校学生。该教材理论教学和实验教学合二为一,在每章之后均设有实验指导。实验指导分为基础实验和综合实验两部分。基础实验紧密结合教材中的例题程序设置,以“理解—验证—完善—扩充—提高”为实验教学线索,重在巩固课堂教学知识,提高调试程序及完善程序的能力;综合实验以算法设计和程序实现为重点,训练运用所学知识解决实际问题的能力。该教材同时配有程序资源和试题库。Email:mail16300@163.com《C语言程序设计》(第3版)课件C语言程序设计(第3版)张磊编著清华大学出版社C语言程序设计第9章文件程序设计《C语言程序设计》(第3版)张磊编著21世纪高等学校规划教材清华大学出版社C语言程序设计(第3版)张磊编著清华大学出版社第9章文件程序设计9.1文件概述9.2文件的基本操作9.3文件的数据块读写操作9.4文件的其他操作9.5文件应用举例C语言程序设计(第3版)张磊编著清华大学出版社9.1文件概述9.1.1文件的概念9.1.2文件的分类9.1.3文件的一般操作过程9.1.4文件的指针C语言程序设计(第3版)张磊编著清华大学出版社9.1.1文件的概念文件是计算机中的一个重要概念,通常是指存储在外部介质上的信息的集合。存储程序代码的文件称为程序文件,存储数据的文件称为数据文件。另外,C语言把输入输出设备也视为一类特殊的文件。计算机对文件的操作总体上分成输入和输出两大类,对文件的输人输出(I/0)过程是通过操作系统进行管理的。C语言程序对文件的处理是通过标准函数库中的文件操作函数实现的,使用这些函数,可以简单、高效、安全地访问外部数据。C语言程序设计(第3版)张磊编著清华大学出版社9.1.1文件的概念1.设备文件在C语言中,所有的外部设备均被作为文件对待,这种文件称为设备文件。对外部设备的输人输出处理就是读写设备文件的过程。2.文件缓冲区在程序的运行过程中,程序要将保存在内存中的数据写入磁盘,首先要建立一个“输出文件缓冲区”,这个缓冲区是一个连接计算机内存数据与外存文件的桥梁,当向文件输出数据时,准备输出的数据先写入文件缓冲区,等文件缓冲区填满后再输出到文件中。这一过程称为“写文件”,是数据输出过程。与“写文件”过程相对的是要将保存在文件中的数据装入内存。首先要建立一个“输入文件缓冲区”,当从文件中输入数据时,也是把读入的数据先写入文件缓冲区,等文件缓冲区数据装满之后再整个送给程序。这一过程称为“读文件”,是数据输入过程。C语言程序设计(第3版)张磊编著清华大学出版社9.1.1文件的概念使用缓冲区的文件读、写示意图C语言程序设计(第3版)张磊编著清华大学出版社9.1.2文件的分类以ASCII码字符形式存储的文件称为文本文件,又叫ASCII文件。例如用高级程序语言编写的程序文件是文本文件,用Windows“记事本”程序创建的文件也是文本文件。文本文件是一种字符流文件,文本文件的一个字符就是一个字节,因而方便了字符的处理,不过文本文件一般要占用较大的存储空间。二进制文件是按照数据在内存中的字节序列形成的字节流文件。例如C程序的目标文件(扩展名为obj)和可执行文件(扩展名为exe)都是二进制文件。在二进制文件中,字节信息与实际的数据位并不一一对应,因此,若直接显示二进制文件内容时,用户看到的是一些不能识别的字符。文本文件二进制文件C语言程序设计(第3版)张磊编著清华大学出版社9.1.3文件的一般操作过程使用文件的一般步骤打开文件→操作文件→关闭文件打开文件:建立用户程序与文件的联系,系统为文件开辟文件缓冲区。操作文件:是指对文件的读、写、追加和定位操作。读操作:从文件中读出数据,即将文件中的数据输入到计算机内存。写操作:向文件中写入数据,即将计算机内存中的数据输出到文件。追加操作:将新的数据写到文件原有数据的后面。定位操作:移动文件读写位置指针。关闭文件:切断文件与程序的联系,将文件缓冲区的内容写入磁盘,并释放文件缓冲区。C语言程序设计(第3版)张磊编著清华大学出版社9.1.4文件的指针文件型指针变量的定义FILE*变量名;例如:FILE*p;注意:由于文件类型FILE在头文件stdio.h中定义,所以在使用FILE类型前必须先打开stdio.h文件。如果需要对某一个文件进行读写操作,必须首先要指定指向它的文件指针。只有通过文件指针,才能调用相应的文件。当程序需要同时处理多个文件时,则需要说明多个FILE型的指针变量,使它们分别指向多个不同的文件。C语言程序设计(第3版)张磊编著清华大学出版社9.2文件的基本操作9.2.1打开和关闭文件9.2.2最基本的文件读写函数C语言程序设计(第3版)张磊编著清华大学出版社9.2.1打开和关闭文件打开文件操作是使用文件的第一个步骤,而关闭文件操作则是使用文件的最后一个步骤。C语言系统分别使用fopen()函数和fclose()函数实现文件的打开和关闭操作。1.文件打开函数fopen()fopen()函数用来实现打开文件,它解决如下3个问题:⑴指定要打开的文件名;⑵指定文件的使用方式,如是读文件还是写文件等;⑶为打开的文件指定一个指针变量,以便使用这个指针变量对文件进行访问。fopen()函数的调用方式FILE*fp;fp=fopen(文件名,使用文件的方式);例如:fp=(example.txt,r);表示要打开的文件名为example.txt,使用文件的方式是“r”方式,文件指针是fp。C语言程序设计(第3版)张磊编著清华大学出版社9.2.1打开和关闭文件文件使用方式文件使用方式作用r以“只读”方式打开一个文本文件w以“只写”方式打开一个文本文件a向文本文件尾增加数据rb以“只读”方式打开一个二进制文件wb以“只写”方式打开一个二进制文件ab向二进制文件尾增加数据r+以“读/写”方式打开一个文本文件w+以“读/写”方式建立一个新的文本文件a+以“读/写/追加”方式打开一个文本文件rb+以“读/写”方式打开一个二进制文件wb+以“读/写”方式建立一个新的二进制文件ab+以“读/写/追加”方式打开一个二进制文件C语言程序设计(第3版)张磊编著清华大学出版社9.2.1打开和关闭文件2.关闭文件函数fclose()fclose()函数的一般格式fclose(文件指针);功能关闭“文件指针”所指向的文件,释放打开文件时使用的结构体变量,断开文件指针与文件的联系。例如:fclose(fp);C语言程序设计(第3版)张磊编著清华大学出版社9.2.2最基本的文件读写函数1.fputc()函数一般形式fputc(ch,fp);功能将字符(ch的值)输出到fp所指向的文件中。C语言程序设计(第3版)张磊编著清华大学出版社9.2.2最基本的文件读写函数例9-1使用fputc()函数在屏幕显示一个字符串。/*programe9-1.c*/#includestdio.hvoidmain(){char*p=Thisisaexample.;while(*p!='\0')fputc(*p++,stdout);}设备文件C语言程序设计(第3版)张磊编著清华大学出版社9.2.2最基本的文件读写函数例9-2把从键盘输入的一个字符串写入到磁盘文件example.txt中。/*programe9-2.c*/#includestdio.hvoidmain(){charch;FILE*fp;fp=fopen(example.txt,w);printf(Enterastring:);while((ch=getchar())!='\n')fputc(ch,fp);fclose(fp);}C语言程序设计(第3版)张磊编著清华大学出版社9.2.2最基本的文件读写函数2.fgetc()函数从指定文件读入一个字符,该文件必须是以读或读写方式打开的。通常使用如下的形式调用fgetc()函数ch=fgetc(fp);其中,fp为文件型指针变量,ch为字符变量。正常情况下fgetc()函数的返回值是从文件中读出的一个字符。当打开文件并立即使用fgetc()读文件时,fgetc()函数从文件开始位置读取一个字符。每读取一个字符后,文件的位置指针后移一个字符位置。若当前读取的是文本文件,当遇到文件结束标志时,fgetc()函数的返回值为EOF。C语言程序设计(第3版)张磊编著清华大学出版社9.2.2最基本的文件读写函数例9-3使用fgetc()函数输出文件example.txt的内容。/*programe9-3.c*/#includestdio.hvoidmain(){charch;FILE*fp;fp=fopen(example.txt,r);while((ch=fgetc(fp))!=EOF)putchar(ch);fclose(fp);}C语言程序设计(第3版)张磊编著清华大学出版社9.2.2最基本的文件读写函数例9-4使用feof()进行文件读取控制,输出文件example.txt的内容。/*programe9-4.c*/#includestdio.hvoidmain(){FILE*fp;if((fp=fopen(example.txt,r))==NULL){printf(filecannotopen!\n);exit(1);}while(!feof(fp))putchar(fgetc(fp));fclose(fp);}判断被读取的文件是否已经读完。当未遇文件结束标志时,feof()的值是0,否则feof()的值是1。C语言程序设计(第3版)张磊编著清华大学出版社9.3文件的数据块读写操作9.3.1fwrite()函数9.3.2fread()函数C语言程序设计(第3版)张磊编著清华大学出版社9.3.1fwrite()函数fwrite()函数的功能是把内存中的一些数据块写到指定的文件中。一般调用形式fwrite(buffer,size,count,fp);其中:fp是接受数据的文件指针;buffer是数据块的内存首地址,通常是指针变量名、数组名等;size是一个数据块的字节数(即数据块的大小);count是执行一次fwrite()函数从内存输出到fp文件的数据块数目。C语言程序设计(第3版)张磊编著清华大学出版社9.3.1fwrite()函数例9-5从键盘上输入一批学生数据,然后以“stu_list”文件名存储到磁盘上。/*programe9-5.c*/#includestdio.h#defineN4structstudent_type{charname[10];intnum;intscore;}stud;voidmain(){inti;FILE*fp;if((fp=fopen(stu_list,wb))==NULL){printf(Cannotopenfile\n);exit(1);}printf(Inputdata,please!\n);for(i=0;iN;i++){scanf(%s%d%d,stud.name,&stud.num,&stud.score);fwrite(&stud,sizeof(structstudent_type),1,fp);}fclose(fp);printf(Allright.\n);}C语言程序设计(第3版)张磊编著清华大学出版社9.3.2fread()函数fread()函数把指定文件中的一个数据块读到内存中。一般调用形式fread(buffer,size,count,fp);其中:fp是读取数据的文件指针;buffer是接受文件数据的内存首地址,通常是指针变量名、数组名等;size是一个数据块的字节数(即数据块的大小);count是执行一次fread()函数读取的数据块的数目。例9-6将上述stu_list文件的