1 、问题描述:
功能:设计一个一元多项式加法器。
输入并建立多项式,实现两个多项式的加法运算。
要求:
1) 界面友好,函数功能要划分好
2) 总体设计应画出流程图
3) 程序要加必要的注释
4) 要提供程序测试方案
5) 程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。
2 、问题的解决方案:
1) 多项式的表达:n,c1,e1,c2,e2,…cn,en,其中, n 是多项式项数,ci 和ei分别是第 i 项的系数和指数,序列按指数降序或者升序排列;
2)利用线性结构存储多项式的每一项。
3)多项式加法运算即转化为线性表的条件归并运算。
功能实现
一、设计流程:
任务设计分为三步:1、完成两个一元多项式相加;2、对序列进行排序;3、实现友好的人机交互。
二、方法构造:
步骤一:实现两个一元多项式相加,我的设计流程是,创建三个链表,依次储存第一个多项式的系数和指数,第二个多项式的系数和指数,两个多项式和/差 的系数和指数。
如图所示:
插入函数的具体实现过程
(1) 当p结点的指数expn小于p2的指数expn就将p插入到p2的前面。
![](https://i-blog.csdnimg.cn/blog_migrate/c8321325d802757233f9a3f255202548.webp?x-image-process=image/format,png)
(2) 当p结点的指数exon等于p2的指数expn就将p和p2的系数加起来合并放到p2的位置上
![](https://i-blog.csdnimg.cn/blog_migrate/444f97c021cf9cbf44deb9bd501cb5a9.webp?x-image-process=image/format,png)
(3) 当p结点的指数expn大于p2的指数expn就将p插入到p2的前面。
![](https://i-blog.csdnimg.cn/blog_migrate/55f159ad83e3dad803b3d92fb2c19ac3.webp?x-image-process=image/format,png)
功能二输出多项式(A+B).主要的方法是建立一个新的链表C,将A和B合并并插入C链表中
(1) 比较A和B中的结点如果A中结点的指数大于B中结点的指数就将A中该结点插入到C链表中
![](https://i-blog.csdnimg.cn/blog_migrate/e9abe94528c468679c5e0261f3b333c2.webp?x-image-process=image/format,png)
(2)比较A和B中的结点如过A中结点的指数小于B中结点的指数就将B中该结点插入到C链表中
![](https://i-blog.csdnimg.cn/blog_migrate/6557e66129b5db133e41dc62dbf3d1ad.webp?x-image-process=image/format,png)
(3) 比较A和B中的结点如过A中结点的指数等于B中结点的指数就将A和B合并为一个结点插入到C中
![](https://i-blog.csdnimg.cn/blog_migrate/92e81dd1afea2bc904cc4f21b9a9256a.webp?x-image-process=image/format,png)
这两个主要的功能就是这样实现的
步骤二:对序列进行排序。
排序方法我用的是冒泡排序,根据指数大小对每个结点进行排序,然后输出,这个排序方法我想大家应该都了解,就不多说了,想具体了解各种排序方法的同学,可进入visualgo.net这个网站深度学习(这个网站也是身边同学分享给我的);
步骤三:实现良好的人机交互。
任何一个程序的设计都必须要有实用意义,否则毫无价值,任务要求是做一元稀疏多项式的加法计算器,但只能实现加法一个功能远远满足不了实用的要求,所以我们可以添加“减、乘、除”这三个功能。减法的功能实现和加法基本类似,只需修改一下运算方法就行了,乘除的计算量比较大,可以遍历第一个表的每个结点对第二个表每个结点进行‘乘/除’运算,应给会多出来很多数据,
数学基础还算可以的同学可以在下面自己进行探讨延伸。