数据结构实验报告-一元多项式的加法运算
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
问题描述:
设P
n (x)和Q
m
(x)分别两个一元多项式。试编写程序实现一元多
项式的加法运算。
一、需求分析:
1、本程序需要基于线性表的基本操作来实现一元多项式的加法,也可以用数组实现。
2、两个多项式都有键盘输入相应的系数和指数。
3、//第一个多项式为9x15+ 7x8+5x3+3x
输入
4 //表示第一个多项式的项数
9, 15(回车) //表示9x15
7, 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
二、概要设计:
抽象数据类型
为实现上述程序的功能,应以整数存储用户的输入,以及计算的结果。
实现多项式的运算,利用数组的方式需开辟一个二维数组,利用链表的方式须创造两个链表。
算法的基本思想
数组实现:
定义一个结构体数组,p存储系数,q存储指数。分别输出两次输入的多项式。将两次输入的多项式的指数按从大到小的顺序进行排列,同时相应的系数要进行交换。输出时如果进行判断。如果当前该项与下一项的的系数相同,将两项系数相
加后输出,并跳过下一项。
如果不相等,直接输出。
输出时需注意的问题:
当系数为0时,该项不输出
当系数为负数时,不要再在前面输出+。
程序的流程
程序由三个模块组成:
输入模块:完成两个多项式的输入。
处理模块:将多项式按其指数大小进行排列。
输出模块:输出合并后的多项式。
三、详细设计
算法的具体步骤:
数组方法:
struct code{
int p,q;
}a[1000],b[1000];//结构体数组,可以用二维数组代//替
for(i=0;i for(j=i+1;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< if(a[i].p>0) else if(a[i].p<0) cout< cout<<'+'< for(i=0;i { a[n+i].q=b[i].q; a[n+i].p=b[i].p; }//将两个多项式的指数,系数存储到一个数组 for(i=0;i for(j=i+1;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< j=1; } else{ cout< j=2; } //进行合并同类项的操作,如果该项与下一项的指数相等,//则系数相加。否则,只输出该项 for(i=j;i if(a[i].q!=a[i+1].q){ if(a[i].p>0) cout<<"+"< if(a[i].p<0) //负号相当于减号 cout< } else{ if((a[i].p+a[i+1].p)>0) cout<<"+"< else if((a[i].p+a[i+1].p)<0) cout< i++; } } if(a[m+n-1].q!=a[m+n-2].q) { if(a[i].p>0) cout<<"+"< else if(a[i].p<0)