二叉树的建立

上传人:博****1 文档编号:570110187 上传时间:2024-08-02 格式:PPT 页数:42 大小:258.52KB
返回 下载 相关 举报
二叉树的建立_第1页
第1页 / 共42页
二叉树的建立_第2页
第2页 / 共42页
二叉树的建立_第3页
第3页 / 共42页
二叉树的建立_第4页
第4页 / 共42页
二叉树的建立_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《二叉树的建立》由会员分享,可在线阅读,更多相关《二叉树的建立(42页珍藏版)》请在金锄头文库上搜索。

1、二叉树的建立二叉树的建立循循 环环 链链 表表文文 件件 操操 作作1二叉树的建立二叉树的建立2二叉树的建立二叉树的建立建立二叉树的过程是一个建立二叉树的过程是一个“插入插入”过程,下面我们用过程,下面我们用一个例子来讲解这一过程。一个例子来讲解这一过程。我们想建立这样一棵二叉树,树中的每一个结点有一我们想建立这样一棵二叉树,树中的每一个结点有一个整数数据名为个整数数据名为data,有两个指针:左指针,有两个指针:左指针L,右指,右指针针R,分别指向这个结点的左子树和右子树,显然可,分别指向这个结点的左子树和右子树,显然可以用如下名为以用如下名为TREE的结构来描述这种结点:的结构来描述这种结

2、点:struct TREEint data;struct TREE *L, *R;3对二叉树最重要的是根,它起定位的作用,因此,首先对二叉树最重要的是根,它起定位的作用,因此,首先建立的是根结点。也就是说,如果从键盘输入数据来建立的是根结点。也就是说,如果从键盘输入数据来建立二叉树,第一个数据就是这棵树的根的数据,之建立二叉树,第一个数据就是这棵树的根的数据,之后再输入的数据,每一个都要与根中的数据作比较,后再输入的数据,每一个都要与根中的数据作比较,以便确定该数据所在结点的插入位置。假定我们这里以便确定该数据所在结点的插入位置。假定我们这里依然用图依然用图1的中序遍历的方式。即如果待插入结点

3、的的中序遍历的方式。即如果待插入结点的数据比根结点的数据小,则将其插至左子树,否则插数据比根结点的数据小,则将其插至左子树,否则插入右子树。入右子树。定义一个递归函数定义一个递归函数void insert(struct TREE *proot, struct TREE *p)其中,指针其中,指针p指向含有待插入数据的结点。指向含有待插入数据的结点。proot为树的根指针的地址。为树的根指针的地址。insert函数棵理解为将函数棵理解为将p结点插入到结点插入到*proot所指向所指向的树中。的树中。4insert(proot, p)可用下列与或结点图来描述可用下列与或结点图来描述5注意在上图中注

4、意在上图中proot是被调用函数的形参。从前面对它是被调用函数的形参。从前面对它的定义看,的定义看,proot是指针的指针,实际上是指向二叉树是指针的指针,实际上是指向二叉树根结点的指针的指针,或者说是指向二叉树根结点的根结点的指针的指针,或者说是指向二叉树根结点的指针的地址。如下图。因此,在主程序调用指针的地址。如下图。因此,在主程序调用insert函函数时,数时,根结点根结点proot实参实参&root实参为实参为 &root, p形参为形参为 proot, p下面是建立二叉树的参考程序。下面是建立二叉树的参考程序。6#include / 预编译命令预编译命令#include / 内存空间

5、分配内存空间分配#define null 0/ 定义空指针常量定义空指针常量#define LEN sizeof(struct TREE) / 定义常量,表示结构长度定义常量,表示结构长度struct TREE/ 结构声明结构声明int data;/ 整型数整型数struct TREE *L,*R;/ TREE结构指针结构指针;7/ 被调用函数被调用函数insert,将结点插入二叉树,将结点插入二叉树void insert (struct TREE *proot, struct TREE* p) / 函数体开始函数体开始if (*proot=null)/ 如果根结点为空如果根结点为空*proo

6、t = p;/ 将结点将结点p插入根结点插入根结点return;/ 返回返回else/ 根结点不为空根结点不为空/ 如果如果p结点数据小于等于根结点数据结点数据小于等于根结点数据if (p-data data)insert( &(*proot)-L), p); / 插入左子树插入左子树else/ 如果如果p结点数据大于等于根结点数据结点数据大于等于根结点数据insert( &(*proot)-R), p); / 插入右子树插入右子树/ 函数体结束函数体结束8/ 被调用函数,形参为被调用函数,形参为TREE结构指针,输出二叉树内容结构指针,输出二叉树内容void print(struct TRE

7、E *root) / 函数体开始函数体开始if (root = null)/ 根或子树根结点为空根或子树根结点为空return;/ 返回返回print(root-L);/ 输出左子树内容输出左子树内容printf(%d,root-data);/ 输出根结点内容输出根结点内容print(root-R);/ 输出右子树内容输出右子树内容/ 被调用函数结束被调用函数结束void main()/ 主函数开始主函数开始/ 函数体开始函数体开始struct TREE *root, *p;/ TREE型结构指针型结构指针int temp;/ 临时变量,用于用户输入数据临时变量,用于用户输入数据root =

8、null;/ 初始化二叉树根结点为空初始化二叉树根结点为空p = null;/ 初始化待插入结点的指针为空初始化待插入结点的指针为空printf(请输入待插入结点的数据请输入待插入结点的数据n); / 提示信息提示信息printf(如果输入如果输入-1表示插入过程结束表示插入过程结束n);/ 提示信息提示信息scanf(%d,&temp);/ 输入待插入结点数据输入待插入结点数据9while(temp != -1)/ 当型循环,当型循环,-1为结束标志为结束标志/ 循环体开始循环体开始/ 为待插入结点分配内存单元为待插入结点分配内存单元p = (struct TREE *) malloc(LE

9、N);p-data = temp;/ 将将temp赋值给赋值给p结点的数据域结点的数据域p-L = p-R = null; / 将将p结点的左右指针域置为空结点的左右指针域置为空insert( &root, p );/ 将将p结点插入到根为结点插入到根为root的树中的树中,/ &root表示二叉树根结点的地址表示二叉树根结点的地址printf(请输入待插入结点的数据请输入待插入结点的数据n);/ 提示信息提示信息printf(如果输入如果输入-1表示插入过程结束表示插入过程结束n);/ 提示信息提示信息scanf(%d,&temp);/ 输入待插入结点数据输入待插入结点数据/ 循环体结束循环

10、体结束if (root=null) / 如果根结点为空如果根结点为空printf(这是一棵空树。这是一棵空树。n);/ 输出空树信息输出空树信息else/ 根结点不为空根结点不为空print(root);/ 调用调用print函数,输出二叉树内容函数,输出二叉树内容/ 主函数结束主函数结束10循循 环环 链链 表表11循环链表循环链表例:猴子选大王。例:猴子选大王。n只猴子围成一圈,顺时针方向从只猴子围成一圈,顺时针方向从1到到n编号。编号。之后从之后从1号开始沿顺时针方向让猴子从号开始沿顺时针方向让猴子从1,2,m依次报数,凡报到依次报数,凡报到m的猴子,都让其的猴子,都让其出圈,取消候选资

11、格。然后不停地按顺时针出圈,取消候选资格。然后不停地按顺时针方向逐一让报出方向逐一让报出m者出圈,最后剩下一个就者出圈,最后剩下一个就是猴王。是猴王。12起始位置起始位置猴猴 王王123456783615284猴子被淘汰的顺序猴子被淘汰的顺序演示:演示:n=8, m=313说明:说明:如图如图1所示有所示有8只猴子围成一圈,只猴子围成一圈,m=3。从。从1#猴的位置开始,顺时针猴的位置开始,顺时针1至至3报数,第一个出报数,第一个出圈的是圈的是3#;第二个出圈的是;第二个出圈的是6#,第,第3个出圈的个出圈的是是1#;第;第4个出圈的是个出圈的是5#;第;第5个是个是2#,第,第6个个是是8#

12、;第;第7个是个是4#。最后剩下一个是。最后剩下一个是7#,它就,它就是猴王。是猴王。我们用我们用循环链表循环链表来模拟这个选择过程。来模拟这个选择过程。141、定义一个名为、定义一个名为mon的结构的结构struct monint num;/ 整数,表示猴子的编号整数,表示猴子的编号struct mon *next; / 指针,指向相邻的下一只猴子指针,指向相邻的下一只猴子2、将链表的头指针、将链表的头指针head定义为全局变量。定义为全局变量。struct mon*head;3、主函数、主函数用键盘输入猴子数用键盘输入猴子数n,输入数,输入数m,调用函数,调用函数create建立一个建立一

13、个循环链表,模拟众猴围成一圈的情况。该函数的实参为循环链表,模拟众猴围成一圈的情况。该函数的实参为n。调用函数调用函数select,模拟,模拟1至至m报数,让报数,让n-1只猴子逐一出列的只猴子逐一出列的过程。即在具有过程。即在具有n个结点的循环链表按报数个结点的循环链表按报数m删除结点的删除结点的过程。该函数的实参为过程。该函数的实参为m,最后输出猴王的编号。,最后输出猴王的编号。154、建立循环链表的函数、建立循环链表的函数create(int nn)其中其中nn为形式参数。要从编号为形式参数。要从编号1到编号到编号nn。思路是思路是(1)先做第)先做第1个结点,让其中的数据域个结点,让其

14、中的数据域p-num赋值为赋值为1,让,让指针域赋值为指针域赋值为null。之后让链头指针。之后让链头指针head指向第指向第1个结点。个结点。利用指针利用指针q记住这个结点,以便让指针记住这个结点,以便让指针p去生成下面的结点。去生成下面的结点。(2)利用一个计数循环结构,做出第)利用一个计数循环结构,做出第2个结点到第个结点到第nn个结点。个结点。并将相邻结点一个接一个链接到一起。并将相邻结点一个接一个链接到一起。(3)最后一个结点要和头结点用下一语句链接到一起)最后一个结点要和头结点用下一语句链接到一起tail = q; tail-next = head;headtailq165、删结点

15、的函数、删结点的函数select(int mm)mm为形式参数,从为形式参数,从1至至m报数,凡报到报数,凡报到mm者删除其者删除其所在的结点。所在的结点。设计两个指针设计两个指针p和和q。一开始让。一开始让q指向链表的尾部指向链表的尾部q=tail。让让p指向指向q的下一个结点。开始时让的下一个结点。开始时让p指向指向1#猴所在的结点。猴所在的结点。用一个累加器用一个累加器x,初始时,初始时x=0,从,从1#猴所在结点开始让猴所在结点开始让x=x+1=1,如果,如果mm是是1的话,的话,1#猴所在的猴所在的p结点就要被删结点就要被删除。有三条语句除。有三条语句printf(“被删掉的猴子号为

16、被删掉的猴子号为%d号号n”,p-num);q-next = p-next;free(p);1 1head2 28 8tailqp演示演示17这里这里free(p)是释放是释放p结点所占用的内存空间的语句。结点所占用的内存空间的语句。如果如果mm不是不是1而是而是3,程序会在,程序会在do-while循环中,循环中,让让x加两次加两次1,q和和p一起移动两次,一起移动两次,p指向指向3#所在结所在结点,点,q指向指向2#所在结点,之后仍然用上述三条语句所在结点,之后仍然用上述三条语句删去删去3#所在的结点。所在的结点。1 1head2 28 8qp3 34 4q ppq演示演示18这个这个do

17、-while循环的退出条件是循环的退出条件是q=q-next。即当只。即当只剩下一个结点时才退出循环。当然猴王非其莫属了。剩下一个结点时才退出循环。当然猴王非其莫属了。这时,让头指针这时,让头指针head指向指向q,head是全局变量,在是全局变量,在主程序最后输出猴王时要用主程序最后输出猴王时要用head-num。参考程序如下:参考程序如下:7 7headq19#include / 预编译命令预编译命令#include / 内存空间分配内存空间分配#define null 0/ 定义空指针常量定义空指针常量/ 定义常量,表示结构长度定义常量,表示结构长度#define LEN sizeof(

18、struct mon)struct mon/ 结构声明结构声明int num;/ 整型数,用于记录猴子号整型数,用于记录猴子号struct mon *next;/ mon结构指针结构指针;struct mon *head, *tail;/ mon结构指针,全局变量结构指针,全局变量20void create(int nn)/ 被调用函数被调用函数/ 函数体开始函数体开始 int i;/ 整型变量整型变量i,用于计数,用于计数struct mon *p,*q;/ 声明声明mon结构指针结构指针p,q/ 为为p分配内存空间分配内存空间p=(struct mon *) malloc(LEN);p-n

19、um=1;/ 初始化初始化p结点结点num域为域为1p-next=null;/ 初始化初始化p结点结点next域为空域为空head=p;/ 链表头指针链表头指针head赋值为赋值为pq=p;/ q赋值为赋值为p21for(i=2;inum=i; / 初始化初始化p结点结点num域为域为i,表示猴子号,表示猴子号q-next=p;/ 将将p结点加到链表尾部结点加到链表尾部q=p;/ 让让q指向链表尾部结点指向链表尾部结点p-next=null;/ 链表尾部指向空链表尾部指向空/ 循环体结束循环体结束tail = q;/ 链表尾链表尾tail-next=head;/ 链表尾部指向链表头链表尾部指向

20、链表头,/ 形成循环链表形成循环链表/ 函数体结束函数体结束22/ 被调用函数被调用函数select,mm表示结点删除间隔表示结点删除间隔void select(int mm)/ 函数体开始函数体开始int x=0;/ 声明整型值声明整型值x,并初始化为,并初始化为0struct mon *p,*q;/ 声明结构指针声明结构指针p,qq=tail;/ q赋值为赋值为tail,指向循环链表尾部,指向循环链表尾部 do/ 直到型循环,用于循环删除指定间隔的结点直到型循环,用于循环删除指定间隔的结点/ 循环体开始循环体开始p=q-next;/ p赋值为赋值为q相邻的下一个结点相邻的下一个结点x=x+

21、1;/ x加加1if(x % mm=0)/ x是否整除是否整除mm,/ 表示是否跳过指定间隔表示是否跳过指定间隔/ 输出被删掉的猴子号输出被删掉的猴子号printf(被删掉的猴子号为被删掉的猴子号为%d号号n,p-num);q-next=p-next;/ 删除此结点删除此结点free(p);/ 释放空间释放空间else q=p;/ q指向相邻的下一个结点指向相邻的下一个结点pwhile(q!=q-next);/ 剩余结点数不为剩余结点数不为1,则继续循环,则继续循环head = q;/ head指向结点指向结点q,q为链表中剩余的一个结点为链表中剩余的一个结点/ 函数体结束函数体结束23voi

22、d main()/ 主函数开始主函数开始/ 函数体开始函数体开始int n,m;/ 声明整型变量声明整型变量n,mhead = null;/ 初始化初始化head为空为空 printf(请输入猴子数请输入猴子数n); / 提示信息提示信息scanf(%d,&n);/ 输入待插入结点数据输入待插入结点数据printf(请输入间隔请输入间隔mn); / 提示信息提示信息scanf(%d,&m);/ 输入间隔输入间隔 create(n);/ 调用函数调用函数create建立循环链表建立循环链表select(m);/ 调用函数调用函数select,找出剩下的猴,找出剩下的猴子子printf(猴王是猴王

23、是%d号号n,head-num); / 输出猴王输出猴王/ 函数体结束函数体结束24第十三讲第十三讲 文件文件25有关文件的概念和名词有关文件的概念和名词文件文件是信息的集合,是信息存放在外存中的一是信息的集合,是信息存放在外存中的一种形式。可以长期保存。种形式。可以长期保存。EOF文件的结束符。文件的结束符。C语言中的文件视为信息流,文件的读写是按顺序语言中的文件视为信息流,文件的读写是按顺序进行的。可以以字符为单位读写,也可以以进行的。可以以字符为单位读写,也可以以“行行”为单位读写。一行是以为单位读写。一行是以“n”为结束的一串字符。为结束的一串字符。文件指针文件指针是指向含有文件信息结

24、构的指针。文是指向含有文件信息结构的指针。文件指针又称内部文件名。件指针又称内部文件名。对文件进行操作,先要将文件打开。所谓对文件进行操作,先要将文件打开。所谓“打开文打开文件件”,就是在内存中为文件建立一个缓冲区,文件,就是在内存中为文件建立一个缓冲区,文件指针就要指向缓冲区的首地址。指针就要指向缓冲区的首地址。26标准文件标准文件C语言中规定的标准文件有三个:语言中规定的标准文件有三个:1、标准输入文件(键盘),文件指针为、标准输入文件(键盘),文件指针为stdin;2、标准输出文件(显示屏幕),文件指针为、标准输出文件(显示屏幕),文件指针为stdout;3、标准出错信息文件,文件指针为

25、、标准出错信息文件,文件指针为stderr。特点是这些文件在操作前或后,系统会自动将其打开特点是这些文件在操作前或后,系统会自动将其打开或关闭,程序不需管。或关闭,程序不需管。27一般文件一般文件特点:特点:操作前需打开,操作后需关闭。开和闭均是通操作前需打开,操作后需关闭。开和闭均是通过函数进行的。过函数进行的。打开文件打开文件就是要在内存中建立缓冲区,如打开成功,就是要在内存中建立缓冲区,如打开成功,打开函数返回一个内存地址值,由一个文件指针接打开函数返回一个内存地址值,由一个文件指针接收。以后的操作使用这个指针。如内存不可建立缓收。以后的操作使用这个指针。如内存不可建立缓冲区,则打开失败

26、,打开函数返回冲区,则打开失败,打开函数返回NULL。关闭文件关闭文件很重要,是要将文件送回磁盘,并从内存中很重要,是要将文件送回磁盘,并从内存中清除。及时释放内存空间,并可保证文件安全。清除。及时释放内存空间,并可保证文件安全。28标准文件的操作标准文件的操作1、getchar(),从标准输入文件,从标准输入文件中使中使用该函数可以得到一个字符。返回值是该字用该函数可以得到一个字符。返回值是该字符的符的ASCII码值。因此可见返回值是码值。因此可见返回值是int型的。型的。2、putchar(),将字符代码送至屏幕上,显示,将字符代码送至屏幕上,显示成字符。成字符。29#include vo

27、id main()/ 主函数主函数/ 主函数开始主函数开始int temp;/ 定义整型变量定义整型变量while(temp=getchar()!=EOF)/ 标准输入未结束标准输入未结束if (temp=a & temp=z) / 小写字母小写字母/ 将对应的大写字母将对应的大写字母 输出到屏幕输出到屏幕putchar(temp-a+A);elseputchar(temp);/ 输出到屏幕输出到屏幕/ 主函数结束主函数结束例例 文件文件1.c30说明:说明:1、由于、由于getchar()返回的是整数(返回的是整数(ASCII码值)码值),因此,因此,temp定义为整数型。定义为整数型。2、

28、EOF被定义为被定义为-1,当,当getchar()函数返回函数返回-1时结束,这时结束,这里里EOF被定义为被定义为-1,在,在DOS系统中只有用系统中只有用+Z才才能结束键盘输入。从实验中可以看出能结束键盘输入。从实验中可以看出getchar()函数是函数是将键盘输入的字符的将键盘输入的字符的ASCII码的形式存至缓冲区,敲码的形式存至缓冲区,敲入字符之后,须回车才响应输出入字符之后,须回车才响应输出a / 敲入的小写字符敲入的小写字符temp = 97 / 回车之后,输入回车之后,输入a的的ASCII码码A / 回应大写字符回应大写字符A,temp = 10 / 输出回车键的输出回车键的

29、ASCII码值码值313、在上述程序基础上,将、在上述程序基础上,将getchar改为改为getch,观察程序运行情况。这时不再显示敲入的小观察程序运行情况。这时不再显示敲入的小写字母,屏幕上看到的都是大写字母了。但写字母,屏幕上看到的都是大写字母了。但显示的显示的ASCII码值仍是小写字母的码值。码值仍是小写字母的码值。退出方式用退出方式用+4、将、将getch改为改为getche再试,观察有何变化?再试,观察有何变化?5、字符串的读写函数、字符串的读写函数gets()和和puts()。32#include / 预编译命令预编译命令#define null 0/ 定义定义null为空为空vo

30、id main()/ 主函数主函数/ 主函数开始主函数开始char s256;/ 定义字符数组定义字符数组sint no;/ 定义整型变量定义整型变量nono = 1;/ 初始化初始化no为为1while(gets(s)!=null)/ s须为指针须为指针/ 循环体开始循环体开始printf(“%d:%sn”,no,s);/ 输出输出no和和sprintf(“%Xn”,s);/ s是指针是指针no=no+1;/ no加加1/ 循环体结束循环体结束/ 主函数结束主函数结束例例 文件文件2.c33说明:说明:gets(s)函数的形参为字符指针,指向一个由键盘输函数的形参为字符指针,指向一个由键盘输

31、入的字符串。正常时返回一个读取到的字符串的入的字符串。正常时返回一个读取到的字符串的首地址。出错时返回首地址。出错时返回NULL。输入的字符串以。输入的字符串以n结束,该函数在内存中将结束,该函数在内存中将n以以0存放,从而使存放,从而使s变为字符串。变为字符串。看下例:看下例:34puts(s)是将是将s所指向的字符串写到屏幕上,写时将所指向的字符串写到屏幕上,写时将n转换为转换为0。6、使用、使用printf( ),scanf( ) 略略#include / 预编译命令预编译命令#define null 0/ 定义空指针常量定义空指针常量void main()/ 主函数主函数/ 主函数开始

32、主函数开始char s256;/ 定义字符串定义字符串while(gets(s)!=null)/ 循环输入循环输入puts(s);/ 输出输出s到屏幕到屏幕/ 循环体结束循环体结束35一般文件的操作一般文件的操作1、打开和关闭文件函数、打开和关闭文件函数1.1 打开文件函数打开文件函数 fopen( ) 格式为格式为fopen( “文件名文件名”, 打开方式打开方式);“r”:读方式:读方式 “w”:写方式:写方式 “a”:追加方:追加方式式“rb”:二进制读方式:二进制读方式“wb”:二进制写方式:二进制写方式“ab”:二进制追加方:二进制追加方式式“rw”:读写方式:读写方式36用用“r”

33、只能读不能写,用只能读不能写,用“w”只能写不能读。只能写不能读。用用“a”打开的文件可向已有文件内容后边增加新的内打开的文件可向已有文件内容后边增加新的内容。使原内容不被新内容所覆盖。容。使原内容不被新内容所覆盖。在用文本文件输入时,将回车换行符转换为一个换行在用文本文件输入时,将回车换行符转换为一个换行符;在输出时,把换行符转换成回车符和换行符(两符;在输出时,把换行符转换成回车符和换行符(两个字符),在用二进制文件时,不作上述转换,内存个字符),在用二进制文件时,不作上述转换,内存当中的数据形式与输出到外部文件中的数据形式完全当中的数据形式与输出到外部文件中的数据形式完全一样。一样。fo

34、pen函数有一个返回值,正常时返回一个文件指针,函数有一个返回值,正常时返回一个文件指针,指向内存为该文件开辟的缓冲区首地址。失败时返回指向内存为该文件开辟的缓冲区首地址。失败时返回NULL。比如该文件并不存在,你要打开它,当然要。比如该文件并不存在,你要打开它,当然要返回返回NULL。为了写或追加写时,如果要打开的文件不存在,这时为了写或追加写时,如果要打开的文件不存在,这时系统会自动帮你建立一个要打开的文件。系统会自动帮你建立一个要打开的文件。37实际使用时要判断实际使用时要判断fopen( )函数的返回值。函数的返回值。常用语句为常用语句为if (fp=fopen(“f1.c”, “rw

35、”)=NULL)printf(“Cant open this file.n”);exit(1);其中的其中的fp是已经定义好的文件指针。是已经定义好的文件指针。1.2 关闭文件的函数为关闭文件的函数为 fclose(文件指针文件指针);这个函数在正常情况下返回值为这个函数在正常情况下返回值为0,关闭有错时返,关闭有错时返回非回非0值,可用值,可用ferror()函数来检查。函数来检查。382、文件的读和写、文件的读和写#include char s=“I am a student”;void main()char a100;/ 定义定义a字符串字符串FILE *fp;/ 定义文件指针为定义文件

36、指针为fpint n=strlen(s); / 字符串字符串s的长度的长度 / 打开打开f1.txt文件,写方式,文件,写方式,fp不为空不为空if (fp=fopen(“f1.txt”,”w”)!=NULL)/ 将将s所指的字符串写到所指的字符串写到fp所指的文件中所指的文件中fputs(s,fp);fclose(fp);39/ 打开打开f1.txt文件,读,文件指针为文件,读,文件指针为fpfp = fopen(“f1.txt”,”r”);/ 将将fp所指的文件中的内容读到所指的文件中的内容读到a中去中去fgets(a, n+1, fp);printf(“%sn”,a);/ 输出输出a中的

37、内容中的内容fclose(fp);/ 关闭关闭fp所指向的文件所指向的文件/ 主函数结束主函数结束说明:说明:1、要进行文件读写操作先要定义文件指针。、要进行文件读写操作先要定义文件指针。使用使用FILE *fp,(,(fp可以是其它名称)可以是其它名称)2、测出、测出s字符串长度,使用字符串长度,使用int n=strlen(s);403、打开、打开“f1.txt”,“w”,要往,要往f1.txt中写入。如空中写入。如空则自动建立一个文件,自然不会空了。则自动建立一个文件,自然不会空了。4、fputs(s,fp)是说将是说将s字符串写入由指针字符串写入由指针fp所指向的所指向的f1.txt文

38、件中。文件中。5、fclose(fp),将,将fp所指向的所指向的f1.txt文件关闭。文件关闭。6、打开、打开 f1.txt 用读的方式用读的方式fp=fopen(“f1.txt”, “r”);7、将读出的字符串放入、将读出的字符串放入a串中,在使用串中,在使用fgets()函数时用函数时用fgets(a,n+1,fp);其中其中a是已经定义好的字符串,是已经定义好的字符串,n+1是是让让fp所向的文件内容,依次取所向的文件内容,依次取n个字符给个字符给a,这,这n个字个字符恰为符恰为s串的内容,之后还要在该串后自动加入一个串的内容,之后还要在该串后自动加入一个0字符。因此要写字符。因此要写n+1。41结结 束束42

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

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