您的位置:首页 > 编程语言 > C语言/C++

一元多项式的加减法(C++版)

2009-03-28 20:06 316 查看
#include<iostream>
#include<stdlib.h>
#include<ctype.h>
using namespace std;

typedef struct Lnode
{ float coef; //系数
int exp; //指数
struct Lnode *next;
}LNode,*LinkList;

void CreatPolyn(LinkList &L,int m)
{
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL; //建立一个带头结点的单链表
LinkList p,q;
cout<<"请依次输入各项的系数和指数"<<endl;
for(int i=1;i<=m;i++) //插入到表尾
{
p=(LinkList)malloc(sizeof(LNode));
cin>>p->coef>>p->exp;
if(L->next==NULL) L->next=p;
else q->next=p;
p->next=NULL;
q=p;
}
}

void output(LinkList h) //输出一元多项式的函数
{ if(h->next==NULL)
cout<<0;
else
{ h=h->next;
cout<<h->coef<<"*"<<"x^"<<h->exp;
while(h->next!=NULL)
{ h=h->next;
if(h->coef>0)
cout<<'+'<<h->coef<<"*"<<"x^"<<h->exp;
else
cout<<h->coef<<"*"<<"x^"<<h->exp;
}
}
}

LinkList add(LinkList a,LinkList b)//加法函数
{ LinkList p,q,r,t;
int s;
p=a->next;
q=b->next;
r=a;
while(p!=NULL&&q!=NULL)
{ if(p->exp < q->exp)
{ r->next=p;
r=r->next;
p=p-> next;
}
else if(p->exp > q->exp)
{ r->next=q;
r=r->next;
q=q-> next;
}
else
{ s=p->coef+q->coef;
if(s!=0)
{ p->coef=s;
r->next=p;
r=r->next;
p=p->next;
t=q;
q=q->next;
free(t);
}
else
{ t=p;
p=p->next;
free(t);
t=q;
q=q->next;
free(t);
}
}
}

if(p!=NULL)
r->next=p;
else r->next=q;
return(a);
}

LinkList min(LinkList a, LinkList b)//减法函数
{ LinkList p,q,r,t;
int s;
p=a->next;
q=b->next;
r=a;
while(p!=NULL&&q!=NULL)
{ if(p->exp < q->exp)
{ r->next=p;
r=r->next;
p=p->next;
}
else if(p->exp > q->exp)
{ q->coef=-q->coef;
r->next=q;
r=r-> next;
q=q-> next;
}
else
{ s=p->coef-q->coef;
if(s!=0)
{ p->coef=s;
r->next=p;
r=r->next;
p=p->next;
t=q;
q=q->next;
free(t);
}
else
{ t=p;
p=p->next;
free(t);
t=q;
q=q->next;
free(t);
if(p==NULL&&q==NULL)
r-> next=NULL;
}
}
}

if(p!=NULL)
r-> next=p;
else
{ while(q!=NULL)
{ q->coef=-q-> coef;
r->next=q;
r=r->next;
q=q->next;
}
}
return(a);
}

int main() //主函数
{ LinkList pa,pb,pc;
int i,j,k;
cout<<"******一元多项式加减法******"<<endl;
cout<<"建立一元多项式A(x):"<<endl<<"请输入项数:"<<endl;
cin>>i;
CreatPolyn(pa,i);
cout<<"A(x)=";
output(pa);
cout<<endl;
cout<<"建立一元多项式B(x):"<<endl<<"请输入项数:"<<endl;
cin>>j;
CreatPolyn(pb,j);
cout<<"B(x)=";
output(pb);
cout<<endl;
cout<<"******要执行加法还是减法?(加法1,减法2,取消0)*****"<<endl;
cin>> k;
if(k==1)
{ pc=add(pa,pb);
cout<<"C(x)=A(x)+B(X)=";
output(pc);
cout<<endl;

}
if(k==2)
{ pc=min(pa,pb);
cout<<"C(x)=A(x)-B(x)=";
output(pc);
cout<<endl;
}
else exit(0);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: