




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、院 系: 计算机科学学院 专 业: 软件工程 年 级: 2013级 课程名称: 数据结构 姓 名: 韦宜(201321092034)指导教师: 宋中山 2015年 12 月 15日题目:设计一个一元稀疏多项式简单计算器班级:软件工程1301 姓名:韦宜 学号:201321092034 完成日期:12月15日1、 需求分析问题描述:设计一个一元多项式加法器基本要求:输入并建立多项式;(2)两个多项式相加;(3)输出多项式:n, c1, e1, c2, e2, cn , en, 其中,n是多项式项数,ci和ei分别是第 i 项的系数和指数,序列按指数降序排列。(4)计算多项式在x处的值;(5)求多
2、项式的导函数。软件环境:Windows,UNIX,Linux等不同平台下的Visual C+ 6.0硬件环境: 512MB内存,80Gb硬盘,Pentium4 CPU,CRT显示器。2、 概要分析本程序有五个函数:PolyNode *Input()(输入函数);PolyNode *Deri(PolyNode *head)(求导函数);PolyNode * Plus(PolyNode *A,PolyNode *B)(求和函数);void Output(PolyNode*head)(输出函数);int main()(主函数)本程序可使用带有附加头结点的单链表来实现多项式的链表表示,每个链表结点表示
3、多项式的一项,命名为node,它包括两个数据成员:系数coef和指数exp,他们都是公共数据成员,*next为指针域,用链表来表示多项式。适用于不定的多项式,特别是对于项数再运算过程中动态增长的多项式,不存在存储溢出的问题。其次,对于某些零系数项,在执行加法运算后不再是零系数项,这就需要在结果多项式中增添新的项;对于某些非零系数项,在执行加法运算后可能是零系数项,这就需要在结果多项式中删去这些项,利用链表操作,可以简单的修改结点的指针以完成这种插入和删除运算(不像在顺序方式中那样,可能移动大量数据项)运行效率高。3、 详细设计(1)主函数:int main()PolyNode *head_a,
4、*head_b;int choice;head_a=new PolyNode;head_a-next=NULL;do system(cls);/清屏函数 Output(head_a); cout _n; cout|-1.输入公式-|n; cout|-2.求 导-|n; cout|-3.两式求和-|n; cout|-4.退出程序-|n; coutchoice; if (choice=1) head_a=Input(); else if (choice=2) head_a=Deri(head_a); /求导 else if (choice=3) head_b=Input();head_a=Plus
5、(head_a,head_b);/求和 else if (choice=4) break; else coutnext!=NULL)if(p-next-exp=0) p-next=NULL; /指数为零返回else p-next-coef*=p-next-exp; /系数乘以指数p-next-exp-; /指数减一p=p-next;return head;用于对输入的多项式进行求导,求导在链表内进行计算,即运算完成链表的值改变,返回头指针。PolyNode * Plus(PolyNode *A,PolyNode *B)(求和函数):流程图如下:startNYNYNYYNNYNYNY建立链表he
6、ad,p=head,两头指针A、B均指向各自的nextA、 B为空A的指数大于B的指数A、B的系数互为倒数AB指数相等B为空A为空p-next=NULL将A的当前接点接到新链表后面,A后指A、B均后指将B接到p后面合并相同系数相同项,连接到新链表后面将A接到p后面将B的当前接点接到新链表后面,B后指如果AB都为空返回头指针ENDPolyNode*Plus(PolyNode*A,PolyNode *B) 本函数用于对多项式进行加法计算,需要运用存有两个多项式的头指针,前一头指针可是前一计算的计算结果,也可是调用输入函数,后一头指针是调用输入函数输入的多项式的头接点。经过计算得到一个新的链表,函数
7、返回链表的头指针。求和函数部分代码PolyNode * Plus(PolyNode *A,PolyNode *B)/相加PolyNode *head,*p;head=new PolyNode;p=head;A=A-next;B=B-next; while(A!=NULL|B!=NULL)if(A=NULL) p-next=B; break; /如果A空,把B后面的所有接点接到p之后if(B=NULL) p-next=A; break; /如果B空,把A后面的所有接点接到p之后 if(A-exp=B-exp) /如果两指数数相等,相加if(A-coef+B-coef!=0) p-next=new
8、 PolyNode; p=p-next; p-exp=A-exp; p-coef=A-coef+B-coef;A=A-next;B=B-next; continue; /如果两系数互为倒数,不保存,后指,继续循环if(A-exp B-exp) /A的指数大于B的指数p-next=new PolyNode;p=p-next;p-exp=A-exp;p-coef=A-coef;A=A-next; continue; /将A的当前接点接到新链表后面,A后指p-next=new PolyNode;p=p-next;p-exp=B-exp;p-coef=B-coef;B=B-next; /将B的当前接点
9、接到新链表后面,B后指if (A=NULL&B=NULL) /如果A B 都为空p-next=NULL;return head; /返回头指针(3)其他函数(同组的成员设计)#include #include using namespace std;typedef struct node float coef; /系数 int exp; /指数 struct node *next; /指针域 指向下一个系数不为0的子项 PolyNode;PolyNode *Input() /输入函数float c; /系数域int e; /指数域PolyNode *p,*q,*r,*head;cout请输入多
10、项式:n;coutnext=NULL;for (;)cince;if(c=0&e=0) break; /结束输入if(c=0) continue; /从新输入,不保存if(head-next=NULL) /输入第一个接点p-next=new PolyNode;p=p-next;p-coef=c,p-exp=e;p-next=NULL;continue;p=head;while(p-next!=NULL & enext-exp) p=p-next;/如果输入的指数小于p的下一个接点,p向后指if (e=p-exp) p-coef+=c;continue;/如果相等,直接加上去,继续循环q=new
11、 PolyNode;q-coef=c,q-exp=e;if (p-next!=NULL&ep-next-exp)/如果p的后继接点的指数小于输入的指数,插入到p的当前接点之后r=p-next;p-next=q;q-next=r;continue;p-next=q;/如果输入的值小于所有接点,接在最后一个接点之后p=p-next; p-next=NULL;return head;输出函数void Output(PolyNode*head) /输出PolyNode*p;p=head-next;if(p=NULL) cout当前没有公式或计算结果为0,请选1输入!n; return;if(p!=NU
12、LL)cout计算结果:n;coutcoefXexp;p=p-next;while(p!=NULL)cout+coefXexp;p=p-next; coutendl;cout如果想重新输入公式,请选1输入!nn;4、 调试分析与操作说明(1)当程序运行时,进入主界面。如图: 此时输入1-4选择操作(2)输入1后按回车出现: 输入1 2 3 4 5 6 0 0后按回车之后 会出现界面: (3)求导:输入2求导后按回车会出现结果: 结果正确。(4)求和:如果进入图4.3后输入3后按回车会出现界面: 图4.5求和界面输入2 2 4 4 6 6 0 0 后结果会出来: 图4.6 求和结果结果正确。此系统在得到计算结果后可以直接用计算的结果进行下一步计算,如果不想用当前的结果
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版深基坑支护与盾构掘进综合服务合同
- 二零二五年度户外休闲区搭棚设计与施工合同
- 2025版企业股权转让与合同终止补充协议
- 二零二五年度建设项目采购谈判服务标准合同
- 二零二五年度跨境供用水合作协议模板
- 二零二五年度代理记账服务与税务筹划及申报合同
- 二零二五年度法律培训与咨询一体化服务合同
- 2025版绿色建筑合作精简范本协议建议书
- 二零二五年度杭州商铺租赁合同-含租赁双方信用评估及管理
- 二零二五年度中草药养生产品原料采购合同
- 2023年电气工程师职称评审个人业务自传
- CB/T 3780-1997管子吊架
- 【表格】面试评估表(模板)
- 胫骨横向骨搬移在糖尿病足治疗中的运用
- 物资供应投标书范本
- 汉译巴利三藏中部3-后五十篇
- 眼震视图结果分析和临床意义
- 2011-2017国民经济行业分类标准转换对照表
- 《现代汉语》PPT课件(223页PPT)
- 福建省电力系统污区分布图修订说明
- 桥架支吊架安装实用标准图
评论
0/150
提交评论