数据结构:一元多项式相加,这个程序哪里错了?

#include<stdio.h> #include<stdlib.h> typedef struct LNode{ /*多项式的存储结构定义*/ int coef; int expn; struct LNode *next;}LNode,*polynomail;void creatpolyn(polynomail &p,int m){ int i; int coef; int expn; polynomail s; p=(polynomail)malloc(sizeof(LNode)); p->next = NULL; for(i=1;i<=m;++i) { s=(polynomail)malloc(sizeof(LNode)); printf("请输入一元多项式pa的系数和指数:"); scanf("%d %d",s->coef,s->expn); s->coef=coef; s->expn=expn; s->next=p->next; p->next=s; }}//CreatPolynvoid addpolyn(polynomail &pa,polynomail &pb){ polynomail qa,qb,c,pc; pc=(polynomail)malloc(sizeof(LNode)); pc->next=NULL; qa=pa->next; qb=pb->next; while(qa&&qb) { if(qa->expn=qb->expn) { c=(polynomail)malloc(sizeof(LNode)); c->expn=pa->expn; c->coef=qa->coef+qb->coef; c->next=NULL; qa=qa->next; qb=qb->next; } if(qa->expn>qb->expn) { c=(polynomail)malloc(sizeof(LNode)); c->expn=qa->expn; c->coef=qa->coef; c->next=NULL; qa=qa->next; } if(qa->expn) { c=(polynomail)malloc(sizeof(LNode)); c->expn=qb->expn; c->coef=qb->coef; c->next=NULL; qb=qb->next; } pc->next=c; pc=c; }//while if(qa) c->next=qa; else c->next=qb;}//AddPolynvoid printpolyn(polynomail p){ while(p->next!=NULL) { p=p->next; printf(" %g*x^%d",p->coef,p->expn); }}int main(){ int n,m; polynomail pa,pb; printf("请输入一元多项式pa的项数:"); scanf("%d",&n); creatpolyn(pa,n); printf("请输入一元多项式pb的项数:"); scanf("%d尀n",&m); creatpolyn(pb,m); addpolyn(pa,pb); printf("结果是:pa+pb="); printpolyn(pa); printf("尀n"); return 0; }
2026年09月25日 14:25
有2个网友回答
网友(1):

楼主你好,我帮你看了一下程序,有一点小问题
1,在void creatpolyn(polynomail &p,int m)函数中的scanf("%d %d",s->coef,s->expn);这条语句不对。因为scanf函数的参数是地址,而s->coef和s->expn均是int变量
2,看你在主函数里面 printf("结果是:pa+pb=");printpolyn(pa);这两句,说明你是想把两个多项式相加的值放在pa变量中的吧,所以你在void addpolyn(polynomail &pa,polynomail &pb)函数中就没必要在定义pc这条链了。
3,void printpolyn(polynomail p)函数中printf(" %g*x^%d",p->coef,p->expn); 语句为什么第一个变量p->coef的输出要用%g呢?这个我不明白了(%g 使用%f和%e表示中的总的位数表示最短的来表示浮点数 G 同g格式,但表示为指数 ),这个我一般不用。
4,原则上来说,我这个程序也是不正确的,而且有致命的错误。因为你在用malloc函数的时候,要在程序的最后free掉,而c的编译器是不做这件事情的。
5,最重要的一点,算法思想是程序的灵魂,要多注重算法思想的积累,写程序之前,一定要把整个算法的流程在脑子里过一遍,做到心中有数。

本人现在专攻c++,已经快一年没有碰C了,如有错误,多多包涵,尽请指正

**********************************************************************************************************************
#include
#include
typedef struct LNode
{ /*多项式的存储结构定义*/
int coef;
int expn;
struct LNode *next;
}LNode,*polynomail;

void creatpolyn(polynomail &p,int m)
{
int i;
// int coef;
// int expn;
polynomail s;
p=(polynomail)malloc(sizeof(LNode));
// p->next =NULL;
s=p;
for(i=1;i<=m;++i)
{
s->next=(polynomail)malloc(sizeof(LNode));
printf("请输入一元多项式pa的系数和指数:");
scanf("%d %d",&s->next->coef,&s->next->expn);
// s->coef=coef;
// s->expn=expn;
// s->next=p->next;
s=s->next;
if(i==1)
{
p->next=s;
}
}
s->next=NULL;
}//CreatPolyn

void addpolyn(polynomail &pa,polynomail &pb)
{
polynomail qa,qb,c/*,pc*/;
// pc=(polynomail)malloc(sizeof(LNode));
// pc->next=c;
qa=pa->next;
qb=pb->next;
while(qb)
{

if(qa==NULL)
{
c=pa->next;
pa->next=(polynomail)malloc(sizeof(LNode));
pa->next->coef=qb->coef;
pa->next->expn=qb->expn;
pa->next->next=c;
qb=qb->next;
qa=pa->next;
continue;
}if/*(qa->expn=qb->expn)*/(qa->expn==qb->expn)
{
// c=(polynomail)malloc(sizeof(LNode));
// c->expn=qa->expn;
// c->coef=qa->coef+qb->coef;
// c->next=NULL;
qa->coef+=qb->coef;
qb=qb->next;
qa=pa->next;
continue;
}

qa=qa->next;
}
}//AddPolyn

void printpolyn(polynomail p)
{

while(p->next!=NULL)
{
p=p->next;
printf(" %d*x^%d",p->coef,p->expn);
}

}

int main()
{
int n,m;
polynomail pa,pb;
printf("请输入一元多项式pa的项数:");
scanf("%d",&n);
creatpolyn(pa,n);
printf("请输入一元多项式pb的项数:");
// scanf("%d\n",&m);
scanf("%d",&m);
creatpolyn(pb,m);
printpolyn(pa);
printpolyn(pb);
addpolyn(pa,pb);
printf("结果是:pa+pb=");
printpolyn(pa);
printf("\n");

return 0;

}

网友(2):

if(qa->expn=qb->expn)这里错了吧,我用手机回的,好吃力啊!你这里是赋值号,不是判断等于……