1、C语言多项式运算#include#include#includetypedef struct PolyNode float coef; /系数 int expn; /指数 struct PolyNode *next;LNode,*LinkList;LNode *MakeNode(float coef, int expn) LNode *p; p=(LNode*)malloc(sizeof(LNode); p-coef=coef; p-expn=expn; p-next=NULL; return p;void InitList(LinkList &L) L=MakeNode(0,-1); ret
2、urn;void PrintPolyn(LinkList L) LNode *p; if(!L) printf(NULLn); else if(L-next=NULL) printf(0n); else p=L-next; while(p) printf(%gX%d,p-coef,p-expn); p=p-next; if(p&p-coef0)printf(+); printf(n); void OrderInsert(LinkList L, LNode *s) LNode *p,*q; p=L; while(p-next & p-next-expnexpn) p=p-next; if(p-n
3、ext & p-next-expn=s-expn) p-next-coef+=s-coef; if(p-next-coef=0) q=p-next; p-next=q-next; free(q); free(s); else s-next=p-next; p-next=s; LinkList creatlist(void) LinkList head; LNode *p; float c; int e; InitList(head); printf(输入系数指数,系数为0时结束:); while(1) scanf(%f,&c); if(c=0)break; scanf(%d,&e); p=Ma
4、keNode(c,e); OrderInsert(head,p); return head;void DestroyPolyn(LinkList &L) LNode *p=L,*q; while(p) q=p-next; free(p); p=q; L=NULL;void ClearPolyn(LinkList &L) LNode *p,*q; if(L=NULL) return; p=L-next; L-next=NULL; while(p) q=p-next; free(p); p=q; void CopyPolyn(LinkList La, LinkList &Lb) LNode *p,
5、*r; if(!La) return; InitList(Lb); r=Lb; p=La-next; while(p) r-next=MakeNode(p-coef,p-expn); r=r-next; p=p-next; r-next=NULL;void AddPolyn(LinkList La,LinkList Lb,LinkList &Lc) LNode *p,*q,*r; InitList(Lc); if(!Lc) return; p=La-next; q=Lb-next; r=Lc; while(p!=NULL&q!=NULL) r-next=(LNode*)malloc(sizeo
6、f(LNode); if(p-expn=q-expn) r-next-coef=p-coef+q-coef; r-next-expn=p-expn; r=r-next; p=p-next; q=q-next; else if(p-expnq-expn) r-next-coef=q-coef; r-next-expn=q-expn; q=q-next; r=r-next; else r-next-coef=p-coef; r-next-expn=p-expn; p=p-next; r=r-next; if(q=NULL) while(p!=NULL) printf(4n); r-next=(LN
7、ode*)malloc(sizeof(LNode); r-next-coef=p-coef; r-next-expn=p-expn; r=r-next; p=p-next; if(p=NULL) while(q!=NULL) printf(5n); r-next=(LNode*)malloc(sizeof(LNode); r-next-coef=q-coef; r-next-expn=q-expn; r=r-next; q=q-next; r-next=NULL;void SubPolyn(LinkList La,LinkList Lb,LinkList &Lc) LNode *p,*q,*r
8、,*h; float min; InitList(Lc); if(!Lc) return; p=La-next; q=Lb-next; r=Lc; while(p!=NULL&q!=NULL) r-next=(LNode*)malloc(sizeof(LNode); if(p-expn=q-expn) min=p-coef-q-coef; if(min!=0) r-next-coef=min; r-next-expn=p-expn; r=r-next; p=p-next; q=q-next; else h=r-next; free(h); p=p-next; q=q-next; else if
9、(p-expnq-expn) printf(2n); r-next-coef=-q-coef; r-next-expn=q-expn; q=q-next; r=r-next; else printf(3n); r-next-coef=p-coef; r-next-expn=p-expn; p=p-next; r=r-next; if(q=NULL) while(p!=NULL) printf(4n); r-next=(LNode*)malloc(sizeof(LNode); r-next-coef=p-coef; r-next-expn=p-expn; r=r-next; p=p-next;
10、if(p=NULL) while(q!=NULL) r-next=(LNode*)malloc(sizeof(LNode); r-next-coef=-q-coef; r-next-expn=q-expn; r=r-next; q=q-next; r-next=NULL;double SumPolyn(LinkList La,double &x) double Sum=0; if(!La) printf(error); LNode *p; p=La-next; while(p) Sum+=p-coef*pow(x,p-expn); p=p-next; return Sum;void DaoSh
11、uPolyn(LinkList La,LinkList &Lb,int &x) LNode *p,*q,*k; int i; CopyPolyn(La,Lb); if(!La|!Lb) printf(error); p=La; q=Lb; for(i=0;inext&q-next-expn0) q-next-coef=q-next-coef*q-next-expn; q-next-expn=q-next-expn-1; q=q-next; else if(q-next&q-next-expn=0) k=q-next; q-next=k-next; free(k); else q=q-next;
12、 q=Lb; void JifenPolyn(LinkList La,LinkList &Lb,int &x) LNode *p,*q; int i; CopyPolyn(La,Lb); if(!La|!Lb) printf(error); p=La; q=Lb; for(i=0;inext) q-next-expn=q-next-expn+1; q-next-coef=q-next-coef/q-next-expn; q=q-next; q=Lb;double DingJifenPolyn(LinkList La,int &w,double &a,double &b) LinkList Lb
13、; double A; JifenPolyn(La,Lb,w); A=SumPolyn(Lb,a)-SumPolyn(Lb,b); return A;void MulityPolyn(LinkList La,LinkList Lb,LinkList &Lc) LNode *p,*q,*r; LinkList Lr; InitList(Lr); InitList(Lc); r=Lr; p=La; q=Lb; if(!La|!Lb|!Lc) printf(error); while(p-next) while(q-next) r=(LNode*)malloc(sizeof(LNode); r-co
14、ef=p-next-coef*q-next-coef; r-expn=p-next-expn+q-next-expn; OrderInsert(Lc,r); q=q-next; p=p-next; q=Lb; void PowPolyn(LinkList La,LinkList &Lb,int v) CopyPolyn(La,Lb); int i=0; for(i=0;iv-1;i+) MulityPolyn(La,Lb,Lb); #define N 15void main() LinkList PN=NULL; int i,j,k,menu; while(1) printf(n); prin
15、tf( 0 - Exitn); printf( 1 - Createn); printf( 2 - Printn); printf( 3 - Copyn); printf( 4 - Addn); printf( 5 - Subn); printf( 6 - Destroyn); printf( 7 - Clearn); printf( 8 - Sumn); printf( 9 - DaoShun); printf( 10 - Mulityn); printf( 11 - Jifenn); printf( 12 - DingJifenn); printf( 13 - Pown); printf(
16、n Please Choose: ); scanf(%d,&menu); switch(menu) case 0: return; case 1: printf(输入新多项式的下标(0-%d): ,N-1); scanf(%d,&i); Pi=creatlist(); break; case 2: for(i=0;iN;i+) printf( P%d = ,i); PrintPolyn(Pi); break; case 3: printf(输入被复制的多项式和新多项式的下标(0-%d): ,N-1); scanf(%d%d,&i,&j); CopyPolyn(Pi,Pj); break; ca
17、se 4: printf(输入两相加的多项式的和生成多项式的下标(0-%d),N-1); scanf(%d%d%d,&i,&j,&k); AddPolyn(Pi,Pj,Pk); break; case 5: printf(输入两相减的多项式和生成多项式的下标(0-%d),N-1); scanf(%d%d%d,&i,&j,&k); SubPolyn(Pi,Pj,Pk); break; case 6: printf(输入被销毁多项式的下标(0-%d): ,N-1); scanf(%d,&i); DestroyPolyn(Pi); break; case 7: printf(输入被清空多项式的下标(
18、0-%d): ,N-1); scanf(%d,&i); ClearPolyn(Pi); break; case 8: double Sum,x; printf(输入要求多项式的下标(0-%d)和x的值,N-1); scanf(%d%lf,&i,&x); Sum=SumPolyn(Pi,x); printf(Sum=%lf,Sum); break; case 9: int y; printf(输入要求导的多项式下标和求导后多项式下标(0-%d)以及求导次数yn,N-1); scanf(%d%d%d,&i,&j,&y); DaoShuPolyn(Pi,Pj,y); break; case 10:
19、printf(输入两个相乘多项式的下标和生成多项式的下标(0-%d),N-1); scanf(%d%d%d,&i,&j,&k); MulityPolyn(Pi,Pj,Pk); break; case 11: int z; printf(输入要积分的多项式下标和积分后的多项式下标(0-%d)以及积分的次数zn,N-1); scanf(%d%d%d,&i,&j,&z); JifenPolyn(Pi,Pj,z); break; case 12: int w; double a,b,S; printf(输入要积分的多项式下标(0-%d)以及积分的次数w,以及上下限a,bn,N-1); scanf(%d%d%lf%lf,&i,&w,&a,&b); S=DingJifenPolyn(Pi,w,a,b); printf(积分后的值S=%lf,S); break; case 13: int v; printf(输入要乘方的多项式下标和乘方后的多项式下标(0-%d)以及乘方次数vn,N-1); scanf(%d%d%d,&i,&j,&v); PowPolyn(Pi,Pj,v); break; default: ;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1