好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

多项式类的设计实现分析MFC.doc

48页
  • 卖家[上传人]:mg****2
  • 文档编号:198675735
  • 上传时间:2021-09-29
  • 文档格式:DOC
  • 文档大小:600.50KB
  • / 48 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • - - word.zl-封封 皮皮题目题目: :班级班级: : :学号学号: :日期日期: :- - - word.zl-课 程 设 计 任 务 书学院专业学生学号设计题目多项式类的设计与实现容及要求:开发多项式类 Polynomial,多项式的每一项用链表的结点表示,每项包含一个系数和一个指数例如:2x4的指数为 4,系数为 2请开发一个完整的 Polynomial 类,包括构造函数、析构函数以及“get函数读取值和“set函数设置值 该类还要提供以下重载的运算符:(1)重载加法运算符,将两个多项式相加2)重载加法运算符,将两个多项式相减3)重载赋值运算符,将一个多项式赋给另外一个多项式4)重载加法运算符*,将两个多项式相乘5)编写一个主函数测试多项式类的上述功能进度安排:第 17 周:分析题目,查阅课题相关资料,进展类设计、算法设计;第 18 周:程序的设计、调试与实现;第 19 周:程序测试与分析,撰写课程设计报告,进展辩论验收指导教师签字:年 月 日学院院长签字年 月 日- - - word.zl-目目 录录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 运行结果分析- 15 -6 基于 MFC 的图形界面程序开发- 15 -6.1 基于 MFC 的图形界面程序设计- 15 -6.2 程序测试- 27 -6.3 MFC 程序编写总结- 29 -7 参考文献- 29 - - - word.zl-1 1 需求分析需求分析(1)开发多项式类 Polynomial,多项式的每一项用链表的结点表示,每项包含一个系数和一个指数。

      例如:2x4的指数为 4,系数为 2请开发一个完整的Polynomial 类,包括构造函数、析构函数以及“get函数读取值和“set函数设置值 2)多项式的定义:n 个单项式的代数和叫多项式3)程序测试数据:P1:2x+3x2+2x4+3x2P2:3x2+2x3(1)2 2 算法根本原理算法根本原理设有 2 个多项式 p1,p2P1:2x+3x2+2x4+3x2P2:3x2+2x3- - - word.zl-实现多项式 p1 和 p2 的计算,关键是对 p1 和 p2 的指数和系数进展加减生的操作,我们可以先编辑一个基类 Polynominal通过链表和重载运算符的方法来实现1多项式即个个单项式的和,我们可以把一个多项式分解成一项一项来看,每一项用链表的一个节点表示,每个节点包括一个单项式的系数、指数和指向该节点类型的一个指针2用 Polynominal 创立对象 p1、p2、p3,通过调用 Create(c1,e1,size1)函数来构建多项式3通过重载+、-、*以及=运算符,对多项式进展操作4通过 p1.Print()来显示结果3 3 类设计类设计从上面的算法分析可以看到,本设计面临的计算问题的关键是多项式运算。

      可以定义一个多项式类 Polynominal1该类包括私有数据成员 Node *head,Node 是构造的节点类型的构造体,包括系数、指数和指向该节点类型的一个指针2成员函数包括 Polynominal()/构造函数, Polynominal(const Polynominal &)/拷贝构造函数,Polynominal()/析构函数 Node* get(int e);/读取指数为 e 的项,返回其指针,void set(double c,int e);/设置指数为 e 的项的系数为 c, void Create(double *c,int *e,int n);/创立多项式,friend Polynominal operator - - - word.zl-+(Polynominal a,Polynominal b);/重载+运算符,friend Polynominal operator -(Polynominal a,Polynominal b);/重载-运算符,friend Polynominal operator *(Polynominal a,Polynominal b);/重载*运算符,friend ostream& operatornext; if (p) delete p; p=q; head=NULL; Node* get(int e);/读取指数为 e 的项,返回其指针 void set(double c,int e);/设置指数为 e 的项的系数为 c 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 ostream& operator(ostream& os, const Polynominal& a); Polynominal& operator =(Polynominal a);/重载=运算符 void Print(ostream& os = cout) const; void Copy(const Polynominal &a); void Addr()cout链表头指针值为:headendl;- - - word.zl-private: Node *head;/链表头指针; 在程序中,声明了个个运算符的重载,通过 Node* get(int e);读取指数为 e的项,返回其指针,通过 void set(double c,int e)设置指数为 e 的项的系数为 c,多项式的的系数、指数以及指针全部采用了动态存分配技术,这些工作都是由构造函数和 Create()函数完成,它们的清理工作在析构函数中完成。

      4.2 类的实现/类实现#include #include #include #define MAXSIZE 15struct Node/链表结点 int exp;/指数 double coef;/系数 Node *next;void Polynominal:Copy(const Polynominal &a)- - - word.zl- /复制对象(公用函数) Node *t,*s,*p; 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 Polynominal& a)/复制构造函数 Copy(a);void Polynominal:Create(double *c,int *e,int n)/创立多项式- - - word.zl- if (n1) coutcoef=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 的项- - - word.zl- 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,*t; t=new Node; t-coef=c; t-exp=e; if (head=0) head=t; head-next=0; return; - - - word.zl- if (ehead-exp) t-next=head; head=t;/插入头部 return; p=head; while (p & eexp) q=p; p=p-next; if (p) /新的项插入 p 所指结点前 t-next=p; q-next=t; else/插入尾部 q-next=t;- - - word.zl- t-next=0; Polynominal operator +(Polynominal a,Polynominal b)/重载+运算符 Polynominal temp; Node *p,*q,*s,*t; double x; s=new Node;temp.head=s;/先增加一个头结点 p=a.head; q=b.head; while (p & q) if (p-exp=q-exp) x=p-coef+q-coef; if (x!=0.0) t=new Node; t-exp=p-exp; t-coef=x;- - - word.zl- 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; else t-coef=q-coef; t-exp=q-exp; q=q-next; - - - word.zl- s-next=t; s=t; if (q) p=q;/p 恒指向余下的项 while (p) 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)/重载-运算符- - - word.zl- Polynominal temp; Node *p,*q,*s=0,*t; /在此处添加代码,完成此函数(模仿上述重载+的函数) double x; s=new Node;temp.head=s;/先增加一个头结点 p=a.head; q=b.head; while (p & q) if (p-exp=q-exp) x=p-coef-q-coef; if (x!=0.0) t=new Node; t-exp=p-exp; t-coef=x; s-next=t; s=t; - - - word.zl- 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; else t-coef=-q-coef; t-exp=q-exp; q=q-next; s-next=t; s=t; - - - word.zl- if (q) p=q;/p 恒指向余下的项 while (p) 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 *(P。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.