多项式的加减乘除c++

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
in>>c>>e;
if(e<0) break; //e<0,退出循环,输入结束
rear=rear->InsertAfter(c,e);
}
return in;
}
//Polynomial类的友元函数:输出带附加头结点的多项式链表x
ostream& operator<<(ostream& out,Polynomial& x)
{
temp=pa->coef+pb->coef;
if(fabs(temp)>0.001)
pc=pc->InsertAfter(temp,pa->exp); //系数相加后不为零,将结果保存
pa=pa->link;
pb=pb->link;
}
else if(pa->exp<pb->exp)
{
pc=pc->InsertAfter(pa->coef,pa->exp);
{
coef=c;
exp=e;
link=next;
}
Term* InsertAfter(float c,int e);
friend ostream& operator<<(ostream&,const Term&);
};
//多项式类的定义
class Polynomial{
public:
Polynomial(); //构造函数
int AL,BL,i,k,maxExp;
Polynomial C; //结果多项式
pc=C.getHead();
AL=A.maxOrder();
BL=B.maxOrder();
if(AL!=-1||BL!=-1)
{
maxExp=AL+BL;
float *result=new float[maxExp+1];
destptr=destptr->link;
}
}
//计算最大阶数,当多项式按升序排列时,最后一项是指数最大的
int Polynomial::maxOrder()
{
Term* current=first;
while(current->link!=NULL)
current=current->link;
return current->exp;
{
first=new Term(0,-1);
Term *destptr=first,*srcptr=R.getHead()->link;
while(srcptr!=NULL){
destptr->InsertAfter(srcptr->coef,srcptr->exp);
srcptr=srcptr->link;
{
Term *pa,*pb,*pc,*p;
float temp;
Polynomial C;
pc=C.first;
pa=A.getHead()->link;
pb=B.getHead()->link;
while(pa!=NULL&&pb!=NULL)
{
if( pa->exp == pb->exp ) //对应系数相等,系数相加
}
//Polynomial类的友元函数,从输入流in输入各项,用尾插法建立一个多项式
istream& operator>>(istream& in,Polynomial& x)
{
Term* rear=x.getHead(); // rear是尾指针
int c,e;
while(1)
{
cout<<"Input a term(coef,exp):"<<endl;
ostream& operator<<(ostream& out,const Term& x)
{
if(x.coef==0) //系数为零,不输出
return out;
out<<x.coef; //输出系数
switch(x.exp){ //输出指数
case 0: break;
case 1: out<<"X";break;
{
Polynomial A,B,C;
cout<<"请输入多项式A:(系数幂数(幂数小于0结束))"<<endl;
cin>>A;
cout<<"请输入多项式B:(系数幂数(幂数小于0结束))"<<endl;
cin>>B;
C=A+B;
cout<<"A+B为:"<<C<<endl;
C=A*B;
cout<<"A*B为:"<<C<<endl;
system("pause");
return 0;
}
pa=pa->link;
}
else
{
pc=pc->InsertAfter(pb->coef,pb->exp);
pb=pb->link;
}
}
if(pa!=NULL)
p=pa;
else
p=pb;
while(p!=NULL) //处理链剩余部分
{
pc=pc->InsertAfter(p->coef,p->exp);
{
Term* current=x.getHead()->link;
cout<<"The polynomal is:"<<endl;
bool h=true;
while(current!=NULL)
{
if(h==false&&current->百度文库oef>0)
out<<"+";
h=false;
out<<*current; //调用Term类的重载运算符<<
friend istream& operator>>(istream&,const Polynomial&); //重载运算符>>
friend Polynomial operator + (Polynomial&,Polynomial&); //重载运算符+
friend Polynomial operator * (Polynomial&,Polynomial&); //重载运算符*
pb=pb->link;
}
pa=pa->link;
}
for(i=0;i<=maxExp;i++)
if(fabs(result[i])>0.001)
pc=pc->InsertAfter(result[i],i);
delete []result;
}
pc->link=NULL;
return C;
}
int main()
current=current->link;
}
out<<endl;
return out;
}
//Polynomial类的友元函数:两个带附加头结点的按升幂排列的多项式链表的头指针分别是A.first和B.first
//返回的是A+B所得的结果多项式链表
Polynomial operator + (Polynomial &A,Polynomial &B)
};
//在当前由this指针指示的项后面插入一个新项
Term* Term::InsertAfter(float c,int e)
{
link=new Term(c,e,link); //创建一个新节点,自动链接
return link; //插入到this后面
}
// Term的友元函数,输出一个节点x的内容到输出流out中
default:
out<<"X"<<x.exp;
break;
}
return out;
}
//Polynomial类的构造函数,建立一个空链表
Polynomial::Polynomial()
{
first=new Term(0,-1);
}
//复制构造函数,用已有的对象初始化当前对象
Polynomial::Polynomial(Polynomial& R)
p=p->link;
}
return C;
}
//Polynomial类的友元函数:将一元多项式A和B相乘,乘积用带附加头结点的单链表存储
//返回值为指向存储乘积多项式的单链表的头指针
Polynomial operator * (Polynomial &A,Polynomial &B)
{
Term *pa,*pb,*pc;
#include<iostream>
#include<cmath>
using namespace std;
//多项式节点的定义
struct Term{
float coef; //系数
int exp; //指数
Term * link;
Term(float c,int e,Term *next=NULL)
for(i=0;i<=maxExp;i++)
result[i]=0;
pa=A.getHead()->link;
while(pa!=NULL)
{
pb=B.getHead()->link;
while(pb!=NULL)
{
k=pa->exp+pb->exp;
result[k]=result[k]+pa->coef*pb->coef;
Polynomial(Polynomial& R); //复制构造函数
int maxOrder(); //计算最大阶数,并返回
Term * getHead() const { return first;} //取得多项式单链表的表头指针
private:
Term *first;
friend ostream& operator<<(ostream&,const Polynomial&); //重载运算符<<
相关文档
最新文档