2014c语言与程序设计第十一讲(文件)章

上传人:E**** 文档编号:89082670 上传时间:2019-05-17 格式:PPT 页数:36 大小:3.27MB
返回 下载 相关 举报
2014c语言与程序设计第十一讲(文件)章_第1页
第1页 / 共36页
2014c语言与程序设计第十一讲(文件)章_第2页
第2页 / 共36页
2014c语言与程序设计第十一讲(文件)章_第3页
第3页 / 共36页
2014c语言与程序设计第十一讲(文件)章_第4页
第4页 / 共36页
2014c语言与程序设计第十一讲(文件)章_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《2014c语言与程序设计第十一讲(文件)章》由会员分享,可在线阅读,更多相关《2014c语言与程序设计第十一讲(文件)章(36页珍藏版)》请在金锄头文库上搜索。

1、C语言程序设计基础,2014.9,第十讲 指针与函数,指针实践 检索链表非循环链表 检索链表循环链表 拷贝单链表 链表倒序,本节要点-指针与引用 指针的复杂性 递归倒序中的指针 结构嵌套中的变量表达形式 引用的概念 形参是指针 形参是引用 引用的定义 程序设计中的引用风格 引用简化复杂变量的表达形式 递归倒序中的引用,看教材自学,链表操作搜索指定节点,a1 next,a2 next,if(p-key!=key)q=p;p=p-next;,p=head;,struct node *head,*q,*p;,head,a3 next,an,否则,while(p)继续搜索,q指向an,p=NULL;,

2、while(p) if(p-key!=key)q=p;p=p-next; else return(p); ,搜索成功返回位置指针,else return(p);,p非空,递推搜索,=(struct node *)searches(head,key);,到达节点an之后,继续更新p,则p=NULL;,p为空则搜索失败,p,int searches(struct stu *head,char *key) if(!head)return(-1); while(head) if(strcmp(head-num,key)!=0)head = head -next; else return(head-sc

3、ore); return(-1); ,int类型函数,指向头结点的指针,学号检索码,表空,返回检索失败信息,当前节点非空,循环搜索,如学号如果不符,修改头指针指向下一个节点,学号相符,返回该节点成绩分量,走出循环体则该表非空,且无检索的学号,链表操作搜索指定学号节点信息,struct stu char ID40; int score; struct stu *next; ;,循环链表操作搜索指定节点,a1 next,a2 next,if(p-key!=key)q=p;p=p-next;,p=head;,struct node *head,*q,*p;,head,a3 next,an,否则,wh

4、ile(p-next!=head )继续搜索,循环表的an-next为head,搜索成功返回位置指针,else return(p);,p非空,递推搜索,=(struct node *)searches(head);,到达节点an之后,继续更新p,则p=head;,若p=head,则搜索失败,p,非循环链,循环链,函数copy将单链表A复制到单链表B,a1 next,a2 next,p=head;,struct node *head,*head2,*q,*p;,head,a3 next,an ,s next,head2,空指针,q=head2;,申请节点s,q-next=s;,使用了空指针,wh

5、ile(p) s=(struct node *)malloc(sizeof(node); s-data=p-data; q-next=s; q=s; p=p-next; ,a1,s-data=p-data;,单链表复制(二),p=head;,struct node *head,*head2,*q,*p;,head,an ,h2 next,head2,q-next=s;,s next,a1,申请节点s,an,q=s;,q=head2;,a3 next,a2 next,申请节点h2,a1 next,q=head2-next,s-data=p-data;,若走出while(p)则复制过程结束,fre

6、e(head2);,return(q);,返回头指针,head,q-next=NULL; q=head2-next; free(head2); return(q);,q=head;s=q;p=q-next; while(s) s=p-next; p-next=q; q=p; p=s; ,链表操作倒序,a1 next,a2 next,head,a3 next,an,next,head,next,an,next,a3,a2,a1,倒序,struct node *q,*p,*s;,a1 next,a2 next,head,a3 next,an,s=p-next;,p-next=q;,q=p;,p=s

7、;,s=p-next;,若S非空,到达节点an之后,需要做什么?,struct node *fv(struct node *head) if(!head)|(!head-next)return(head); struct node *p,*q,*s; q=head;s=q;p=q-next; while(s) s=p-next; p-next=q; q=p; p=s; head-next=NULL; return(q); ,a1 next,a2 next,a3 next,q,s,p,an,s,q,到达节点an之后,需要做什么?,head,head = fv(head);,head,链表操作倒序

8、,若是空链,能正常退出 只有一个节点,也能正常退出,第十一讲 文件、算法初步,计算语言与程序设计课程目标 只有一道题的期末考卷,本节要点 硬盘与文件 硬盘、文件与流的基本概念 文件概念、操作一览 文件的读写 格式化读写 数据块读写 定位函数frewind 和fseek,数据似水流,数据是程序运行时,在内存中动态产生的。 程序退出后,计算机的操作系统(OS)随即将该程序的内存空间收回,此内存空间内的数据全部消失(释放)。 如果想保留程序运行时产生的数据,就必须存储到硬盘,形成数据文件。,数据似水流,文件存盘,它保存了谁到硬盘?,数据似水流,文件存盘,它保存了谁到硬盘?,数据似水流,流的概念,C语

9、言I/O系统在程序员和物理设备之间提供了一个转换接口,或者说是一层抽象的界面,我们称它为“流”。而具体的物理实现(包括物理设备、物理存储)称之为文件。 所有的流具有相同的行为(输入/输出数据),用来进行磁盘文件写入的函数也可以进行键盘、显示器等的读写操作,逻辑上相同,仅是物理层驱动不同。,C语言中有两种类型的流: 文本流(text stream)。一个文本流由一行字符组成,换行符表示一行结束。,二进制流(binary stream)。一个二进制流对应写入到设备的内容,由字节序列组成,没有字符翻译。,硬盘与文件,硬盘原理图,磁道,每个磁道内是固定长度、 连续分布的扇区,读写磁头,柱型结构的硬盘,

10、文件在硬盘的存放形式,数据簇1,数据簇2,文件1存储区域,文件2存储区域,硬盘空间,项目2分配内存,有限的内存,函数,数据,项目2常驻数据区,目录索引区,文件1起始簇号,文件2起始簇号,建立数据文件,数据,文件就是数据流,文件是顺序存储在某块区域,内存单元用地址标记; 硬盘空间用扇区的簇号标记,没有地址的概念。 文件内部有一个偏移量i指示文件当前操作记录的下标位置。,i,0,当前操作纪录位置,1,当前操作纪录位置,2,第十一讲 文件、算法初步,计算语言与程序设计课程目标 只有一道题的期末考卷,本节要点 硬盘与文件 硬盘、文件与流的基本概念 文件概念、操作一览 文件的读写 格式化读写 数据块读写

11、 定位函数frewind 和fseek,文件概念、操作一览,数据存盘:文件,文件名.扩展名,以ASCII码存文件:一组ASCII码构成文本文件,直接把二进制存文件:一组二进制码构成二进制文件,它们都是数据流,扩展名用于文件分类,文件指针FILE *fp,fp=fopen(“文件名“,“打开方式“),字符读写函数fgetc和fputc,字符串读写函数fgets和fputs,数据块读写函数fread和fwtrite,格式化读写函数fscanf和fprintf,关闭文件 fclose(fp),首先建立 文件指针,其次在打开文件的同时描述文件名以及属性,第三是选择对应的读写函数,最后,打开的文件必须关

12、闭,语言用一指针指向一个文件,该指针称为文件指针,通过文件指针对它所指的文件进行各种操作。,文件内部的当前操作位置偏移,在文件内部有一个位置指针。用来指向文件的当前读写字节。每次读写文件之后,该位置指针将向后移动相应的字节。 在文件打开时,该指针总是指向文件的第一个字节。应注意文件指针和文件内部的位置指针不是一回事。 文件指针是指向整个文件的,须在程序中定义说明,只要不重新赋值,文件指针的值是不变的。 文件内部的位置指针可以理解为一个偏移量,用以指示文件内部的当前读写位置,每读写一次,该指针均向后移动,它不需在程序中定义说明,而是由系统自动设置的。,fp,文件,纪录在磁盘上顺序排列,i,i,i

13、,a,b,c,文件打开函数fopen(),fopen函数用来打开一个文件,其调用的一般形式为: 文件指针名=fopen(“文件名.扩展名”,”打开文件方式”); 其中: 文件指针名必须是被说明为FILE 类型的指针变量; 文件名是被打开文件的文件名,扩展名是文件类型说明,可以省略; 打开文件方式是指文件流的类型和读写操作以及新建还是追加在文件尾部要求。 例如: FILE *fp; fp=fopen(“file“,“r“); 在当前目录下打开文件file,“读”操作,并使fp指向该文件。 又如: FILE *fp; fp=fopen(“c:hzk16“,“wb+“); 打开C驱动器磁盘的根目录下

14、的一个二进制文件hzk16,按二进制方式读写操作。两个反斜线“ ”中的第一个表示转义字符,第二个表示根目录。,读一个文件,意味着它已经存在,如何从键盘输入文件名(动态指定的目录下)?,C语言与程序设计基础2014C文件路径和删除文件名的使用范例,/程序功能:从键盘上输入一个字符串,存储到一个磁盘文件lwz.dat中 /使用格式:可执行文件名=要创建的磁盘文件名 void main(void) FILE *fp; char ch; if (fp=fopen(“lwz.dat“,“w“)=NULL) printf(“can not open this filen“); getch(); exit(

15、-1); /以下程序是输入字符并存储到指定文件中,以输入符号“”作为文件结束 printf(“输入字符n“); for( ; (ch=getchar() != ; )fputc(ch,fp); fclose(fp); ,定义一个文件指针,如果打开文件失败返回的指针为空,退出循环,关闭fp指向的文件,输入字符并存储到lwz.dat文件中,打开文件操作失败,退出程序,#include;#include;#include;,建立一个文件,void input(char *); int main(void) FILE *fp; char FileName40; char ch; input(FileName); if (fp=fopen(FileName,“w“)=NULL) printf(“can not open this filen“);exit(-1); printf(“输入字符n“); for( ; (ch=getchar() != ; )fputc(ch,fp); fclose(fp); return(0); void input(char *p) printf(“输入要建立的文件名及路径:“); scanf(“%s“,p); ,从键盘输入文件名,定义一个文件指针,返回来自键盘的字符串。,按指定的文件名打开一个文件,写操作。,输

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号