数据结构实验报告-一元多项式的加法运算

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)

cout<

}

//对第一项与最后一项做特殊处理,以免输出多余的运算符,同时,当系数为0,则不输出该项

四、调试分析

相关文档
最新文档