问题描述:设Pn(x)和Qm(x)分别两个一元多项式。试编写程序实现一元多项式的加法运算。一、需求
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
:1、本程序需要基于线性
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
的基本操作来实现一元多项式的加法,也可以用数组实现。2、两个多项式都有键盘输入相应的系数和指数。3、//第一个多项式为9x15+7x8+5x3+3x输入4//表示第一个多项式的项数9,15(回车)//表示9x157,8(回车)5,3(回车)3,1(回车)输出9x^15+7x^8+5x^3+3x^1//第二个多项式为-7x8+6x3+2输入3//表示第二个多项式的项数6,3(回车)//表示9x15-7,8(回车)2,0(回车)输出-7x^8+6x^3+2x^0求和结果9x^15+11x^3+3x^1+2x^0二、概要
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
:抽象数据类型为实现上述程序的功能,应以整数存储用户的输入,以及计算的结果。实现多项式的运算,利用数组的方式需开辟一个二维数组,利用链表的方式须创造两个链表。算法的基本思想数组实现:定义一个结构体数组,p存储系数,q存储指数。分别输出两次输入的多项式。将两次输入的多项式的指数按从大到小的顺序进行排列,同时相应的系数要进行交换。输出时如果进行判断。如果当前该项与下一项的的系数相同,将两项系数相加后输出,并跳过下一项。如果不相等,直接输出。输出时需注意的问题:当系数为0时,该项不输出 当系数为负数时,不要再在前面输出+。程序的流程程序由三个模块组成:输入模块:完成两个多项式的输入。处理模块:将多项式按其指数大小进行排列。输出模块:输出合并后的多项式。三、详细设计算法的具体步骤:数组方法:structcode{intp,q;}a[1000],b[1000];//结构体数组,可以用二维数组代//替for(i=0;i<n;i++){for(j=i+1;j<n;j++){if(a[j].q>a[i].q){temp=a[j].q;//指数排序a[j].q=a[i].q;a[i].q=temp;temp=a[j].p;//系数跟着变化a[j].p=a[i].p;a[i].p=temp;} }//对输入的指数进行排序,相应的系数跟着变化cout<<a[0].p<<"x^"<<a[0].q; //先输出第一项if(a[i].p>0)elseif(a[i].p<0)cout<<a[i].p<<"x^"<<a[i].q;cout<<'+'<<a[i].p<<"x^"<<a[i].q;//完成运算符和其他项的输//出,然后类似于上面,对第二个多项式进行相应的操作。for(i=0;i<m;i++){ a[n+i].q=b[i].q;a[n+i].p=b[i].p;}//将两个多项式的指数,系数存储到一个数组for(i=0;i<m+n;i++)for(j=i+1;j<n+m;j++){if(a[j].q>a[i].q){temp=a[j].q;a[j].q=a[i].q;a[i].q=temp;temp=a[j].p;a[j].p=a[i].p;a[i].p=temp;}}//按指数由大到小进行排列if(a[0].q!=a[1].q){cout<<a[0].p<<"x^"<<a[0].q;j=1;}else{cout<<a[0].p+a[1].p<<"x^"<<a[0].q;j=2;}//进行合并同类项的操作,如果该项与下一项的指数相等,//则系数相加。否则,只输出该项for(i=j;i<m+n-1;i++){if(a[i].q!=a[i+1].q){if(a[i].p>0)cout<<"+"<<a[i].p<<"x^"<<a[i].q;if(a[i].p<0)//负号相当于减号cout<<a[i].p<<"x^"<<a[i].q;} else{if((a[i].p+a[i+1].p)>0)cout<<"+"<<a[i].p+a[i+1].p<<"x^"<<a[i].q;elseif((a[i].p+a[i+1].p)<0)cout<<a[i].p+a[i+1].p<<"x^"<<a[i].q;i++;}}if(a[m+n-1].q!=a[m+n-2].q){ if(a[i].p>0)cout<<"+"<<a[i].p<<"x^"<<a[i].q;elseif(a[i].p<0)cout<<a[i].p<<"x^"<<a[i].q;}//对第一项与最后一项做特殊处理,以免输出多余的运算符,同时,当系数为0,则不输出该项四、调试分析略。五、测试结果六、用户使用
说明
关于失联党员情况说明岗位说明总经理岗位说明书会计岗位说明书行政主管岗位说明书
(可选)本程序的运行环境为windows操作系统,执行文件为duoxianshi.exe运行程序时按顺序输入数字即可得到多项式。七、实验心得(可选)对于多项式的运算的,运算符的输出很重要,一开始多输出一个‘+’,并且当为负数时会输出+--。还有当系数为0时的输出都没有专门考虑。通过与同学讨论,这次用链表的来做这道题目让我收获很大。对链表的构建更加的熟练。对链表向前推进把握的更加准确。通过本次试验,我发现自己分析问题不是很全面,忽略掉一些细节。以后分析问题时要仔细考虑,认真分析,避免在细节上犯错误。在此次实验的同时也将上课所学内容进行了复习。附录(可选)#include<iostream>usingnamespacestd;structcode{intp,q;}a[1000],b[1000]; //定义一个结构体数组,p存储系数,q存储指数intmain(){inti,j,n,m,temp;while(cin>>n){for(i=0;i<n;i++)cin>>a[i].p>>a[i].q;for(i=0;i<n;i++){for(j=i+1;j<n;j++){if(a[j].q>a[i].q){temp=a[j].q; //指数排序a[j].q=a[i].q;a[i].q=temp;temp=a[j].p; //系数跟着变化a[j].p=a[i].p;a[i].p=temp;} }} //对输入的指数进行排序,相应的系数跟着变化cout<<a[0].p<<"x^"<<a[0].q; for(i=1;i<n;i++){if(a[i].p>0)cout<<'+'<<a[i].p<<"x^"<<a[i].q;elseif(a[i].p<0)cout<<a[i].p<<"x^"<<a[i].q;}cout<<endl; //输出第一个多项式cin>>m;for(i=0;i<m;i++)cin>>b[i].p>>b[i].q;for(i=0;i<m;i++){for(j=i+1;j<m;j++){if(b[j].q>b[i].q){temp=b[j].q;b[j].q=b[i].q;b[i].q=temp;temp=b[j].p;b[j].p=b[i].p;b[i].p=temp;} }}cout<<b[0].p<<"x^"<<b[0].q; for(i=1;i<m;i++){if(b[i].p>0)cout<<"+"<<b[i].p<<"x^"<<b[i].q;elseif(b[i].p<0)cout<<b[i].p<<"x^"<<b[i].q;}cout<<endl; //输出第二个多项式for(i=0;i<m;i++){a[n+i].q=b[i].q;a[n+i].p=b[i].p;} //将两个多项式的指数,系数存储到一个数组for(i=0;i<m+n;i++)for(j=i+1;j<n+m;j++){if(a[j].q>a[i].q){temp=a[j].q;a[j].q=a[i].q;a[i].q=temp;temp=a[j].p;a[j].p=a[i].p;a[i].p=temp;}} //按指数由大到小进行排列if(a[0].q!=a[1].q){cout<<a[0].p<<"x^"<<a[0].q;j=1;}else{cout<<a[0].p+a[1].p<<"x^"<<a[0].q;j=2;} //进行合并同类项的操作,如果该项与下一项的指数相等,则系数相加。否则,只输出该项for(i=j;i<m+n-1;i++){if(a[i].q!=a[i+1].q){if(a[i].p>0)cout<<"+"<<a[i].p<<"x^"<<a[i].q;if(a[i].p<0)cout<<a[i].p<<"x^"<<a[i].q;} else{if((a[i].p+a[i+1].p)>0)cout<<"+"<<a[i].p+a[i+1].p<<"x^"<<a[i].q;elseif((a[i].p+a[i+1].p)<0)cout<<a[i].p+a[i+1].p<<"x^"<<a[i].q;i++;}} //负数情况if(a[m+n-1].q!=a[m+n-2].q){ if(a[i].p>0)cout<<"+"<<a[i].p<<"x^"<<a[i].q;elseif(a[i].p<0)cout<<a[i].p<<"x^"<<a[i].q;}} //对第一项与最后一项做特殊处理,以免输出多余的运算符,同时,当系数为0,则不输出该项return0;}