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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(多项式类的设计与实现(MFC).doc)为本站会员(精品资料)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

多项式类的设计与实现(MFC).doc

1、封 皮题目:班级:姓名:学号:日期:课 程 设 计 任 务 书学院 专业学生姓名 学号设计题目 多项式类的设计与实现内容及要求:开发多项式类 Polynomial,多项式的每一项用链表的结点表示,每项包含一个系数和一个指数。例如:2x 4的指数为 4,系数为 2。请开发一个完整的 Polynomial 类,包括构造函数、析构函数以及“get”函数(读取值)和“set”函数(设置值) 。该类还要提供以下重载的运算符:(1) 重载加法运算符,将两个多项式相加。(2) 重载加法运算符,将两个多项式相减。(3) 重载赋值运算符,将一个多项式赋给另外一个多项式。(4) 重载加法运算符*,将两个多项式相乘

2、。(5) 编写一个主函数测试多项式类的上述功能。进度安排:第 17 周:分析题目,查阅课题相关资料,进行类设计、算法设计;第 18 周:程序的设计、调试与实现;第 19 周:程序测试与分析,撰写课程设计报告,进行答辩验收。指导教师(签字):年 月 日学院院长(签字)年 月 日目 录1 需求分析 .- 1 -2 算法基本原理 .- 1 -3 类设计 .- 2 -4 详细设计 .- 2 -4.1 类的接口设计 .- 2 -4.2 类的实现 .- 3 -4.3 主函数设计 .- 12 -5 DOS 界面程序运行结果及分析 .- 14 -5.1 程序运行结果 .- 14 -5.2 运行结果分析 - 1

3、5 -6 基于 MFC 的图形界面程序开发 .- 15 -6.1 基于 MFC 的图形界面程序设计 .- 15 -6.2 程序测试 .- 27 -6.3 MFC 程序编写总结 .- 29 -7 参考文献 .- 29 - 1 -1 需求分析(1) 开发多项式类 Polynomial,多项式的每一项用链表的结点表示,每项包含一个系数和一个指数。例如:2x 4的指数为 4,系数为 2。请开发一个完整的 Polynomial 类,包括构造函数、析构函数以及“get”函数(读取值)和“set”函数(设置值) 。(2)多项式的定义:n 个单项式的代数和叫多项式。(3)程序测试数据:P1:2x+3x2+2x

4、4+3x2P2:3x2+2x3(1)2 算法基本原理设有 2 个多项式 p1,p2P1:2x+3x2+2x4+3x2P2:3x2+2x3实现多项式 p1 和 p2 的计算,关键是对 p1 和 p2 的指数和系数进行加减生的操作,我们可以先编辑一个基类 Polynominal。通过链表和重载运算符的方法来实现。(1)多项式即个个单项式的和,我们可以把一个多项式分解成一项一项来看,每一项用链表的一个节点表示,每个节点包括一个单项式的系数、指数和指向该节点类型的一个指针。(2)用 Polynominal 创建对象 p1、p2、p3,通过调用 Create(c1,e1,size1)函数来构建多项式。(

5、3)通过重载+、-、*以及=运算符,对多项式进行操作。(4)通过 p1.Print()来显示结果。- 2 -3 类设计从上面的算法分析可以看到,本设计面临的计算问题的关键是多项式运算。可以定义一个多项式类 Polynominal。(1)该类包括私有数据成员 Node *head,Node 是构造的节点类型的结构体,包括系数、指数和指向该节点类型的一个指针。(2)成员函数包括 Polynominal()/构造函数, Polynominal(const Polynominal /读取指数为 e 的项 ,返回其指针, void set(double c,int e);/设置指数为 e 的项的系数为c

6、, void Create(double *c,int *e,int n);/创建多项式,friend Polynominal operator +(Polynominal a,Polynominal b);/重载+运算符, friend Polynominal operator -(Polynominal a,Polynominal b);/重载-运算符, friend Polynominal operator *(Polynominal a,Polynominal b);/重载*运算符,friend ostreamif (p) delete p;p=q;head=NULL;Node* ge

7、t(int e);/读取指数为 e 的项,返回其指针void set(double c,int e);/设置指数为 e 的项的系数为 cvoid Create(double *c,int *e,int n);/创建多项式friend Polynominal operator +(Polynominal a,Polynominal b);/重载+运算符friend Polynominal operator -(Polynominal a,Polynominal b);/重载-运算符friend Polynominal operator *(Polynominal a,Polynominal b)

8、;/重载*运算符friend ostream/指数double coef;/系数Node *next;void Polynominal:Copy(const Polynominal p=a.head;s=head=0;while(p)t=new Node;if (head=0) head=t;t-coef=p-coef;t-exp=p-exp;p=p-next;if(s) s-next=t;s=t;if (s) s-next=0;Polynominal:Polynominal(const Polynominalvoid Polynominal:Create(double *c,int *e,i

9、nt n)/创建多项式if (ncoef=c0;head-exp=e0;Node *q,*p=head;for (int i=1;icoef=ci;q-exp=ei;p-next=q;p=q;p-next=0;Node* Polynominal:get(int e)/读取指数为 e 的项Node *p=head;while (p)if (p-exp=e) return p;p=p-next;return p;/没有找到,返回空指针void Polynominal:set(double c,int e)/将指数为 e 系数为 c 的项加入多项式(原多项式无指数为 e 的项 )Node *q,*p

10、,*t;t=new Node;t-coef=c;t-exp=e;- 6 -if (head=0)head=t;head-next=0;return;if (ehead-exp)t-next=head;head=t;/插入头部return;p=head;while (p p=p-next;if (p)/新的项插入 p 所指结点前t-next=p;q-next=t;else/插入尾部q-next=t;t-next=0;Polynominal operator +(Polynominal a,Polynominal b)/重载+运算符Polynominal temp;Node *p,*q,*s,*t

11、;- 7 -double x;s=new Node;temp.head=s;/先增加一个头结点p=a.head;q=b.head;while (p if (x!=0.0)t=new Node;t-exp=p-exp;t-coef=x;s-next=t;s=t;p=p-next;q=q-next;else t=new Node;if(p-expq-exp)t-coef=p-coef;t-exp=p-exp; p=p-next;elset-coef=q-coef;t-exp=q-exp;q=q-next;- 8 -s-next=t;s=t;if (q) p=q;/p 恒指向余下的项while (p

12、)t=new Node;t-coef=p-coef;t-exp=p-exp;s-next=t;s=t;p=p-next;s-next=0; /链表尾标记s=temp.head;temp.head=s-next;delete s; /删除多余的头结点return temp;Polynominal operator -(Polynominal a,Polynominal b)/重载-运算符Polynominal temp;Node *p,*q,*s=0,*t;/在此处添加代码,完成此函数(模仿上述重载“+“的函数)double x;s=new Node;temp.head=s;/先增加一个头结点p

13、=a.head;q=b.head;while (p if (x!=0.0)t=new Node;t-exp=p-exp;t-coef=x;s-next=t;s=t;p=p-next;q=q-next;else t=new Node;if(p-expq-exp)t-coef=p-coef;t-exp=p-exp; p=p-next;elset-coef=-q-coef;t-exp=q-exp;q=q-next;s-next=t;s=t;if (q) p=q;/p 恒指向余下的项while (p)- 10 -t=new Node;t-coef=p-coef;t-exp=p-exp;s-next=t

14、;s=t;p=p-next;s-next=0; /链表尾标记s=temp.head;temp.head=s-next;delete s; /删除多余的头结点return temp;Polynominal operator *(Polynominal a,Polynominal b)/重载*运算符Polynominal temp;Node *p,*q,*s;int e;double c;p=a.head;while (p)q=b.head;while (q)c=p-coef*q-coef;e=p-exp+q-exp;s=temp.get(e);/查 temp 中有无指数为 e 的项if (s)/

15、temp 中无指数为 e 的项s-coef+=c;else/temp 中无指数为 e 的项temp.set(c,e);q=q-next;p=p-next;- 11 -return temp;ostreamdelete p;p=s;Copy(a);return *this;void Polynominal:Print(ostreamint e;if (head)e=head-exp;- 12 -oscoef;if (e1) osnext;while (p)e=p-exp;if (p-coef!=0.0)/系数非零if (p-coef0.0) oscoef;else oscoef;if (e1)

16、osnext;ossize1;coutc1i;coute1i;coutsize2;coutc2i;coute2i;Polynominal p1,p2,p3;p1.Create(c1,e1,size1);/创建多项式 p1p2.Create(c2,e2,size2);/创建多项式 p2coutnext=f(m_expn2,m_coef2);d2=d2-next;elseh2=f(m_expn2,m_coef2);d2=h2;m_screen2.Format(“%s“,show(h2);UpdateData(false); 编写显示的消息处理函数,具体代码如下:CString show(node

17、*h)/显示函数node *t=h;- 20 -CString e,c,w,u,x,v;while(t)/多项式的显示if(t-coef=0)/多项式的项系数等于 0 的情况v=v;else if(t-coef0)/多项式的项系数大于 0 的情况w.Format(“%s“,“+“);c.Format(“%g“,t-coef);x.Format(“%s“,“X“);u.Format(“%s“,“);e.Format(“%d“,t-expn);if(t-coef=1)if(t-expn=1)if(h=t)/该项是否是显示的第一位v=v+x;elsev=v+w+x;else if(t-expn=0)

18、if(h=t)v=v+c;elsev=v+w+c;elseif(h=t)v=v+x+u+e;- 21 -elsev=v+w+x+u+e;elseif(t-expn=0)if(h=t)v=v+c;elsev=v+w+c;else if(t-expn=1)if(h=t)v=v+c+x;elsev=v+w+c+x;elseif(h=t)v=v+c+x+u+e;elsev=v+w+c+x+u+e;else if(t-coefcoef);x.Format(“%s“,“X“);- 22 -u.Format(“%s“,“);e.Format(“%d“,t-expn);if(t-coef=-1)if(t-ex

19、pn=0)v=v+c;else if(t-expn=1)v=v+w+x;elsev=v+w+x+u+e;elseif(t-expn=0)v=v+c;else if(t-expn=1)v=v+c+x;elsev=v+c+x+u+e;t=t-next;if(v=“)v=“0“;return v; 编写加,减法运算的消息处理函数,具体代码如下:node *add(node *p1,node *p2)/多项式加法运算node *h,*q1,*q2,*t,*k;- 23 -q1=p1;q2=p2;h=k=new node;k-next=p1;while(q1 q1=q1-next;k=k-next;t=

20、q2;q2=q2-next;delete t;else if(q1-expnq2-expn)/第一项的指数比第二项指数大的情况k-next=q2;t=q2-next;q2-next=q1;k=k-next;q2=t;else if(q1-expnexpn)/第一项的指数比第二项指数小的情况q1=q1-next;k=k-next;if(q2)k-next=q2;t=h;h=h-next;- 24 -delete t;return h; 编写乘法运算处理函数,具体代码如下:node *multiply(node *p1,node *p2)node *i,*j,*k,*s,*l,*m,*n;/乘法算

21、法i=p1;j=p2;m=j;/保存 j 的头结点k=f(0,0);/保存 k 为头结点while(i)/创建乘法计算结果链表,形成头结点为 k 的链表 j=m;while(j)/乘法计算算法,并实现升序排序 l=f(0,0);/新计算结果保存在一个单独结点中,用于对之前生成的链表进行对比,形成升序排列l-coef=(i-coef)*(j-coef);l-expn=(i-expn)+(j-expn);n=k ;s=k-next;/s 用于对链表的遍历, n 为 s 前驱while(s)if(l-expn=s-expn)s-coef+=l-coef;delete l;break;else if(

22、l-expnexpn)n-next=l;- 25 -l-next=s;break;elsen=n-next;s=s-next;if(s=NULL)n-next=l;j=j-next;i=i-next;return k-next; 编写构造多项式具体代码如下:struct nodeint expn;float coef;node *next;/结点结构体node *f(int a,float b)node *p=new node;- 26 -p-coef=b;p-expn=a;p-next=NULL;return p;/创建结点node *copy(node *p)/复制链表的函数node *h

23、,*d,*q,*k,*s;h=f(0,0);/创建头结点,留空,为了能得到与新创建的结点对比的结点(即是 k)的前驱q=p;while(q)d=f(q-expn,q-coef);/创建新结点s=h;k=s-next;/s 是前驱,k 是与 d 做比较的while(k)if(k-expn=d-expn)k-coef+=d-coef;delete d;break;else if(k-expnexpn)k=k-next;s=s-next;else if(k-expnd-expn)s-next=d;d-next=k;break;if(!k)- 27 -s-next=d;q=q-next;return h-next;6.2 程序测试运行程序后,首先出现的界面如图 8 所示。图 8 程序初始运行界面单击添加按钮后,可将多项式在界面上显示出来,如图 9 所示。

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报