一元多项式的运算实验报告和代码

上传人:ss****gk 文档编号:208872958 上传时间:2021-11-08 格式:DOC 页数:18 大小:123.77KB
返回 下载 相关 举报
一元多项式的运算实验报告和代码_第1页
第1页 / 共18页
一元多项式的运算实验报告和代码_第2页
第2页 / 共18页
一元多项式的运算实验报告和代码_第3页
第3页 / 共18页
一元多项式的运算实验报告和代码_第4页
第4页 / 共18页
一元多项式的运算实验报告和代码_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《一元多项式的运算实验报告和代码》由会员分享,可在线阅读,更多相关《一元多项式的运算实验报告和代码(18页珍藏版)》请在金锄头文库上搜索。

1、一. 问题描述:设t(x)和Qm(x)分别两个一元多项式。试编写程序实现一元多项 式的加法运算。二. 需求分析:1. 本程序需要基于线性表的基本操作来实现一元多项式的加法, 也可以用数组实现。2. 两个多项式都有键盘输入相应的系数和指数。3.1583/第一个多项式为9x + 7x +5x +3x输入4/表示第一个多项式的项数9,15(回车)/表示9x1S7,8 (回车)5,3 (回车)3,1 (回车)输出9xA15+ 7xA8+5xA3+3xAl83/第二个多项式为-7x+6x+2输入3/表示第二个多项式的项数6,3(回车)/表示9x157,8 (回车)2,0 (回车)输出-7xA8+ 6xA

2、3+2xA0求和结果9xA15+llxA3+3xAl+ 2xA0三. 概要设计抽象数据类型:为实现上述程序的功能,应以整数存储用户的输入,以及计算的结果。实现多项式的运算,利用数组的方式需开辟一个二维数组,利 用链表的方式须创造两个链表。算法的基本思想:AM定义一个结构体数组,p存储系数,q存储指数。分别输出两次输入的多项式。将两次输入的多项式的指数按从大到小的顺序进行排列,同时 相应的系数要进行交换。输出时如果进行判断。如果当前该项与下一项的的系数相同, 将两项系数相加后输出,并跳过下一项。如果不相等,直接输出。输出时需注意的问题:当系数为0时,该项不输出当系数为负数时,不要再在前面输出+。

3、链表实现:定义一个结构体,分别用exp,coef来存储系数和指数,同时 在结构体里面定义一个该结构类型指针。对输入的第-个多形式和第二个多项式分别构建,-个链表(按指数的大小)输出时,通过比较两个链表当前位置的指数大小,相同,系数 相加后输出,两个链表同时向前推进。如果其中一个大,只输出较 大项,同时将其推进。程序的流程:(1) 输入模块:完成两个多项式的输入。(2) 处理模块:将多项式按其指数大小进行排列。(3) 输出模块:输出合并后的多项式。四. 详细设计:算法的具体步骤:Akr. An -istruct codeint p, q;a1000, b1000;/结构体数组,可以用二维数组代/

4、替for(i=0;iai.q) temp=aj. q;/指数排序aj. q=ai. q; ai. q=temp;temp=aj. p;/系数跟着变化 aj. p=ai. p;ai. p=temp;/对输入的指数进行排序,相应的系数跟着变化couta0. pxa0. q; /先输出第一项if (ai. p0) else if(ai. p0) coutai. px”ai.q;cout + ai. pxai. q;/完成运算符和其他项的输 /出,然后类似于上面,对第二个多项式进行相应的操作。for(i-0;im;i+)an+i.q=bi. q;an+i. p=bi. p;/将两个多项式的指数,系数存

5、储到一个数组for(iO;im+n;i+)for (j=i+l;jai. q) tcmp=aj. q;aj.q=ai. q; ai.q=temp; temp=aj. p;ai.p=tcmp;/按指数由大到小进行排列 if (a0. q!=al. q) couta0. pxa0.q;else couta0. p+al. pz/x,za0. q;j 二2;/进行合并同类项的操作,如果该项与下一项的指数相等,/则系数相加。否则,只输出该项 for(i=j:im+n_l;i+) if (ai. q!=ai+l. q) if (ai. p0)cout+ai. px”ai. q; if (ai. p0)/

6、负号相当于减号coutai. pxaiL q;else if (ai. p+ai+l p)0)cout+ai p+ai+l. px”ai. q;else if(ai. p+ai + l. p)0)coutai.p+ai+l. pxai. q;i+;if(am+n-l. q!=am+n_2 q) if(ai. p0)cout+ai. p,x,/0;i一-)p= new List sizeof (code) ;/每次都要 new个 cinp-coef;cinp-expn;p-next=L-next;L-ncxt=p;void paixu(LinkList *head)/将链表中的元素按降幂排列类似

7、于数组的冒泡排序法。void print (List *L)打印多项式的函数,特别注意负数的输出,当系数为零时的输出List List (List *La, List *Lb)将两个链表合成一个再用输出函数输出即可f法的时空分析:算法复杂度为0( (m+n)2);五. 调试分析:调试的主要内容是观察链表的每一元素是否按降幂排列 判断什么时候跳出while循环。六. 测试结果:七. 实验心得:1. 对于多项式的运算的,运算符的输出很重要,一开始多输 出一个+,并且当为负数时会输出+-。还有当系数为0 时的输出都没有专门考虑。和周围的同学交流一下算法, 相互探讨Y出现的问题,和解决的方法。讨论中改

8、掉很多 不足。使代码更加完善。2. 这次用链表的来做这道题目让我收获很大。对链表的构建更加的熟练。对链表向前推进把握的更加准确。在调试代 码,检验的时候,遇到很大的阻碍,但解决问题后,自己 明白了很多。3. 通过本次试验,我发现自己分析问题不是很全面,忽略掉一些细节。以后分析问题时要仔细考虑,认真分析,避免 在细节上犯错误。附:#includeusing namespace std;struct codeint p,q;a1000,b1000;int main()int ij,nzm,temp;while(cinn)for(i=0;in;i+)cinai.pai.q;for(i=0;in;i+

9、)for(j=i+l;jai.q) temp=aj.q;aj.q=ai.q;ai.q 二 temp;temp=aj.p;aj.p=ai.p;ai.p=temp;couta 0. pnxA,,a 0 .q;for(i=l;i0)cout+,ai.pxAai.q;else if(ai.p0)coutai.p,xAai.q;coutendl;cinm;for(i=0;im;i+)cinbi.pbi.q;for(i=0;im;i+)for(j=i+l;jbi.q) temp=bj.q;bj.q=bi.q;bi.q=temp;temp=bj.p;bj.p=bi.p;bi.p=temp;coutb0】.p

10、x 八bO.q;for(i=l;im;i+)if(bi.pO)cout,+,bi.pxA,,bi.q;else if(bi.p0)coutbi.pnxAbi.q;coutendl;for(i=0;im;i+)an+i.q=bi.q;an+i.p=bi.p;for(i=0;im+n;i+)for(j=i+l;jai.q)temp=aj.q;aj】.q=ai.q;ai.q=temp;temp=aj.p;aj.p=ai.p;ai.p=temp;if(aO.q!=al.q)couta 0 .p,xAa 0 .q;j=l;elsecouta 0 .p+a 1 .pnxAI,a 0 .q;j=2;for(i=j;im+n-l;i+)if(ai.q!=ai+l.q)if(ai.p0)cout,+,ai.pxAHai.q;if(ai.p0)cout,+Hai.p+ai+l.pnxA,,ai.q;else if(ai.p+ai+l.p)0)cout,+Hai.p,xAHai.q;else if(ai.p0)coutai.pxAai.q;return 0;

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

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

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