ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:43.36KB ,
资源ID:7357318      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7357318.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(简易文本编辑器.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

简易文本编辑器.docx

1、简易文本编辑器软件综合课程设计简易文本编辑器猴子吃桃子问题 二一四 年 六 月猴子吃桃子问题1问题陈述 有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。?要求:1)采用数组数据结构实现上述求解2)采用链数据结构实现上述求解3)采用递归实现上述求解如果用数组结构解决这个问题,把猴子吃桃的天数倒过来看的话,以天数作为数组的下标i,剩下桃子的个数ai的递推公式为ai=(ai-1+1)*2。ai实际代表了倒数第i天剩下的桃子数。所以可以求得此数组的通项公式为ai=3*2e(i-1)-2 (i=2)。如果用链结

2、构解决这个问题,建立一个链表,根据每天桃子数与后一天桃子数的关系n=2*n+2,依次将每天的桃子数存进链表中,最后输出第一天的桃子数。首先是建立一个空链表,产生一个头结点,且将头结点的地址赋给L。 然后把每天的桃子数从链表的第一个结点插入链表。最后第一天的桃子数被最后一个插入链表,成为链表中第一个值,将其赋给e,最后只要输出e即得到第一天的桃子数。如果用递归结构解决这个问题,要求利用他们每天都吃当前桃子的一半且再多吃一个这一特点,设计一个递归算法。2程序代码#include#include#includeiostream#includestdlib.h#define TRUE 1#define

3、 FALSE 0#define ERROR 0#define OVERFLOW 0#define OK 1#define NULL 0typedef int Status;typedef int ElemType;struct LNodeElemType data;LNode *next;typedef LNode *LinkList;void InitList(LinkList &L)/构造一个空链链表L=(LinkList)malloc(sizeof(LNode);/产生头结点,并使L指向此头结点if(!L) exit(OVERFLOW);L-next=NULL;Status GetEle

4、m(LinkList L,int i,ElemType &e)/当第i个元素存在的时,将其值赋给eint j=1;/计数器初值为0LinkList p=L-next;/p指向第一个结点while(p&jnext;if(!p|ji)return ERROR;e=p-data;return OK;Status ListInsert(LinkList L,int i,ElemType e)/在第i个位置之前插入元素e int j=0;/计数器初值为0LinkList s,p=L;/p指向头结点while(p&jnext;if(!p|ji-1) return 0;s=(LinkList)malloc(

5、sizeof(LNode);/生成新的结点s-data=e;s-next=p-next;/新结点指向原第i个结点p-next=s;/原第i-1个结点指向新结点return 1;void shuju()int da,tao11; /定义数组和下标tao0=0; /tao0赋值为0tao1=1; /倒数第一天的桃子数为1for(da=2;da0)n=sum_fan(n+1)*2,-i); /每一次都用(n+1)*2)的值去调用子函数本身return n; /返回结果void main()int sum;int day=9; /实现函数调用的次数int x=1; /最后一天还剩得一个桃子int t;

6、LinkList L;int i,e,n;InitList(L);/初始化链表doprintf(n);printf(*n); printf(1、数组数据结构实现n); printf(2、链数据结构实现 n);printf(3、递归实现 n); printf(4、退出 n);printf(*n); printf(请选择(14):); scanf(%d,&t); if(t4)&(t1)printf(对不起,无此功能,请输入正确的功能序号!n); /getchar();elseswitch(t) case 2: sum=sum_fan(x,day); /调用子函数sum_fan,并把返回得结果赋给s

7、um printf(%d,sum);break;case 1: shuju();break;case 3: for(i=1,n=1;i=10;i+)n=2*n+2;/将每一天的桃子数赋值给nListInsert(L,1,n);/将n的值输入链表GetElem(L,2,e);printf(最初的桃子数为%d,e);/输出桃子的数目break;if(t=4) break; while(1); 3运行结果(1)数组数据结构实现结果,如图3-1所示:图3-1(2)链数据结构实现结果,如图3-2所示:图3-2(3)递归实现结果,如图3-3所示:图3-3 简易文本编辑器1问题陈述(1)设计内容和要求1)

8、具有图形菜单界面;2) 查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除3) 可正确存盘、取盘;4) 正确显示总行数。2需求分析要设计一简易的文本编辑器,要求有图形菜单界面,也就是菜单选择的界面,要实现的功能有对文本进行存盘,取盘,在某一个盘中新建一个TXT的文件,在里面输入内容,对这个文件进行取盘,显示出文本内容,并在显示的时候显示行数,具有对文本进行查找、替换、插入、移动、删除等功能。为实现数据的有序存储,该编辑器应该用顺序表来存储输入的信息。顺序表是数据结构中线性表的一种,它是用一块地址连续的存储空间依次存储线性表的元素。其特点为:在顺序表上逻辑关系

9、相邻的两个元素在物理位置上也相邻;在顺序表上可以随即存取表中的元素。在编辑器的主界面中应有如下提示信息:显示当前文本信息:从文件中读出文本,在某一个盘中创建一个文本文件,所以要读出来,显示到显示器上,并统计出行数。查找文本信息:因为在下面做插入,删除,移动之类的都需用到查找,在查找的时候,也要调用一个字符匹配模式的程序,来判断查找的内容是否符合所要查找的内容。删除文本信息:首先在数组中查找要删除的信息,查找的时候调用匹配模式的子函数,如果找到该信息,提示是否确认删除该信息,通过确认来删除信息,如果未找到要删除的信息,提示未找到该信息;插入文本信息:首先调用字符匹配模式的子函数找到插入点,如果找

10、到该插入点,提示输入插入信息,确认插入信息后,选择是否在这个位置插入,如果是的话执行插入,不是的话再往下查找下一个插入点。 替换文本信息:首先在数组中查找要被替换的信息,如果找到该信息,提示输入要替换的信息内容,否则提示未找到要被替换的信息; 保存文本信息:在这里使用文件写入读出的功能,把你修改完的内容保存到你所建立的文本中。 显示文本内容:读出文件中的所有字符,显示到显示器上。退出3概要设计(1)所用到的函数有: 文件的打开:void open(char text);文件的保存:void save(char text); 查找文本:void search(char text,int l);字

11、符的匹配:int strindex(char text,char t,int i2,int l);文本的输出:void output(char text);删除文本:void Delete(char p,int l);插入文本:void insert(char text,int l);替换文本:void Replace(int status);(2)程序流程图:程序分为了多个子函数,程序中的子模块的分类图,总共分为了六个主要的模块,分别是否打开,保存,查找,删除,插入,替换,这六个模块的选择,在菜单的子程序中进行,在main函数中进入菜单选择,进行功能的选择。流程如图3-1所示: 图3-1在程

12、序中,查找,删除,插入,替换的子程序都需要调用到int strindex(char text,char t,int i2,int l);的子程序,据此画出了程序的执行的流程图,程序的执行的简单的流程图,如图3-2所示:图3-24详细设计(1)对于文本内容的处理,查找部分仍是使用循环对已存储的文章进行匹配,判断需要查找的字符或者字符串是否与文章中某部分内容相同,在程序的执行中,先是进入的主函数,在主函数中调用了菜单函数,进行功能的选择,各个模块分为多个函数来实现。在程序中,设置了几个全局变量,来记录文本的内容等信息:char textMAX=; /文本编辑域char name20=; /文件保存

13、的位置int status=0; /显示是否保存过的状态int ntext; /文本编辑的位置(2)字符匹配在这个程序中要特别注意的是字符的匹配,因为查找、插入、替换都需要用到这一步设计。在这里我设计了一个子模块来实现匹配:int strindex(char text,char t,int i2,int l) /查找要操作的数据的位置(模式匹配) int i1=l,j=0; while (i1ntext&j=i2) return(i1-i2); /返回匹配的第一个字符的下标 else return(-1); /模式匹配不成功(3)按行来实现查找而且程序中用的顺序表存储的形式,在执行的时候考虑到

14、在查找时,要显示是在第几行第几列的位置,但是程序并不是用二维数组来实现的,并不记录文本中每一个字符的行列号,所以如果直接一下子统计出来的话,就会出现行列号上的错误,所以在程序中使用了一下LOOP语句,来让程序一行一行的统计与显示。当调用strindex(text,str1,t,l)函数时,得到返回值,如果a!=-1时,得到返回的是查找的字符串的第一字符的下标,l=a+t;t是字符的长度,hs,ls,分别记录行号与列号。loop: a=strindex(text,str1,t,l); if (a!=-1) l=a+t; int hs=1,ls=0; for (i=0;i=a;i+) ls+; i

15、f (texti=n) hs+;ls=0; if (a=-1) printf(查找到结尾没有找到n输入【R】将重头查找;); l=0; fflush(stdin); pd=getchar(); else printf(已经找到在第%d行第%d列,输入【R】继续查找下一处;,hs,ls); kk+=1; fflush(stdin); bd=getchar(); if (bd=R|bd=r) goto loop; (4)插入在插入的时候是先要调用上面的查找的子函数,在插入的时候也是考虑到行列号的问题,所以我在这里也是用LOOP语句,通过一行一行的查找,找到你所要插入的地方,就进行插入操作,如果不是

16、这个地方要插入的话,就继续往下执行查找,查找完所有的符合的,显示完后,最后统计总共有多少次。在这个子程序中定义一个数组Cr来放置插入的位置点。loop: a=strindex(text,cr,t,l); /查找并返回要插入的位置点 int hs=1,ls=0; for (b=0;b=a;i-) texti+t2=texti; for (i=0;it2;i+) texti+a=xi; ntext=ntext+t2; printf(n当前文本信息为:n); for (i=0;i=ntext-1;i+) printf(%c,texti); printf(n文本插入成功n); fflush(stdin

17、); getchar(); (5)替换做替换的时候,定义一个数组来放替换的内容,另一个数组放替换后的内容,而且在做替换时也要调用字符匹配的子程序。loop: a=strindex(p,bth,t,l); /查找要被替换的内容的位置 int hs=1,ls=0; for (b=0;ba;b+) ls+; if (pb=n) hs+; ls=0; if (a=-1) printf(n查找到结尾没有找到要被替换的内容n输入【R】查找其他内容n); l=0; d=getchar(); else printf(nn已经找到要查找的数据在第%d行第%d列n输入,hs,ls+1); printf(n【A】继

18、续向后查找相同内容n输入其他键将进行替换操作n请选择:); l=t+a; char pd; pd=getchar(); if (pd!=a&pd!=A) printf(n是否要替换该内容?nA:替换给内容;其他键返回主菜单n请选择:); d1=getchar(); if (d1=a|d1=A) printf(n输入要替换的内容,以结束:); while (c=getchar()!=) /t1指替换后的内容长度 if (c=) break; else tht1+=c; continue; if (t=t1) /将要被替换的内容和替换后的内容进行长度比较 for (i=0;it1) for (i=

19、0;it1;i+) pi+a=thi; for (i=a+t1;i=a;i-) pi+t1-t=pi; for (i=0;it1;i+) pi+a=thi; ntext=ntext+t1-t; printf(替换成功); printf(n当前文本信息为:n); for (i2=0;i2=ntext-1;i2+) printf(%c,pi2); getchar(); status=0; else goto loop; (6)删除删除的时候,也需要调用字符匹配的子程序,找到了要删除的内容,再进行删除,loop: a=strindex(p,x,t2,l); int hs=1,ls=0; for (i

20、=0;i=a;i+) ls+; if (pi=n) hs+; ls=0; if (a=-1) printf(已查找结束,您要删除的内容不存在n输入【R】重新输入要删除的内容; ); l=0; fflush(stdin); pdx=getchar(); else printf(你要删除的内容在第%d行第%d列n 输入【A】确定删除;输入【B】寻找下个词;,hs,ls); fflush(stdin); pd=getchar(); l=t2+a; if (pd=a|pd=A) for(i=a;intext;i+) pi=pi+t2; ntext=ntext-t2; printf(删除成功,删除后的内

21、容为:n%sn,text); else if (pd=b|pd=B) goto loop; 5程序代码#includestdio.h#include stdlib.h #include string.hvoid open(char text);void save(char text); void search(char text,int l);int strindex(char text,char t,int i2,int l);void output(char text);void Delete(char p,int l);void insert(char text,int l);void

22、Replace(int status);void menu(); #define MAX 10000char textMAX=; /文本编辑域char name20=; /文件保存的位置int status=0; /显示是否保存过的状态int ntext; /文本编辑的位置 void open(char text) system(cls); FILE *fp; char pd,ch; char name30; int i=0,ss=1; printf(输入A:确定打开文件 M:返回主菜单); fflush(stdin); pd=getchar(); if (pd=A|pd=a) printf(

23、请输入要打开文件名字(例如c:a.txt)); scanf(%s,name); while (fp=fopen(name,r)=NULL) printf(n打开文件失败,请重新输入要打开的文件名:); scanf(%s,name); system(cls); while(!feof(fp) ch=fgetc(fp);if(ch=n) ss+; texti+=ch; texti=0; ntext=i; fclose(fp); printf(n文件读取成功n文件内容为n); output(text); printf(有%d行,ss); if (pd=M|pd=m) menu(); void sav

24、e(char text) system(cls); FILE *fp; char pd; char tmp; int i; printf(n输入【A】保存;n); fflush(stdin); pd=getchar(); if (!(pd=A|pd=a) menu(); else if(name20=NULL) printf(n请输入保存文件名(例如: c:a.txt):); scanf(%s,name); while (fp=fopen(name,w+)=NULL) printf(文件不存在,请重新输入文件名:); scanf(%s,name); printf(nA:确定;B:取消:); while(scanf(%c,&tmp)!=EOF) if (tmp=A | tmp=a) for(i=0;intext;i+) fprintf(fp,%c,texti); fclose(fp); status=1; printf(n文件保存成功n); break; if (tmp=B | tmp=b) break; /

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1