为了账号安全,请及时绑定邮箱和手机立即绑定

求大佬帮忙看看这个函数哪里有问题啊?该怎么修改?

求大佬帮忙看看这个函数哪里有问题啊?该怎么修改?

慕少森 2022-11-19 18:14:45

Polynomial * AddPolyn(Polynomial *ha,Polynomial *hb){
Polynomial *L,*pa,*pb;
int a,b;
L=NULL;
pa=ha;
pb=hb;
while(pa&&pb){
a=pa->expn;
b=pb->expn;
switch(cmp(*pa,*pb)){
case -1:
L->next=pa;
L=pa;
pa=pa->next;
case 0:
if(pa->coef+pb->coef==0){
pa=pa->next;
pb=pb->next;
}
else{
pa->coef+=pb->coef;
L->next=pa;
L=pa;
pa=pa->next;
pb=pb->next;
}
case 1:
L->next=pb;
pb=pb->next;
L=pb;
L->next=pa;
}
}
if(pa) L->next=pa;
else L->next=pb;
return(L);
}

查看完整描述

1 回答

?
慕娘9325324

TA贡献1486条经验 获得超1个赞

//AddPolyn.cpp
//Add Polynomial Pa and Pb 
#include <iostream.h>
#include <malloc.h>
#include <conio.h>
#include <stdio.h>

struct Term
{ float coef;
int expn;
struct Term *next;
}*LinkList;
//typedef LinkList with polynomial
void CreateList_L(struct Term * &L,int n)
{ //To Creatre a LinkList L with HeadNode 
int i;
struct Term *p;
L=(struct Term *)malloc(sizeof(Term));
L->next=NULL;
for(i=n;i>0;--i)
{
p=(struct Term *)malloc(sizeof(Term));
cout<<"coef = ";
cin>>p->coef; //Reverse order inputing for Creating a LinkList
cout<<"expn = ";
cin>>p->expn; 
p->next=L->next;
L->next=p;
}//end of for  
if(n) cout<<"Success to Create a LinkList !"<<endl;
else cout<<"A NULL LinkList have been created !"<<endl;
} //end of function CreateList

char cmp(int qa_expn,int qb_expn) //cmp() function  
{//compare qa->expn and qb->expn
if(qa_expn==qb_expn) 
return '=';
else 
if(qa_expn>qb_expn) return'>';
else return '<';
}//end of cmp() function

void AddPolyn(struct Term * &Pa,struct Term * &Pb) //AddPolyn() function
{ //Add the polynomial Pa and Pb  
struct Term *qa,*qb,*pre,*u;  
float sum;
qa=Pa->next; //qa point to current node of Pa 
qb=Pb->next; //qb point to current node of Pb 
pre=Pa; //pre point to the HeadNode of Pa

while(qa&&qb) //neither qa nor qb are NULL
switch(cmp(qa->expn,qb->expn))
{ case '<':
pre=qa;qa=qa->next;
break;
case '=': //when the expn of qa == the expn of qb 
sum=qa->coef+qb->coef;
if(sum!=0.0)  
{ qa->coef=sum;pre=qa; //modify the current Node coef values of Pa
} //end of if
else
{ pre->next=qa->next; //otherwise qa->expn=qb->expn then delete current Node in Pa
free(qa);
} //end of else
qa=pre->next;u=qb;qb=qb->next;
free(u);
break;
case '>':
u=qb->next;
qb->next=qa;
pre->next=qb;
pre=qb;
qb=u;
break;
} //end of switch
if(!qa) pre->next=qb; //to link the rest of node of Pb
free(Pb);
cout<<endl;
}//end of AddPolyn() function

void main() //main() function
{  
struct Term *Pa,*Pb,*p; 
int InitLNodeNum_Pa,InitLNodeNum_Pb; //the Init LinkNode Numbers

cout<<"AddPolyn.cpp"<<endl<<"============="<<endl;  
cout<<endl<<"How many sessions of polynomial Pa do you want ? (eg. 4): ";
cin>>InitLNodeNum_Pa;  
cout<<"Please input the Pa.coef and Pa.expn in descent order:"<<endl;
cout<<"For example: (coef=3,expn=21);(coef=7,expn=9);(coef=4,expn=1);(coef=5,expn=0)"<<endl;
CreateList_L(Pa,InitLNodeNum_Pa); //to create polynomial Pa LinkList with 
//the InitLNodeNum_Pa=input number +1  
cout<<endl<<"How many sessions of polynomial Pb do you want ? (eg. 3): ";
cin>>InitLNodeNum_Pb;  
cout<<"Please input the Pb.coef and Pb.expn in descent order:"<<endl;
cout<<"For example: (coef=-7,expn=9);(coef=13,expn=6);(coef=8,expn=1)"<<endl;
CreateList_L(Pb,InitLNodeNum_Pb); //to create polynomial Pb LinkList with
//the InitLNodeNum_Pb=input number +1  
AddPolyn(Pa,Pb); //AddPolyn Pa and Pb
p=Pa;
cout<<"Result:"<<endl;
while(p->next) //output Pa=Pa+Pb
{ p=p->next;
cout<<"(Pc.coef="<<p->coef<<",";
cout<<"Pc.expn="<<p->expn<<")"<<endl; 
}// end of while
cout<<endl<<"OK...!"<<endl;
getch();
}//end of main() function

 


查看完整回答
反对 回复 6天前

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信