1、实验二 一元二项式的运算一 问题描述:设 Pn(x)和 Qm(x)分别两个一元多项式。试编写程序实现一元多项式的加法运算。二 需求分析:1. 本程序需要基于线性表的基本操作来实现一元多项式的加法,也可以用数组实现。2两个多项式都有键盘输入相应的系数和指数。3第一个多项式为 9x15+ 7x8+5x3+3x 输入4 /表示第一个多项式的项数 9, 15(回车) /表示 9x15 7, 8 (回车) 5, 3 (回车) 3, 1 (回车) 输出 9x15+ 7x8+5x3+3x1 /第二个多项式为 -7x8+6x3+2 输入3 /表示第二个多项式的项数 6, 3(回车) /表示 9x15 -7,
2、8(回车) 2, 0 (回车) 输出 -7x8+ 6x3+2x0 求和结果 9x15+11x3+3x1+ 2x0三概要设计抽象数据类型:为实现上述程序的功能,应以整数存储用户的输入,以及计算的结果。实现多项式的运算,利用数组的方式需开辟一个二维数组。算法的基本思想:数组实现:定义一个结构体数组,p 存储系数 ,q 存储指数。分别输出两次输入的多项式。将两次输入的多项式的指数按从大到小的顺序进行排列,同时相应的系数要进行交换。输出时如果进行判断。如果当前该项与下一项的的系数相同,将两项系数相加后输出,并跳过下一项。如果不相等,直接输出。输出时需注意的问题:当系数为 0 时,该项不输出 当系数为负
3、数时,不要再在前面输出“+” 。程序的流程:(1) 输入模块:完成两个多项式的输入。(2) 处理模块:将多项式按其指数大小进行排列。(3) 输出模块:输出合并后的多项式。四源程序:#includeusing namespace std;struct codeint p,q;a1000,b1000; /结构体数组,可以用二维数组代替int main()int i,j,n,m,temp;while(cinn)for(i=0;iai.pai.q;for(i=0;iai.q) temp=aj.q; /指数排序aj.q=ai.q;ai.q=temp;temp=aj.p; /系数跟着变化aj.p=ai.p
4、;ai.p=temp; /对输入的指数进行排序,相应的系数跟着变化cout0)coutm;for(i=0;ibi.pbi.q;for(i=0;ibi.q) temp=bj.q;bj.q=bi.q;bi.q=temp;temp=bj.p;bj.p=bi.p;bi.p=temp; cout0)coutai.q)temp=aj.q;aj.q=ai.q;ai.q=temp;temp=aj.p;aj.p=ai.p;ai.p=temp;/按指数由大到小进行排列if(a0.q!=a1.q)cout0)cout0)cout0)cout“+“ai.p“x“ai.q;else if(ai.p0)coutai.p“
5、x“ai.q;/对第一项与最后一项做特殊处理,以免输出多余的运算/符,同时,当系数为 0,则不输出该项return 0;算法的时空分析:算法复杂度为 O((m+n)2);五测试结果:六实验心得:1 对于多项式的运算的,运算符的输出很重要,一开始多输出一个+ ,并且当为负数时会输出+- 。还有当系数为 0 时的输出都没有专门考虑。和周围的同学交流一下算法,相互探讨了出现的问题,和解决的方法。讨论中改掉很多不足。使代码更加完善。2 通过本次试验,我发现自己分析问题不是很全面,忽略掉一些细节。以后分析问题时要仔细考虑,认真分析,避免在细节上犯错误。3 通过这次实验,我发现自己编程能力相当欠缺,尤其是用链表实现。自己以后要勤加练习。