多项式的加法与乘法

上传人:第*** 文档编号:37849094 上传时间:2018-04-23 格式:DOC 页数:13 大小:219KB
返回 下载 相关 举报
多项式的加法与乘法_第1页
第1页 / 共13页
多项式的加法与乘法_第2页
第2页 / 共13页
多项式的加法与乘法_第3页
第3页 / 共13页
多项式的加法与乘法_第4页
第4页 / 共13页
多项式的加法与乘法_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《多项式的加法与乘法》由会员分享,可在线阅读,更多相关《多项式的加法与乘法(13页珍藏版)》请在金锄头文库上搜索。

1、1多项式的加法与乘法多项式的加法与乘法1、课题内容和要求课题内容和要求给定两个多项式,用程序实现这两个多项式的相加和相乘。 (可以利用单链表法实现)例如给定多项式 X+3X2-4X3+5X4和多项式 X2+3X3-4X4。2、需求分析需求分析整个程序中有两个大类,项结点的 TERM 类和多项式的 POLYNOMINAL 的类。TERM 类用以存放项结点,POLYNOMINAL 类用以构建多项式的每一 项。 而在进行多项式的加法和乘法时要进行多次的插入和删除操作,因此采用线性 表的链接存储。主要的实现函数有多项式类的输入输出函数,多项式的相加函数,多项式 的相乘函数,几个友元函数。而多项式类的构

2、造函数和析构函数也是必不可少的。最后加上主函数即能完成课题内容和要求。3、概要设计概要设计先定义链表类型结点和一元多项式,然后申明各个功能函数,并编写功能 函数的算法,然后定义一个主函数,用于调用各个功能函数。其中输入输出函 数由链表进行存储。其系统结构如图所示:一元多项式的加法乘法运算一元多项 式的创建一元 多项式 的乘法一元 多项式 的加法一元多项 式的消除2一元多项式的创建流程图如下:NY(1)一元多项式的创建流程图)一元多项式的创建流程图开 始创建一个含有 n 个链表类型结点的项按降幂分别输入各项系数和指数系数指 数均小 0?一元多项式创建成功3(2)多项式相加流程图)多项式相加流程图

3、 开 始判断输入 的 p 多项 式系数 =0?P q 指数相等时系 数相加 当 q 的系数大于 p,则跳过 q-exp 大的项当 q 的系数小于 p, 则 p 的系数和指数 生成新的节点插入 p进行运算4开 始给出两个多项式将系数相乘,指数相加将运算结果相加,并 输出(3)多项式的相乘流程图)多项式的相乘流程图四、详细设计四、详细设计在定义多项式类 polynominal 之前,首先构建一个项结点的 c+类 Term,用 以存放系数 coef 和指数 exp。具体实现代码如下:class Term public:Term(int c,int e);Term(int c,int e,Term*

4、nxt);Term* InsertAfter(int c,int e); /在 this 指针指示的结 点后插入新结点 private:int coef;int exp;Term *link; friend ostream friend Polynominalfriend Polynominal operator *(Polynominal ;上述程序中给出了多项式类 Polynominal 的定义,其中包括 3 个公有函数成 员:AddTerm、Output 和 PolyAdd。AddTerms 函数通过输入流 in,输入多项式 的各项构造一个多项式的单循环链表;Output 函数将多项式按

5、降幂方式送输出 流;PolyAdd 函数将多项式 r 加到指针 this 指示的多项式上。可以通过重载运 算符“”和“+”,并将它们定义为多项式类的友元函数的方法,使 之更符合输入输出和多项式运算的书写习惯。 既然已经有了我们需要的两大类,现在就可以编写相应的具体实现函数, 来实现我们需要的功能。当然首先需要的是多项式类的构造和析构函数。具体 代码如下: Polynominal:Polynominal() /创建多项式的空的 单循环链表 theList=new Term(0,-1); /分配表头结点的存储 单元theList-link=theList; /构成循环链表 void Polynom

6、inal:Clear() /撤销多项式 的单循环链表 Term* p=theList-link; while(p!=theList) theList-link=p-link; /删除 p 结点delete p; /释放 p 之存 储空间p=theList-link; /p 指向下 1 个待删除结点 有了上述条件现在就可以建立多项式的输入输出函数,具体代码如下: void Polynominal: AddTerms(istream int c,e; for(;) coutce;9if (c=0 /当输入的 指数小于 0 时,构造过程结束q=q-InsertAfter(c,e); /将 c,e 插

7、入表尾结 点 q 之后 void Polynominal:Output(ostream Term *p=theList-link;for ( ; p!=theList ; p=p-link) if (!first /q1 指向表头结点 p=r.theList-link; /p 指向第一个要处理的结点q=q1-link; /q1 是 q 的前驱,p 和 q 就 指向两个当前进行比较的项while (p-exp=0) /对 r 的单循环链表遍历, 直到全部结点都处理完 while (p-expexp) /跳过 q-exp 大的项 q1=q; q=q-link; if (p-exp=q-exp) /

8、当指数相等时,系数相加 q-coef=q-coef+p-coef;if (q-coef=0) /若相加后系数为 0,则删除 q q1-link=q-link; delete(q);q=q1-link; /重置 q 指针else q1=q; q=q-link; /若相加后系数不为 0,则移动 q1 和 qelse /p-expq-exp 的情况 q1=q1-InsertAfter(p-coef,p-exp); /以 p 的系数和指数生 成新结点,插入 q1p=p-link; void Polynominal:PolyMul(Polynominalwhile(p-exp=0) q=q-Insert

9、After(p-coef*r2-coef,p-exp+r2-exp);p=p-link; void Polynominal:PolyMul(PolynominalTerm *p=r2.theList-link; while(p-exp=0) poly.PolyMul(r1,p);PolyAdd(poly);poly.Clear();p=p-link;11 多项式相加函数完成后,我们来看看多项式相乘函数: void Polynominal:PolyMul(Polynominalwhile(p-exp=0) q=q-InsertAfter(p-coef*r2-coef,p-exp+r2-exp);

10、p=p-link; void Polynominal:PolyMul(PolynominalTerm *p=r2.theList-link; while(p-exp=0) poly.PolyMul(r1,p);PolyAdd(poly);poly.Clear();p=p-link; 然后给出几个友元函数:/程序 2.11 多项式 C+类的几个友员函数。 ostream return in; Polynominal return a; Polynominal operator *(Polynominal r.PolyMul(a,b); 12return r; 最后给出主函数:void main(

11、) Polynominal p,q,q1; cinp; coutq; cout“q= “q;/输入输出 q 多项式 q1=q; q=q+p; cout“q2=p+q= “q;/q2 表示两者相加之和 q1=q1*p; cout“q1=q1*p= “q1;/q1 表示两者相乘之积 5 5、测试数据及其结果分析测试数据及其结果分析测试用例为:多项式 X+3X2-4X3+5X4和多项式 X2+3X3-4X4图示为输入第一个多项式 p:X+3X2-4X3+5X413图示为输入第二个多项式并计算出结果。六、调试过程中的问题六、调试过程中的问题出现的问题有很多,现在只截取一个简单的且具有代表性的问题如图所示:这个问题是众多小问题的一个代表,告诫我,以后要在编程中细心,不仅需要 注意算法,同时也要注意细节。七、程序设计总结七、程序设计总结虽然多项式的加法和乘法运算这个程序不是很难,尤其在自己已经刚刚学 过了数据结构单链表部分后,但在两个星期的编程中自己仍碰到了不少问题, 暴漏了自己在编程中的不足,导致很多问题都要求助网络或同学。 由此坚定了我以后要踏踏实实学好编程,注重算法,更注重细节的准则。 ,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

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