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

#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;
}

posted @ 2009-03-28 20:06  glc400  阅读(580)  评论(0编辑  收藏  举报