求指教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 编辑 ]