当前位置:文档之家› 两个一元多项式相加-c++版

两个一元多项式相加-c++版

《数据结构》实验报告
——两个一元多项式相加
一、实验题目:两个一元多项式相加
二、实验内容:
根据所学的数据结构中线性结构(线性表)的逻辑特性和物理特性及相关算法,应用于求解一个具体的实际问题----------两个多项式相加
三、设计思想:
(1)建立两个顺序列表,分别用来表示两个一元多项式;顺序列表奇数位,存储该多项式的系数;顺序列表的偶数位,存储该相应多项式的指数。

(2)用成员函数merg(qList<Telem>&l2)实现两多项式的相加。

实现的大致方法为:比较第二个多项式列表与第一个多项式列表的偶数位的数值大小(指数),如果
相同,则将他们的前一位数(系数)相加;如果不同,就将他的前一位数(系
数)及它自己(指数)插入第一个多项式列表的后面。

(3)建立函数shu(double a[],int j)实现多项式的输入。

四、源程序代码
#include "stdafx.h"
#include<iostream>
using namespace std;
template<class Telem>
class List
{
private:
Telem * elem;
int curlen;
int maxlen;
public:
List(int maxsz=100):maxlen(maxsz)
{
curlen=0;
elem=new Telem{maxlen};
};
List(Telem a[],int n,int maxsz=100):maxlen(maxsz)
{
curlen=n;
elem=new Telem[maxlen];
for(int i=0;i<n;i++)elem[i]=a[i];
};
~List(){delete[] elem;};
Telem gete(int i)
{
if(i>=1&&i<=curlen)return elem[i-1];
else return NULL;
};
int leng(){return curlen;};
List<Telem>&merg(List<Telem>&l2);//声明两多项式相加的成员函数
};
template<class Telem>
List<Telem>&List<Telem>::merg(List<Telem>&l2)//两多项式相加的成员函数的实现{
int i,j,m,n,k(0);
m=curlen;n=l2.curlen;
if(m+n<=maxlen)
{
for(i=0;i<n/2;i++)
{
for(j=0;j<m/2;j++)
if(elem[2*j+1]==l2.elem[2*i+1])
{k++;elem[2*j]+=l2.elem[2*i];break;}
if(j==m/2)
{elem[m+2*(i-k)]=l2.elem[2*i];
elem[m+2*(i-k)+1]=l2.elem[2*i+1];}
}
}
curlen=m+n-2*k;
return *this;
}
void fun(double a[],int j)//该函数实现:输入2j个double型的数,并将其存储到数组中
{
int i;
for(i=0;i<j;i++)
{
double m,n;
cout<<"请输入第"<<i+1<<"项的系数和指数:";
cin>>m>>n;
a[2*i]=m;
a[2*i+1]=n;
}
}
void main()
{
int i,j,k;
cout<<"第一个多项式的个数:";
cin>>j;
double *a=new double[2*j];
fun(a,j);
cout<<"第二个多项式的个数为:";
cin>>k;
double *b=new double[2*k];
shu(b,k);
List<double>s1(a,2*j);
List<double>s2(b,2*k);
s1.merg(s2);
cout<<"二个多项式相加结果为:";
for(i=1;i<=s1.leng()/2;i++)//用for循环将这二个多项式结果输出{
cout<<s1.gete(2*i-1)<<"X^"<<s1.gete(2*i);
if(i!=s1.leng()/2)cout<<"+";
}
cout<<endl;
}
五、程序运行结果截图。

相关主题