各位 大哥 ,小弟最近在做课程设计实验时出了点小问题··一直解决不了··
希望大家帮下忙:
#include<stdio.h> #include<malloc.h> #include<conio.h> typedef struct LNode{ int coef;/*系数*/ int expn;/*指数*/ struct LNode *next; }LNode,*LinkList; void Insert_sort_list(LNode *head) { LNode *p, *q, *t, *r; p = head->next; head->next = NULL; while(NULL != p) { t = head; q = t->next; while(NULL != q && q->expn <= p->expn) { t = q; q = q->next; } r = p ->next; t->next = p; p->next = q; p = r; } } void CreateList(LinkList L,int m)/*带头结点*/ { LinkList p,q; int i=0; p=q=L; L->next=NULL; printf("先输系数后输指数,中间空格\n"); for(i=0;i<m;i++){ p=(LNode *)malloc(sizeof(LNode)); scanf("%d %d",&(p->coef),&(p->expn)); L->next=p; L=p; } L->next=NULL; L=q; Insert_sort_list(L); }/*test success*/ void print(LinkList L) { LinkList p; p=L->next; printf("\n(下式中X为未知数)\n"); while(p!=NULL){ printf("\(%dX\^%d\)",p->coef,p->expn); if(p->next!=NULL)printf("\ \+\ "); p=p->next; } } void DeleteNode(LNode *p) { LNode *q; q=p->next; p->next=q->next; free(q); }/*删除节点*/ int LocateElem(LinkList L,int expn)/*查找是否有与该多项式的系数相同的项*/ { LNode *p; p=L; while(p->expn!=expn&&p->next!=NULL) { p=p->next; } if (p->expn==expn){ return p->coef;} /*若找到则返回系数*/ else return 0; } int Length(LinkList L)/*求多项式的项数*/ { LNode *p; int i=0; p=L->next; while(p!=NULL) { p=p->next; i++; } return i; } /* void Delet(LinkList L) { LNode *p,*q; p=L->next; while(p!=null) { q=p; p=p->next; free(q); } } */ void Add(LinkList pa,LinkList pb,LinkList pc)/*多项式相加,pc=pa+pa,*/ { LNode *p, *q, *r, *t; p = pa->next; q = pb->next; r = pc; while(p!=NULL||q!=NULL) { if(p!=NULL&&q!=NULL) { if(p->expn<q->expn) { t=(LNode *)malloc(sizeof(LNode)); t->coef=p->coef; t->expn=p->expn; t->next=NULL; r->next=t; p=p->next; } else if(p->expn==q->expn) { t=(LNode *)malloc(sizeof(LNode)); t->coef=p->coef+q->coef; t->expn=p->expn; t->next=NULL; r->next=t; p=p->next; q=q->next; } else { t=(LNode *)malloc(sizeof(LNode)); t->coef=q->coef; t->expn=q->expn; t->next=NULL; r->next=t; q=q->next; } r=r->next; } else if(p!=NULL&&q==NULL) { r->next=p; p=p->next; r=r->next; } else if(p==NULL&&q!=NULL) { r->next=q; q=q->next; r=r->next; } } } void Subtract(LinkList pa,LinkList pb,LinkList pc)/*多项式相减,pc=pa-pa*/ { LNode *p, *q, *r, *t; p = pa->next; q = pb->next; r = pc; while(p!=NULL||q!=NULL) { if(p!=NULL&&q!=NULL) { if(p->expn<q->expn) { t=(LNode *)malloc(sizeof(LNode)); t->coef=p->coef; t->expn=p->expn; t->next=NULL; r->next=t; p=p->next; } else if(p->expn==q->expn) { t=(LNode *)malloc(sizeof(LNode)); t->coef=p->coef-q->coef; t->expn=p->expn; t->next=NULL; r->next=t; p=p->next; q=q->next; } else { t=(LNode *)malloc(sizeof(LNode)); t->coef=q->coef*(-1); t->expn=q->expn; t->next=NULL; r->next=t; q=q->next; } r=r->next; } else if(p!=NULL&&q==NULL) { r->next=p; p=p->next; r=r->next; } else if(p==NULL&&q!=NULL) { r->next=q; q=q->next; r=r->next; } } } void Multiply(LinkList pa,LinkList pb,LinkList pc)/*多项式相乘pc=pa*pb*/ { LNode *p, *q, *t, *c, *t1,*t2,*temp1,*temp2;/*temp1放第i个与pb相乘的开成的多项式 */ t1=(LinkList)malloc(sizeof(LNode)); pc=(LinkList)malloc(sizeof(LNode)); t1->next=NULL; pc->next=NULL; c=pc; t2=pc; temp2=t2; temp1=t1; if(pa->next==NULL||pb->next==NULL){pc->next==NULL; return;}/* */ for(p = pa->next;p!=NULL;p=p->next) { for(q = pb->next;p!=NULL;q=q->next) { t=(LNode *)malloc(sizeof(LNode)); t->coef=(int)((p->coef)*(q->coef)); t->expn=(int)((p->expn)+(q->expn)); t->next=NULL; temp1->next=t; temp1=temp1->next; } pc->next=NULL; c=pc; Add(t1,t2,c); t2=pc; t1->next=NULL; temp1=t1; } } int main() { LinkList L,M,N; int m,n; L=(LinkList)malloc(sizeof(LNode)); M=(LinkList)malloc(sizeof(LNode)); N=(LinkList)malloc(sizeof(LNode)); N->next=NULL; printf("请输入您要构造的多项式的项数\n"); scanf("%d",&m); CreateList(L,m); print(L); printf("\n长度为:%d",Length(L)); printf("\n\n输入您要查找该多项式的系数相同的项的指数值:\n"); scanf("%d",&n); if(n=LocateElem(L,n)) printf("存在指数与此相同的项,系数为:%d\n",n); else printf("未找到!"); printf("\n以下构造多一个多项式与原多项式进行运算\n"); printf("\n请输入您要构造的多项式的项数\n"); scanf("%d",&m); CreateList(M,m); printf("\n两个多项式相加的结果:\n"); Add(L,M,N); print(N); printf("\n两个多项式相减的结果:\n"); Subtract(L,M,N); print(N); printf("\n两个多项式相乘的结果:\n"); Multiply(L,M,N); print(N); getch(); return 0; }
下面是图片,每次运行到乘法的时候 都会出现这样的错误 ··是不是内存错误····
各位兄台高抬躈帮下忙啊············感激不尽············