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

2022-11-19 18:14:45

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 回答

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

#include <iostream.h>
#include <malloc.h>
#include <conio.h>
#include <stdio.h>

struct Term
{ float coef;
int expn;
struct Term *next;
void CreateList_L(struct Term * &L,int n)
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

{ //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;

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

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
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

• 1 回答
• 0 关注
• 9 浏览

0/150