经过一次计算之后,再经过依次计算,就不出结果

#include<iostream>
using namespace std;
typedef int Status;
//链式多项式的创建
typedef struct PNode
{
float coef ;
int expn ;
struct PNode *next ;
}PNode,*Polynomial ;
//创建多项式
void CreatePolyn(Polynomial &P,int n)
{
int i ;
P=new PNode ;
P->next = NULL ;
cout<<"请分别输入多项式的系数和指数!"<<endl;
for(i=1 ; i<=n ; ++i)
{
Polynomial s = new PNode ;
cin>>s->coef>>s->expn ;
Polynomial pre = P ;
Polynomial q = P->next ;
while(q&&q->expn<s->expn )
{
pre = q ;
q = q->next ;
}
s->next = q ;
pre->next = s ;
}
}
//多项式的相加
void AddPolyn(Polynomial &Pa,Polynomial &Pb)
{
Polynomial p1 = Pa->next ; Polynomial p2 = Pb->next ;
Polynomial p3 = Pa ;
while(p1&&p2)
{ float sum = 0 ;
if(p1->expn == p2->expn )
{
sum = p1->coef + p2->coef ;
if(sum!=0)
{
p1->coef = sum;
p3->next = p1 ; p3 = p1 ;
p1 = p1->next ;
Polynomial r = p2 ; p2 = p2->next ; delete r ;
}
else
{
Polynomial r ;
r = p1 ; p1 = p1->next ; delete r ;
r = p2 ; p2 = p2->next ; delete r ;
}
}
else if(p1->expn < p2->expn)
{
p3->next = p1 ;
p3 = p1 ;
p1 = p1->next ;
}
else
{
p3->next = p2 ;
p3 = p2 ;
p2 = p2->next ;
}
}
p3->next = p1 ? p1 : p2 ;
delete Pb;
Polynomial p4 = Pa->next;
while (p4)
{
cout << p4->coef << "x^" << p4->expn ;
if(p4->next)
cout << "+" ;
p4 = p4->next ;
}
cout << endl ;
}
void Cutpolyn(Polynomial &Pa,Polynomial &Pb)
{
Polynomial p1 = Pa->next ; Polynomial p2 = Pb->next ;
Polynomial p3 = Pa ;
while(p1&&p2)
{ float sum = 0 ;
if(p1->expn == p2->expn )
{
sum = p1->coef - p2->coef ;
if(sum!=0)
{
p1->coef = sum;
p3->next = p1 ; p3 = p1 ;
p1 = p1->next ;
Polynomial r = p2 ; p2 = p2->next ; delete r ;
}
else
{
Polynomial r ;
r = p1 ; p1 = p1->next ; delete r ;
r = p2 ; p2 = p2->next ; delete r ;
}
}
else if(p1->expn < p2->expn)
{
p3->next = p1 ;
p3 = p1 ;
p1 = p1->next ;
}
else
{
p3->next = p2 ;
p3 = p2 ;
p2 = p2->next ;
}
}
p3->next = p1 ? p1 : p2 ;
delete Pb;
Polynomial p4 = Pa->next;
while (p4)
{
cout << p4->coef << "x^" << p4->expn ;
if(p4->next)
cout << "+" ;
p4 = p4->next ;
}
cout << endl ;
}
int main()
{
int a,b=1;
Polynomial(P) ;
Polynomial Pa ;
Polynomial Pb ;
cout<<"请选择你要进行的操作: "<<endl;
while(b)
{
cout<<"--------------------------------------------------------------------------"<<endl;
cout<<"1.创建多项式 2.多项式相加 3.多项式相减 4.退出操作"<<endl;
cin>>a;
switch(a)
{ int n,m;
case(1): cout<<"请输入Pa的项数: "<<endl ; cin>>n ;
CreatePolyn(Pa,n) ;
cout<<"请输入Pb的项数: "<<endl ; cin>>m ;
CreatePolyn(Pb,m) ; break ;
case(2): AddPolyn(Pa,Pb) ; break ;
case(3): Cutpolyn(Pa,Pb) ; break ;
case(4): exit(0) ;
default: printf("输入有误!请重新输入!") ;
}
}
return 0;
}