多项式加减乘除法

时间:2015-05-08 06:25:51
【文件属性】:

文件名称:多项式加减乘除法

文件大小:4KB

文件格式:TXT

更新时间:2015-05-08 06:25:51

链表

#include #include #include #include using namespace std; #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; typedef struct { float coef; int expn; } term,ElemType; typedef struct polynomail { ElemType term; struct polynomail *next; }polynomail, *linklist; Status locatelem(linklist l,ElemType e,linklist &q) { linklist p,m; p=l->next; if(!p) { q=l; return FALSE; } if((p->term).expn>e.expn) {q=l;return FALSE;} else if(p->next) { while(p->next) { m=p->next; if((p->term).expn>e.expn) { q=l; return FALSE; } else if((m->term).expn>e.expn) { q=p;return FALSE;} else p=m; } q=p;return FALSE; } else{ q=p;return FALSE;} } void makenode(linklist &s,ElemType e) { s=(linklist)malloc(sizeof(polynomail)); s->term=e; } void creatpolyn(linklist &p,int m) { linklist h,q,s; ElemType e; p=(linklist)malloc(sizeof(polynomail)); p->next=NULL; for(int i=0;inext=q->next; q->next=s; } } } void destroypolyn(linklist &p) { linklist q; while(p) { q=p->next; free(p); p=q; } } void printpolyn(linklist p) { linklist q; q=p->next; while(q) { printf("+%fX^",((q->term).coef)); printf("%d",((q->term).expn)); q=q->next; } printf("\n"); } int polynlength(linklist p) { linklist q; q=p->next; int i=0; while(q) { i++; q=q->next; } return i; } void add(linklist &pa;,linklist pb) { float sum; linklist qa,qb,qc; qa=pa->next; qb=pb->next; qc=pa; while(qa&&qb;) { if(qa->term.expn>qb->term.expn) { qc->next=qb;qc=qb;qb=qb->next; } else if(qa->term.expnterm.expn) { qc->next=qa;qc=qa;qa=qa->next; } else { sum=qa->term.coef+qb->term.coef; if(sum) { qa->term.coef=sum; qc->next=qa;qc=qa; qa=qa->next; qb=qb->next; } else { qa=qa->next; qb=qb->next; } } } qc->next=qa?qa:qb; free(pb); } void sub(linklist pa,linklist pb) { float sum; linklist qa,qb,qc; qa=pa->next; qb=pb->next; qc=pa; while(qa&&qb;) { if(qa->term.expn>qb->term.expn) { qc->next=qb;qc=qb;qb=qb->next; } else if(qa->term.expnterm.expn) { qc->next=qa;qc=qa;qa=qa->next; } else { sum=qa->term.coef-qb->term.coef; if(sum) { qa->term.coef=sum; qc->next=qa;qc=qa; qa=qa->next; qb=qb->next; } else { qa=qa->next; qb=qb->next; } } } qc->next=qa?qa:qb; free(pb); } void mul(linklist pa,linklist pb,linklist &ps;) { linklist qa,qb,pc,qc,qd,qf; qa=pa->next; qf=qb=pb->next; ps=(linklist)malloc(sizeof(polynomail));ps->next=NULL; pc=(linklist)malloc(sizeof(polynomail));pc->next=NULL;qc=pc; for(qa;qa!=NULL;qa=qa->next) { pc=(linklist)malloc(sizeof(polynomail));pc->next=NULL;qc=pc; qb=qf; for(qb;qb!=NULL;qb=qb->next) { qd=(linklist)malloc(sizeof(polynomail)); qd->next=NULL; qd->term.coef=qb->term.coef*qa->term.coef; qd->term.expn=qb->term.expn+qa->term.expn; qc->next=qd;qc=qc->next; } add(ps,pc); } } void main() { int n; linklist a,b,c,d,f,g,h,i,j,k,o,z; int m,l; printf("输入多项式的个数 "); scanf("%d",&m); creatpolyn( a,m); d=a; printf("得到多项式\n"); printpolyn(d); printf("输入多项式的个数 "); scanf("%d",&l); creatpolyn( b,l); f=b; printf("得到多项式\n"); printpolyn(d); printf("两项式的和\n"); g=a;h=b; add(g,h); printpolyn(g); printf("两项式的差\n"); i=a;j=b; sub(i,j); printpolyn(i); printf("两项式的积\n"); k=a;o=b; mul(k,o,z); printpolyn(z); scanf("%d",&n); }


网友评论