已经编译过了 是正确的
[此贴子已经被作者于2006-3-28 21:41:42编辑过]
已经编译过了 是正确的
[此贴子已经被作者于2006-3-28 21:41:42编辑过]
对不起 文件是损坏了 我现在把代码贴了出来。给大家带来的不便,我深表歉意!
关于一元多项式的加法的代码:
#include<iostream.h>
struct Term //定义结点结构
{
Term(int c,int e){link=NULL;}
Term(int c,int e,Term* next)
{
coef=c;
exp=e;
link=next;
}
Term * InsertAfter(int c,int e);
int c;
int e;
int coef;
int exp;
Term *link;
};
class Polynominal//定义多项式类
{
public:
Polynominal();
~Polynominal(){delete theList;};
void AddTerms(istream& in);
void Output(ostream& out)const;
void PolyAdd(const Polynominal& r);
Polynominal& operator+(const Polynominal& x);
void operator=(const Polynominal&x);
private:
int coef,exp;
Term* theList;
friend ostream& operator<<(ostream& output,const Polynominal&);
friend istream& operator>>(istream&,Polynominal&);
friend int ExpComp(int x,int y);
};
Term* Term::InsertAfter(int c,int e)//在结点的后面插入新的结点
{
link=new Term(c,e,link);
return link;
}
Polynominal::Polynominal()
{
theList=new Term(0,-1);
theList->link=theList;
}
void Polynominal::AddTerms(istream& in)//注意此处是输入函数,输入两个整数c和e,分别是多项式的系数和指数
{
Term* q=theList;
int c,e;
for(;;)
{
cout<<"Input a term(coef,exp):\n"<<endl;
in>>c>>e;此处是输入的值
if(e<0) break;//如果输入的e值是负数,停止输入;
q=q->InsertAfter(c,e);
}
}
void Polynominal::Output(ostream& out)const
{
bool start=true;
Term *p=theList->link;
out<<"The polynominal is:\n"<<endl;
for(;p!=theList;p=p->link)
{
if(!start&&p->coef>0) out<<'+';
start=false;
if(p->coef==0) out<<" ";
switch(p->exp){
case 0:out<<p->coef;break;
case 1:if(p->coef!=1) out<<p->coef;
out<<'X';break;
default:if(p->coef!=1) out<<p->coef;
out<<'X'<<'^'<<p->exp;break;
}
}
out<<endl;
}
int ExpComp(int x,int y)
{
if(x==y) return 0;
else if(x>y) return 1;
else return -1;
}
void Polynominal::PolyAdd(const Polynominal& r)
{
Term* q2,
*q1=theList,*q=theList->link,
*p=r.theList->link;
while(p->exp >=0){
switch(ExpComp(p->exp,q->exp)){
case -1:q1=q;q=q->link;break;
case 0:q->coef=q->coef+p->coef;
if(q->coef==0){
q2=q;q1->link=q->link;
q=q->link;p=p->link;
delete(q2);
}
else{
q1=q;q=q->link;p=p->link;
}
break;
case 1:
q1=q1->InsertAfter(p->coef,p->exp);
p=p->link;break;
}
}
}
void Polynominal::operator=(const Polynominal& x)
{
if(this==&x) return;
Term *q=theList,*p=x.theList->link,*r=NULL;
for(q=q->link;q!=theList;q=r){
r=q->link;delete q;
}
theList->link=theList;
for(;p!=x.theList;p=p->link)
q=q->InsertAfter(p->coef,p->exp);
}
Polynominal& Polynominal::operator+(const Polynominal& b)
{
PolyAdd(b);
return *this;
}
ostream& operator<<(ostream &out,const Polynominal &x)
{
x.Output(out);
return out;
}
istream& operator>>(istream& in,Polynominal &x)
{
x.AddTerms(in);
return in;
}
void main()
{
Polynominal p,q;
cin>>p;//当输入的q多项式的e值是负数的时候,完成第一个多项式的输入
cout<<p;
cin>>q;//当输入的p多项式的e值是负数的时候,完成第二个多项式的输入
cout<<q;
q=q+p;cout<<q;
}
程序运行时,
首先输入第一个多项式的表达式。例如5 2(表示5x^2);
然后输入6 -1,输入后因为e值小于0,则第一个多项式输入完毕。
接着输入第二个多项式的表达式,可仿照第一个多项式的输入方法。
[此贴子已经被作者于2006-4-5 22:57:01编辑过]