《模块八文件操作训练 电子教案.doc》由会员分享,可在线阅读,更多相关《模块八文件操作训练 电子教案.doc(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、模块八 文件操作训练 电子教案职业本科规划教材C语言程序设计教学设计课程名称: C语言程序设计授课年级:2022年级 授课学期:2022学年第一学期 教师姓名:XXX2021年10月22日- 1 - / 18课题名称模块八 文件操作训练计划学时8学时内容分析文件是计算机经常使用的一个重要内容.C语言实现文件操作主要有两种途径:其一是通过操作系统完成对文件的输入输出操作;其二是通过由C语言的编译系统提供的一套用于文件操作的库函数。教学目标及基本要求(1) 掌握文件类型指针的概念;(2) 掌握文件的打开与关闭;(3) 掌握字符读写函数(fgetc函数和fputc函数);(4) 理解数据块读写函数(
2、fread函数和fwrite函数);(5) 了解格式读写函数(fscanf函数和fprintf函数)。教学重点文件类型指针、文件的打开与关闭、字符读写函数教学难点文件的打开与关闭、字符读写教学方式教学采用教师课堂讲授与学生操作练习共同进行的一体化教学方式l 概念性知识点:提出为什么,将抽象具体化,配合教学PPT、案例辅助讲解.l 操作性知识点:提需求,并上机演示如何操作,重点内容总结经验及注意事项。l 学生操作练习:完成教材中的引例、做中学以及练中学案例,有能力的学生还可以完成教师额外布置的拓展练习题目。教学过程第一、二学时(C语言的文件系统、文件的打开与关闭)一、引例任务,提出需求(1)通过
3、引力任务,引出本节所需知识内容。【引例任务】文本文件的读取。【程序代码】#include stdio.hvoid main( ) FILE fp1; char file100; char b1000; printf(”要读取文本文件!请输入文件名:”); scanf(”s,file); if(fp1=fopen(file,”r)=NULL) /判断文件打开操作是否失败/printf(”不能打开此文件.n”);return; do fscanf(fp1,”s,,b); printf(sn”,b); while(!feof(fp1); printf(”-读取完毕-n); fclose(fp1);【
4、程序运行】要读取文本文件!请输入文件名:x.txt89,-21,0,7.8,8.9,0,571,9.8,0,45。882,-8.912,243,0,-56。243-读取完毕-(2)明确学习方向。【知识点】l 文件内容的存储l 缓冲文件系统l 文件的打开l 文件的关闭【能力点】l 了解文件系统l 掌握文件的打开与关闭二、 明确目标,完成任务1. 文件内容的存储形式根据数据的组织形式,C语言文件系统把文件分为ASCII码文件和二进制文件。ASCII码文件又称为文本文件,它的每一B存放一个ASCII码,代表一个字符;二进制文件则把内存中的数据按其在内存中的存储形式按原样输出到磁盘上,即它的每一B存放
5、一个二进制数据。使用文本文件存储数值型数据时需要将计算机内存中的数据由二进制转换为多个ASCII码,而且会占据较多的磁盘存储空间;而使用二进制文件存储就不必进行转换并且可以节省磁盘存储空间。但由于文本文件便于显示,便于用户直接读写,因而较多用于保存最终运行结果;而二进制文件则多用于保存中间结果、原始数据。C语言文件系统中的文件实际上是一个字符流或者二进制流,也称为流式文件。在C语言中对文件的存取都是以字节为单位进行的,文件的输入输出受程序的控制。C文件系统将文件简单地看作是字节(字符)的序列,即文件是由一个一个的字节(ASCII字符)数据顺序组成,最后一般用一个文件结束标记来结束。2. 缓冲文
6、件系统ANSI C标准规定,采用缓冲文件系统来处理文件,即无论是文本文件,还是二进制文件,都使用缓冲文件系统来处理。对于缓冲文件系统,可执行程序读取数据时,是从缓冲区中读取数据,当缓冲区中的数据被读完后,文件系统才读取磁盘中文件的数据,以供可执行程序读取。同理,可执行程序写入数据,也是向缓冲区写入数据,当缓冲区被数据写满后,文件系统才将缓冲区中的数据写入磁盘中文件。3. 文件的打开C语言中使用fopen函数来打开文件.语法格式为FTLE fopen ( char filename,char * mode);函数fopen的第一个参数filename是要打开文件的文件名,该参数可以为字符串、字符
7、数组名或者指向字符串的指针;函数fopen的第二个参数mode是使用文件的存取方式。C文件系统中还包含3个通常与终端相联系的标准文件,即标准输入、标准输出和标准出错输出。在程序开始运行时,系统自动打开这3个文件,并由系统自动定义3个文件指针stdin、stdout和stderr,分别指向终端输入、终端输出和标准错误输出(一般也从终端stdout输出)。4. 文件的关闭在缓冲文件系统中,向文件写数据时,首先将数据输出到缓冲区,待缓冲区满后才将数据一起输出给文件.如果使用文件后没有关闭文件,并且此时文件缓冲区未满,那么系统将不会把缓冲区中的数据输出到磁盘文件;如果恰好此时程序运行结束,那么缓冲区中
8、的数据就会丢失。为了避免这个问题,同时也为了保证释放内存并且防止该文件再次被误用,使用完文件后一定要关闭文件。在C语言中使用fclose函数来实现关闭文件的操作。函数调用的语法格式为: int fclose(FILE fp);fp为指向待关闭文件的指针.如果关闭操作成功,fclose函数将返回0,否则返回EOF(stdio.h中定义的符号常量,其值为1)。fclose函数在关闭文件时,首先将缓冲区中没有写入磁盘文件的数据写入到磁盘文件,然后释放文件指针变量,即将文件所占据的内存区域释放并归还给操作系统。三、归纳总结,布置课后作业 (1)回顾上课前的学习目标,对本节课知识点进行总结。 (2)扫描
9、二维码查看相应资源,完成课后实训题。第三、四、五学时(文件的读写)一、引入学习任务(1)回顾上节课的内容,C语言的文件系统、文件的打开与关闭。(2)明确学习方向。【知识点】l 字符读写函数l 数据库读写函数l 格式读写函数【能力点】l 掌握字符读写函数(fgetc函数和fputc函数)l 理解数据块读写函数(fread函数和fwrite函数)l 了解格式读写函数(fscanf函数和fprintf函数)二、明确目标,完成任务打开文件后,就可以使用C语言提供的读写函数对文件进行读写。在C语言中包含字符读写、数据读写、格式读写、字(整数)读写和字符串读写等操作。1. 字符读写函数fputc( )函数
10、的作用是把一个字符输出到指定文件中去,而fgetc( )函数的作用是从指定的文件中读入一个字符。这两个函数一般用来读写文本文件。【做中学8-1】从键盘输入些字符,把它们保存到文件中,直至输入“”为止,然后再从屏幕输出文件内容。【程序代码】 include stdio.hvoid main( )FILE fp;char ch,file20;printf(”请输入新建文件的文件名:”);scanf(”s”,file); if(fp=fopen(file,”w”)=NULL) /*判断文件打开操作是否失败/ printf(”不能打开此文件。n”); else printf(”请输入文件内容:n);c
11、h=getchar( ); /*用来接收上面输入文件名时输入的回车符/ch=getchar( ); /读取键盘输入的符/while (ch!=) fputc(ch,fp); /将字符输送到文件fp/ ch=getchar( ); /继续读取键盘输入的符*/ fclose(fp);printf(你输入的文件内容为:n);if(fp=fopen(file,”r))=NULL) /判断文件打开操作是否失败*/ printf(”不能打开此文件。n”); else char ch;ch=fgetc(fp); /*读取f中的符/while (!feof(fp) putchar(ch); /*将字符输送到终
12、端/ ch=fgetc(fp); /*继续读取f中的符*/fclose(fp); printf(n);1)fputc函数fputc函数的语法格式为: int fputc(char ch, FILE fp);2)fgetc( )函数fgetc函数的语法格式为: int fgetc(FILE * fp);3)判断文件读结束函数符号常量EOF只能用来判断一个文本文件的读结束,不能用来判断二进制文件的读结束。为此,ANSI C提供了一个用于判断文件是否结束的函数feof,该函数的语法格式为 int feof(FILE fp);2. 数据块读写函数fread和fwrite函数用来实现一次输入输出一组数据
13、.fread函数用来从文件读取一个数据块,fwrite函数则用来向一个文件输出数据块.这两个函数一般用来读写二进制文件。【做中学82】将已赋值的浮点型数组元素数据存到文件里,然后从该文件中读取数据输出到终端.【程序代码】 include void main( ) FILE *fp; float a310,b=3.1286f; int i,j; char file20; for (i=0;i3;i+)for (j=0;j10;j+)aij=(i+1)(j+1)*b; printf(现在要存储数据!请输入文件名:”); scanf(s,file); if(fp=fopen(file,wb”)=NU
14、LL) /判断文件打开操作是否失败/ printf(不能打开此文件。n”); else for (i=0;i3;i+) fwrite(a+i,4,10,fp); /*4为每个数组元素的字节数,写10个元素*/ fclose(fp); for (i=0;i3;i+) for (j=0;j10;j+) aij=0; printf(”现在准备读取数据!请输入文件名:); scanf(%s,file); if(fp=fopen(file,rb))=NULL) /判断文件打开操作是否失败/ printf(”不能打开此文件.n); else for (i=0;i3;i+) fread(a+i,4,10,f
15、p); /*4为每个数组元素的字节数,读10个元素/ for (i=0;i3;i+) for (j=0;j10;j+) printf(%6.2f ”,aij); printf(n); printf(”n”);1)fread函数语法格式为: int fread ( char *buffer,unsigned size ,unsigned count,FILE fp);2)fwrite函数语法格式为: int fwrite ( char *buffer, unsigned size , unsigned count, FlLE *fp);3. 格式读写函数fprintf函数和fscanf函数用来进
16、行格式化输入输出。这两个函数与标准格式化输入输出函数printf和scanf相仿,只不过printf函数和scanf函数的读写对象不是磁盘文件而是终端设备。【做中学83】 有一数据文件内容如下,编写程序统计并输出该文件中正数、负数和零的个数。89,21,0,7.8,8.9,0,571,9.8,0,45.882,8。912,243,0,56。243【程序代码】 #include stdio。hvoid main( ) FILE *fp; float b; int n1=0,n2=0,n3=0; char fname20; printf(读取数据文件!请输入文件名:); scanf(”%s,&fn
17、ame); if((fp=fopen(fname,”r))=NULL) /判断文件打开操作是否失败/ printf(不能打开此文件。n”); else fscanf(fp,f,”,b); while(!feof(fp)) if (b=0) n2+; else if (b0)n3+; printf(6.3ft,b); fscanf(fp,”f,”,b); fclose(fp); printf(n负数:d个.零:d个。正数:d个.n,n1,n2,n3);1)fprintf函数语法格式为: int fprintf(FlLE *fp,char format,args,);2)fscanf函数语法格式为
18、:int fscanf(FILE fp ,char format,args,);三、归纳总结,布置课后作业 (1)回顾上课前的学习目标,对本节课知识点进行总结. (2)扫描二维码查看相应资源,完成课后作业。第六、七、八学时(边学边练、实训题)一、上机练习【能力点】l 掌握文件“打开读写关闭的顺序流程l 掌握数据块读写函数(fread函数和fwrite函数)的使用l 掌握格式读写函数(fscanf函数和fprintf函数)的使用【练中学81】设计一个程序对学生的成绩进行输入、显示和修改,学生档案存入磁盘文件。【程序代码】#include stdio。h#include ”string.h”def
19、ine RS 5 /程序处理RS个人的信息,根据实际情况RS可以改变/define KM 3 /*程序处理KM科的成绩,根据实际情况KM可以改变/struct stint num;char classname10;char name20;char sex3;float scoreKM;studentRS=0; /*定义结构体数组student*/void addst(struct st stu)int i;struct st *p;p=stu;while(pnum!=0) p+; /查找可存储数据的结构体数组元素*/printf(”请输入班级、学号、姓名、性别、%d门课成绩:n,KM);dos
20、canf(s”,(*p).classname); if (strcmp(*p).classname,end)!=0)/班级名称为”end”结束录入*/scanf(”d%s%s ,&(*p)。num,(p)。name,(p).sex);for (i=0;inum!=0) p+; /查找可存储数据的结构体数组元素*/while(strcmp((p).classname,end);void displayst(struct st stu)int i,k;struct st *p;p=stu;printf(”*成绩单*);printf(”n班级t学号t姓名t性别t各科成绩);for(k=0;kRS;k
21、+)if (pnum!=0)printf(n%st,(p).classname);printf(%dt,(p).num);printf(”%st,(*p).name);printf(%st”,(p).sex);for (i=0;iKM;i+) printf(5。1f”,(p)。scorei);p+;void putfile(struct st stu)int i,k;FILE *fp;struct st p;char file50;p=stu;printf(若要在磁盘文件中存储成绩!请输入文件名:”);scanf(%s”,file); if((fp=fopen(file,”w))=NULL)
22、/判断文件打开操作是否失败*/ printf(”不能打开此文件。n); return; for(k=0;kRS;k+)if (pnum!=0)fprintf(fp,ns ”,(p).classname);fprintf(fp,%d ”,(*p)。num);fprintf(fp,”s ”,(p)。name);fprintf(fp,%s ,(p).sex);for (i=0;iKM;i+) fprintf(fp,5。1f ”,(*p)。scorei);p+;fclose(fp); printf(”成绩已存入文件%s中。n,file);void getfile(struct st stu)int i
23、;FILE fp;struct st p;char file50;p=stu;printf(若要读取磁盘文件中的成绩!,请输入文件名:”);scanf(”s”,file); if((fp=fopen(file,”r))=NULL) /判断文件打开操作是否失败/ printf(”不能打开此文件.n”); return ; while(!feof(fp) fscanf(fp,”n%s ”,(*p)。classname);fscanf(fp,d ,&(*p).num);fscanf(fp,”s ,(*p)。name);fscanf(fp,s ,(*p).sex);for (i=0;inum!=n)
24、p+;printf(”请输入班级、学号、姓名、性别、%d门课成绩:n,KM);scanf(”%s%d s%s ,(*p)。classname,&(*p)。num,(p)。name,(*p).sex);for (i=0;iKM;i+) scanf(”f,&(*p)。scorei);void main( )char ch;int n;doprintf(n请选择你想要进行的操作:n”);printf(”1。输入成绩 2.显示成绩 3.修改成绩 4。成绩存盘 5.读取成绩 6。退出n”); scanf(c,&ch);if (ch=1) addst(student),scanf(c,&ch);if (c
25、h=2) displayst(student),scanf(”c,ch);if (ch=3) printf(请输入要修改的学生学号:);scanf(%d,&n);changest(student,n);scanf(”c”,&ch);if (ch=4) putfile(student),scanf(”%c”,&ch);if (ch=5) getfile(student),scanf(”c”,&ch);while(ch!=6);【练中学82】编写一个程序,实现文件复制。【程序代码】#include stdio。hvoid main( )long k;FILE *fp1,*fp2;char file
26、100;printf(”要读取数据!请输入文件名:”);scanf(”s”,file); if(fp1=fopen(file,”rb))=NULL) /判断文件打开操作是否失败*/ printf(”不能打开此文件.n”); return; printf(要存储数据!请输入文件名:”);scanf(%s,&file); if((fp2=fopen(file,wb)=NULL) /*判断文件打开操作是否失败/ printf(”不能打开此文件。n); return; do k=fread(file,1,100,fp1); fwrite(file,1,k,fp2);while(!feof(fp1)); printf(拷贝完毕。n”);fclose(fp1);fclose(fp2);二、归纳总结,完成课后实训题 (1)回顾本节课的学习目标,对知识点进行总结。 (2)完成课后实训作业.教学后记- 17 -