欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    C程序设计课件第10章.ppt

    • 资源ID:5337212       资源大小:253.51KB        全文页数:51页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C程序设计课件第10章.ppt

    第十章 文件,文件概述 文件操作 文件操作实例本章小结,文件概述,文件是为了某种目的系统的把数据组织起来而构成的数据集合体从实现角度看:文件往往与外部没备、磁盘上的文件联系在一起,也就是与计算机操作系统的文件联系在一起人们往往需要加工处理各式各样的数据,连接各种各样的外部设备。这些数据和设备是千差万别的。为了处理的统一与概念的简化,操作系统把这些外部数据、外部设备一律作为文件来管理。程序设计语言中管理的文件,就是计算机操作系统中的文件。,文件分类文件是程序设计中的一个重要概念,从不同的角度看文件可以分成不同的从操作角度看顺序文件随机文件从用户角度看普通文件设备文件从文件内部编码方式看ASCII文件二进制文件,文件名文件名是文件的唯一标识,它的一般结构是主文件名.扩展名其中的扩展名可以省略,但通常都保留。因为通过扩展名,可以判断文件类型。例如.c C语言的源程序文件.txt 文本文件.doc word文档文件,文件名分为绝对文件名从磁盘盘符开始描述的文件名相对文件名从计算机操作系统中文件系统的某个节点开始描述的文件名 例如:E:docprogramingtest.c 表示绝对文件名 test.c 表示相对于节 E:docprograming的相对文件名,顺序文件和随机文件,顺序文件的特点:文件分成两种模式读模式 写模式在任意时刻,一个顺序文件只能处于两种模式之一。当一个顺序文件处于读模式时,只能从该文件读数据。反之,当一个顺序文件处于写模式时,只能向该文件写数据。从操作角度看,顺序文件只能顺序操作。对于读来讲,顺序文件只能从文件第一成分开始顺序的,一个成分接一个成分的读数据。对于写来讲,顺序文件只能在文件尾一个成分接一个成分的向文件里写数据,每次写进的成分都放在文件末尾,随机文件的特点是:对文件的操作是随机在同一时刻,即可以向文件中写,也可以从文件中读(文件没有读写模式之分)。读写操作可以针对文件中任意成分进行。例如第一次读了第100个成分然后再读第3个成分然后再用一个新的数据修改第50 成分将其写入第50个成分中然后又读第200个成分.,等等。这是允许的,并且是正确的。,普通文件和设备文件,普通文件是指驻留在磁盘或其它外部介质上的一个有序数据集,可以是源程序文件、目标程序文件、可执行程序文件;也可以是一组待输入处理的原始数据,或者是一组输出的结果。设备文件是指与主机相联的各种外部设备,如显示器、打印机、键盘等。在操作系统中,把外部设备也作为文件来进行管理,把它们的输入、输出等同于对磁盘文件的读和写。通常显示器定义为标准输出文件,键盘是标准输入文件,ASCII文件和二进制文件,ASCII文件就是ASCII码文件,也称为文本文件、TEXT文件。这种文件每个字符对应一个字节,用于存放相应字符的ASCII码,也就是存放字符的存储形态的编码。字符1、2、3、4的ASCII码分别为49、50、51、52(十六进制的31、32、33、34),字符串“1234”的存储形式为:共占用4个字节。ASCII文件可以在屏幕上按字符显示,例如源程序文件就是ASCII文件,用DOS命令TYPE可以显示文件的内容。由于是按字符显示,因此能读懂文件内容。,二进制文件就是二进制码文件,它把数据按二进制编码方式存放到文件中。例如,数1234的存储形式为:0000010011010010只占二个字节。用TYPE命令显示二进制文件是无意义的,其内容无法读懂。,流式文件,C系统的文件操作,不区分文件类别。不论 顺序文件还是随机文件、普通文件还是设备文件、ASCII文件还是二进制文件。C把文件一律都看成是“字节流”,以字节(每个字节可能是一个字符,也可能是一个二进制代码)为单位进行操作处理。对字节流的操作;输入输出的开始和结束都由程序控制,不受物理符号(如回车符)的影响。把这种文件操作方式称作“流式文件”。,文件指针,C 系统为了处理文件,为每个文件在内存中开辟一个区域,用来存放文件的有关信息,如文件名、文件状态以及文件当前位置等。这个区域被作成一个称为 FILE 类型的结构体。FILE 的类型由系统定义,保存在头文件 stdio.h 中,它的具体结构我们暂时不用关心。C 程序中用指向 FILE 类型变量的指针变量(简称“文件指针”)来标识具体文件。变量声明 FILE*fp;声明了一个文件指针变量 fp,以后 fp 可以用来标识具体文件。,标记,C文件是一个流式文件,在该字节流上有一个隐含的暗标记,该标记总是指向文件中正要操作的字节,即下一个字节,称该标记为文件读写位置指针。例如:指向文件首,即指向第一个字节 指向第四个字节;.指向文件尾;,几个常量 C系统引进几个常量标志文件处理状态。最常用的是 EOF 和 NULL,它们是 stdio.h 中预定义的常量。EOF:值为“-1”习惯上表示文件结束,或文件操作出错;NULL:值为“0”习惯上表示打开文件失败等。,文件操作,C没有文件操作语句,C文件操作全部通过系统定义的库函数来实现。“库函数”是指系统已经定义好的,存放在“函数库”文件内的,可以被用户直接调用的函数。这些库函数根据其功能的不同,存放在不同的函数库中。库函数本身并不属于语言,它是系统根据需要提供给用户使用的函数。C 标准定义了常用的函数库和每个函数库中常用的库函数。但是不同的编译系统提供的函数库不同,不同编译系统在每个函数库中提供的库函数也不同。为了提高程序的可移植性,用户应该只使用 C 标准定义的函数库和库函数。,对应每个函数库,有一个头文件,在头文件中包含相应函数库中所有函数的函数原型。用户使用库函数时,需要把相应的头文件用#include 命令括入到自己的程序文件中。文件操作函数库的头文件是“stdio.h”,在用户程序中只要涉及文件操作,即只要涉及输入输出就应该把该文件括入程序中,使用的程序行是:#include stdio.h这就是为什么前述各个章节的程序都含有这一行的原因。,任何高级语言,对文件操作都应该遵循:打开文件 操作文件 关闭文件这样的过程。下面就遵循这个规则对文件的操作进行说明,打开文件,函数原型 FILE*fopen(const char*filename,const char*mode);调用方式 fp=fopen(filename,mode);filename 是一个字符串,具体给出要打开的文件的文件名;mode 也是一个字符串,具体给出文件的打开模式,表12-1列出各种打开模式;fp 是文件指针变量,以后程序中使用该指针变量标识由文件名给出的文件。,fopen 根据 mode 指定的模式,打开由filename指定的文件。例如:fp=fopen(c:userfile.txt,r);以“只读”方式,打开 c 盘 user 节点下的 file.txt 文件。如果成功则 fp 就是文件 file.txt 的文件指针变量,并且只允许对文件进行读操作;否则 fp 的值是 NULL。,关闭文件,函数原型int fclose(FILE*stream);调用方式fclose(fp);,读字符,函数原型:int fgetc(FILE*fp);功能从fp指向的文件中读取一个字符,同时将读写位置指针向前移动1个字节,写字符,函数原型int fputc(int ch,FILE*fp);功能把字符ch写入fp指向的文件,同时将读写位置指针向前移动1个字节。,读字符串,函数原型:char*fgets(char*str,int num,FILE*fpointer);功能:从fpointer指向的文件中读取一个字符串,并将此串保存在str指向的字符数组中。字符串的自然结束符是“换行符”和“文件结束符”。若读到 num-1 个字符后还没遇到结束符,则也强制结束,这时把 num-1 个读入的字符送入数组 str 中。读入结束后,在数组 str的字符串末尾加字符串终止字符 NULL;并将文件读写位置指针向前移动实际读取的字节个数,写字符串,函数原型int*fputs(char*str,FILE*fpointer);功能:把str所指字符串(不包括字符串结束符NULL)写入fpointer指向的文件,同时将读写位置指针向前移动num(字符串长度)个字节。,读数据块,函数原型:int fread(void*buf,int size,int count,FILE*fp);功能:从fp所指的文件中读取count个字段,每个字段为size个字节,把它们送到buf所指的缓冲数组中,同时,将读写位置指针向前移动size*count个字节。一般来讲,数组buf每个元素的尺寸为size,每个字段正好对应数组buf的一个元素;即读入count个字段送入数组buf的count个元素中。,写数据块,函数原型:int fwrite(void*buf,int size,int count,FILE*fp);功能:从buf所指的数组中,把count个字段写到fp所指的文件中,每个字段为size个字节,同时,将读写位置指针向前移动size*count个字节。一般来讲,数组buf每个元素的尺寸为size,每个字段正好对应数组buf的一个元素;即把数组buf的count个元素写到文件中。,格式化读写,读/写多个含格式的数据时选用 fscanf()和 fprintf()函数。函数fscanf()和 fprintf()与函数 scanf()和 printf()的功能相似,区别在于函数 fscanf()和 fprintf()操作对象是一般文件,而 scanf()和printf()操作对象是标准输入输出文件。格式化读写是把数据按 fscanf()和 fprintf()函数中格式控制字符串中控制字符的要求进行转换,然后再进行读/写。格式转换在第三章的3.8节已经介绍过,这里不再赘述,格式化输入,函数原型:int fscanf(FILE*fp,char*format,arg_list);功能:从fp所指文件,按format规定的格式进行转换,读取arg_list对应的数据,格式化输出,函数原型int fprinft(FILE*fp,char*format,arg_list);功能将arg_list内的各参数值按format格式进行转换,输出到fp所指的文件。,文件定位,C文件是一个流式文件,在该字节流上有一个隐含的暗标记(文件读写位置指针),该标记总是指向文件中正要操作的字节。当以读模式(“r”)打开文件时,文件读写位置指针指向文件开始;当以写模式(“w”)打开文件时,文件读写位置指针指向文件开始;当以追加写模式(“a”)打开文件时,文件读写位置指针指向文件尾;当以各种随机模式(“a+”、“w+”、“a+”)打开文件时,文件读写位置指针指向文件开始。,在对文件进行任何读写操作时,位置指针都自动向下移动相应个数的字节。如果要打破这种规律,就必须使用定位函数对位置指针重新定位。函数rewind 和 fseek 用于位置指针定位函数 ftell 和 feof 用于测试文件位置指针当前所处位置。,rewind()函数原型:void rewind(FILE*fp);功能:使fp所指文件的位置指针重新指向文件开始返回值:无ftell()函数原型:long int ftell(FILE*fp);功能:给出fp所指文件的位置指针当前所处位置。,fseek()函数原型:int fseek(FILE*fp,long offset,int origin);功能:使fp所指文件的指针指向origin+offset的位置,feof()函数原型:int feof(FILE*fp);功能:fp 是输入流,标志是否“读”到fp所指文件末尾,即文件是否结束。,例10-1 实现文本文件复制的功能,void main(int argc,char*argv)FILE*output;/*目标文件指针*/char ch;if(argc!=3)/*参数个数不对*/printf(the number of arguments not correctn);printf(n Usage:可执行文件名 source-file dest-file);exit(0);/*退出*/if(input=fopen(argv1,r)=NULL)/*打开源文件失败*/printf(can not open source filen);exit(0);,if(output=fopen(argv2,w)=NULL)/*创建失败*/printf(can not create destination filen);exit(0);while(!feof(input)/*复制源文件到目标文件中*/fputc(fgetc(input),output);fclose(input);/*关闭源文件*/fclose(output);/*关闭目标文件*/,例10-2 创建某文本文件的副本,副本文件要有行号,int line=1;/*复制*/fprintf(output,%5d,line);/*写入第一行行号*/while((ch=fgetc(input)!=EOF)fputc(ch,output);/*写入当前字符*/if(ch=n|ch=r)fprintf(output,%5d,line+);/*,行号增1*/,还可以使用fgets和fputs字符串I/O函数,编出更简洁的程序。编出程序如下#define SIZE 256void main(int argc,char*argv)char bufSIZE;while(fgets(buf,SIZE,input)!=NULL)fprintf(output,%5d,line+);fputs(buf,output);,例10-3 合并两个已按递增排序的整数 文件成一个按递增排序文件,fread(,例 10-4,在磁盘中建立一个正弦函数表文件“sin.tab”格式如下:THE LIST OF SIN(X)a SIN(a)a SIN(a)a SIN(a)a SIN(a)a SIN(a)0 0.0000 1 0.0175 2 0.0349 3 0.0523 4 0.06985 0.0872 6 0.1045 7 0.1219 8 0.1392 9 0.1564.到 359为止,void main()int u,v;FILE*f;if(f=fopen(“sin.tab”,w)=NULL)/*打开文件*/printf(can not open file sin.tabn);exit(0);fprintf(f,“%40c THE LIST OF SIN(X)n”,);/*表头*/fprintf(f,“a SIN(a)a SIN(a)a SIN(a)”);fprintf(f,“a SIN(a)a SIN(a)n”);for(v=0;v=71;v+)/*表体*/for(u=0;u=4;u+)fprintf(f,“%5d.4f”,v*5+u,sin(v*5+u)*PAI/180);fprintf(“n”);fclose(f);,例10-5,设磁盘上有两个 text 文件,NAME.DAT上为一个人员名单;ADDRESS.DAT上是对应NAME.DAT文件上每个人的家庭地址。编一个程序,在磁盘上生成一个姓名、地址、电话号码表文件NAMEADDR.TAB,其中每个人的电话号码在终端上随机录入。,该程序总体上一个人一个人的处理。对每个人来讲:,初始化文件,处理一个人的信息,1.先从NAME.DAT上读入一个姓名;然后从 ADDRESS.DAT上读入相应家庭地址;,2.然后在终端屏幕上显示正处理的人员姓名,要求操作员 键入其电话号码,并读入该电话号码;,3.最后把姓名、地址、电话号码作为一行送入文件 NAMEADDR.TAB上。,读 NAME=name0;ADDRESS=addr,显示 name0,读入电话号码=tel,name0、addr、tel写入文件NAMEADDR.TAB,void main()FILE*name;/*名字源文件指针*/FILE*address;/*地址源文件指针*/FILE*nameaddr;/*目标文件指针*/char name08,addr30,tel10;if(name=fopen(NAME.DAT,r)=NULL)printf(can not open source file NAME.DATn);exit(0);if(address=fopen(ADDRESS.DAT,r)=NULL)printf(can not open source file ADDRESS.DATn);exit(0);,if(nameaddr=fopen(NAMEADDR.DAT,w)=NULL)printf(can not create destination file NAMEADDRn);exit(0);while(!feof(name),本章小结,本章主要介绍了文件的概念及其操作。重点掌握文件打开、关闭、读写等操作。,作业,10.8,

    注意事项

    本文(C程序设计课件第10章.ppt)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开