不出结果

{
int i ;
P=new PNode ;
P->next = NULL ;
for(i=1 ; i<=n ; ++i)
{
Polynomial s = new PNode ;
cout<<"请分别输入多项式的系数和指数!\n"<<endl;
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)
{
Pa = new PNode ;
Pb = new PNode ;
Polynomial p1 = Pa->next ; Polynomial p2 = Pb->next ;
Polynomial p3 = Pa ;
while(p1&&p2)
{ int 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->next < p2->next)
{
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 = p1->next;
while (p4&&p4->next)
{
cout << p4->coef << "x^" << p4->expn <<"+";
p4 = p4->next;
}
if (p4->expn == 1)
cout << p4->coef <<"x";
else
cout<< p4->coef << "x^" << p4->expn ;
}
int main()
{
int a,b=1;
Polynomial(P) ;
Polynomial Pa ;
Polynomial Pb ;
cout<<"请选择你要进行的操作!\n"<<endl;
while(b)
{
cout<<"--------------------------------------------------------------------------\n"<<endl;
cout<<"1.创建多项式 2.多项式相加 3.多项式相减 4.退出操作\n"<<endl;
cin>>a;
switch(a)
{ int n,m;
case(1): cout<<"请输入Pa的项数!\n"<<endl ; cin>>n ;
CreatePolyn(Pa,n) ;
cout<<"请输入Pb的项数!\n"<<endl ; cin>>m ;
CreatePolyn(Pb,m) ; break ;
case(2): AddPolyn(Pa,Pb) ; break ;
case(3):
case(4):
default: printf("输入有误!请重新输入!") ;
}
}
}
题主代码修改如下,改动处见注释处,供参考。另这种的写法,当做了加法,对链表Pa Pb 均做了改变,再想做减法前,还必须重新输入两个链表后即重新运行步骤 1.创建多项式 后才可进行。
#include <iostream>
//#include<bits/stdc++.h>
#define OK 1
#define ERROR 0;
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 ;
for(i=1 ; i<=n ; ++i)
{
Polynomial s = new PNode ;
cout<<"请分别输入多项式的系数和指数!\n"<<endl;
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)
{
//Pa = new PNode ; 修改
//Pb = new PNode ; 修改
Polynomial p1 = Pa->next ; Polynomial p2 = Pb->next ;
Polynomial p3 = Pa ;
while(p1 && p2)
{
float sum = 0 ; //int 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)// if(p1->next < p2->next) 修改
{
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; //p1->next; 修改
while (p4) //&& p4->next) 修改
{
cout << p4->coef << "x^" << p4->expn;// 修改
if (p4->next) cout<<"+"; // 修改
p4 = p4->next;
}
cout << endl; // 修改
//if (p4->expn == 1) 修改
// cout << p4->coef <<"x";修改
//else 修改
// cout<< p4->coef << "x^" << p4->expn ;修改
}
int main()
{
int a,b=1;
Polynomial(P) ;
Polynomial Pa ;
Polynomial Pb ;
cout<<"请选择你要进行的操作!\n"<<endl;
while(b)
{
cout<<"--------------------------------------------------------------------------\n"<<endl;
cout<<"1.创建多项式 2.多项式相加 3.多项式相减 4.退出操作\n"<<endl;
cin>>a;
switch(a)
{ int n,m;
case(1): cout<<"请输入Pa的项数!\n"<<endl ; cin>>n ;
CreatePolyn(Pa,n) ;
cout<<"请输入Pb的项数!\n"<<endl ; cin>>m ;
CreatePolyn(Pb,m) ; break ;
case(2): AddPolyn(Pa,Pb) ; break ;
case(3):
case(4):
default: printf("输入有误!请重新输入!") ;
}
}
}
AddPolyn 存在死循环
case后面是不用加括号的
判断错误了
else if (p1->next < p2->next)
改成
else if (p1->expn < p2->expn)