求指教2个多项式相加程序的问题
程序代码:#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{ float coef; //项的表示
int exp; //系数
struct Node *next; //指数
} PolyNode; //指向多项式中的下一结点
PolyNode * polyCreat() //尾插法
{ PolyNode *L,*r,*s;
float coef;
int exp;
L=(PolyNode *)malloc(sizeof(PolyNode));
r=L; //r为尾指针
scanf("%f,%d",&coef,&exp);
while(coef!=0) //如果输入的系数为0,结束
{ s=(PolyNode *)malloc(sizeof(PolyNode));
s->coef=coef;
s->exp=exp;
r->next=s;
r=s;
scanf("%f,%d",&coef,&exp);
}
r->next=NULL;
return(L);
}
void polyAdd(PolyNode *pa,PolyNode *pb) //多项式相加
{ PolyNode *p,*q,*r,*t; //暂时存放欲释放的结点,r为和多项式链表中的尾指针
float sum; //系数相等时,相加求和的结果保存在sum中
p=pa->next; //p,q分别指向pa,pb链表的第一个结点
q=pb->next;
r=pa; //和多项式保存在头指针为pa的链表中,r初始指向pa
while(p&&q)
{ if(p->exp<q->exp) //p指向的项指数小于q,尾指针指向p,且将p指向链表下一节点
{ r=p;
p=p->next;
}
else if(p->exp==q->exp) //指数相等时,系数相加
{ sum= p->coef+q->coef;
if(sum!=0) //系数相加不为0
{ p->coef=sum;
r=p;
p=p->next;
t=q;
q=q->next;
free(t);
}
else //系数相加为0
{ t=p;
p=p->next;
r->next=p;
free(t);
t=q;
q=q->next;
free(t);
}
}
else //q指向的项的指数小于p时,将q加入到和多项式
{ r->next=q;
r=q;
q=q->next;
r->next=p;
}
}
if(q) r->next=q;
free(pb);
}
void printPoly(PolyNode *pl)
{ int i=0;
PolyNode *p;
p=pl->next;
while(p)
{ printf("(%7.2f, %5d)",p->coef,p->exp);
p=p->next;
i++;
if(i%4==0) printf("\n");
}
printf("\n相加结果多项式项数为%d项\n",i);
getchar();
}
void main()
{ PolyNode *polya,*polyb;
printf("请输入多项式A的系数和指数,格式:系数,指数,以0结束输入\n");
polya=polyCreat();
printf("请输入多项式B的系数和指数,格式:系数,指数,以0结束输入\n");
polya=polyCreat();
polyAdd(polya,polyb);
printf("下面输出多项式的和:\n");
printPoly(polya);
}
编译通过了,在dev c++中调试,说“程序产生一个访问违例(段异常),我知道应该是指针问题,但找不出来错误时的断点是这
q=pb->next;
哪里指针错了?
[ 本帖最后由 hifine 于 2012-3-25 13:11 编辑 ]






