1、一元多项式运算c语言版#include #include #include #define OK 1;#define ERROR 0;#define TURE 1;#define FALSE 0;#define MAXSIZE 100;typedef struct float coef; int expn;term,elemtype;typedef struct LNode elemtype data; struct LNode *next;List,*LinkList;typedef LinkList polynomail;int Initlist(LinkList *p) *p=(Link
2、List)malloc(sizeof(List); (*p)-next=NULL; return OK;int cmp(term a,term b) if(a.expnnext; if(*q)=NULL) *q=*p; return ERROR; while(*q)!=NULL) if(cmp(e,(*q)-data)=0) break; else *q=(*q)-next; if(*q)!=NULL) return TURE; if(*q)=NULL) return FALSE; int MakeNode(LinkList *s,elemtype e) if(!(*s) return OVE
3、RFLOW; (*s)-data=e; (*s)-next=NULL; return OK;void InsFirst(LinkList *q,LinkList *s) (*s)-next=(*q)-next; (*q)-next=*s;int DelFirst(LinkList *q,LinkList *s) LinkList p; p=*s; (*q)-next=p-next; return OK;void FreeNode(LinkList *p) LinkList q; q=*p; free(q);LinkList NextPos(LinkList *p,LinkList *q) re
4、turn (*q)-next;void SetCurElem(polynomail *p,float m) (*p)-data).coef=m;int ListEmpty(LinkList p) if(p-next=NULL) return TURE; if(p-next!=NULL) return FALSE;void Append(LinkList *p,LinkList *s) LinkList q; q=*p; while(q-next!=NULL) q=q-next; q-next=*s;void SortPolyn(polynomail *p) polynomail q,s,t,m
5、,n,x,y,x1,x2; q=*p; Initlist(&m); m-data.coef=0.0; m-data.expn=-1; n=m; s=q; y=s-next; t=y-next; x=q-next; x1=s; x2=t; while(x2!=NULL) while(t!=NULL) if(cmp(x-data,y-data)next; y=y-next; t=t-next; else x=y; x1=s; x2=t; if(cmp(x-data,y-data)0) x=y; x1=s; x2=t; x1-next=x2; n-next=x; x-next=NULL; n=n-n
6、ext; x1=q; x=q-next; x2=x-next; s=x1; y=x; t=x2; n-next=x; x-next=NULL; q-next=NULL; free(q); *p=m;void CreatePolyn(polynomail *p,int m) polynomail h,q100,s100,x; int i; elemtype e; elemtype t100; h=*p; e.coef=0.0; e.expn=-1; h-data=e; h-next=NULL; q0=h; Initlist(&x); for(i=0;inext; if(q-data).coef0
7、.0&(q-data).expn!=0) printf(%.4f*x(%d),(q-data).coef,(q-data).expn); else if(q-data).expn=0) printf(%.4f,(q-data).coef); else printf(%.4f*x(%d),(q-data).coef,(q-data).expn); q=q-next; while(q!=NULL) if(q-data).coef0.0&(q-data).expn!=0) printf(+%.4f*x(%d),(q-data).coef,(q-data).expn); else if(q-data)
8、.expn=0&(q-data).coef0.0) printf(+%.4f,(q-data).coef); else if(q-data).expn=0&(q-data).coefdata).coef); else printf(%.4f*x(%d),(q-data).coef,(q-data).expn); q=q-next; printf(n);void AddPolyn(polynomail *pa,polynomail *pb) polynomail ha,hb,qa,qb; ha=*pa; hb=*pb; qa=NextPos(pa,&ha); qb=NextPos(pb,&hb)
9、; elemtype a,b; float sum; while(qa&qb) a=qa-data; b=qb-data; switch(cmp(a,b) case -1: ha=qa; qa=NextPos(pa,&qa); break; case 0: sum=a.coef+b.coef; if(sum!=0.0) SetCurElem(&qa,sum); ha=qa; else DelFirst(&ha,&qa); FreeNode(&qa); DelFirst(&hb,&qb); FreeNode(&qb); qb=NextPos(pb,&hb); qa=NextPos(pa,&ha)
10、; break; case 1: DelFirst(&hb,&qb); InsFirst(&ha,&qb); qb=NextPos(pb,&hb); ha=NextPos(pa,&ha); break; if(!ListEmpty(*pb) Append(pa,&qb); FreeNode(&hb);void SubStractPolyn(polynomail *pa,polynomail *pb) polynomail ha,hb,qa,qb; ha=*pa; hb=*pb; qa=NextPos(pa,&ha); qb=NextPos(pb,&hb); elemtype a,b; floa
11、t sum; while(qb!=NULL) qb-data.coef=-qb-data.coef; qb=qb-next; qb=NextPos(pb,&hb); while(qa&qb) a=qa-data; b=qb-data; switch(cmp(a,b) case -1: ha=qa; qa=NextPos(pa,&qa); break; case 0: sum=a.coef+b.coef; if(sum!=0.0) SetCurElem(&qa,sum); ha=qa; else DelFirst(&ha,&qa); FreeNode(&qa); DelFirst(&hb,&qb
12、); FreeNode(&qb); qb=NextPos(pb,&hb); qa=NextPos(pa,&ha); break; case 1: DelFirst(&hb,&qb); InsFirst(&ha,&qb); qb=NextPos(pb,&hb); ha=NextPos(pa,&ha); break; if(!ListEmpty(*pb) Append(pa,&qb); FreeNode(&hb);double EvaluatePolyn(polynomail p,float x) polynomail q; double y=0.0; q=p-next; while(q!=NUL
13、L) y+=(q-data.coef)*pow(x,q-data.expn); q=q-next; return y;void DestroyPolyn(polynomail *p) free(*p);void ClearPolyn(polynomail *p) polynomail q; q=*p; while(*p!=NULL) *p=(*p)-next; free(q); q=*p; int InsertPolyn(polynomail *q,polynomail *s) while(*q)-next!=NULL) switch(cmp(*q)-next-data,(*s)-data)
14、case -1: *q=(*q)-next; break; case 0: (*q)-data.coef+=(*s)-data.coef; return OK; case 1: (*s)-next=(*q)-next; (*q)-next=*s; return OK; (*q)-next=*s; return OK; int DeletePolyn(polynomail *q,elemtype x) polynomail t; while(*q)-next!=NULL) if(*q)-next-data.coef=x.coef)&(*q)-next-data.expn=x.expn) t=(*
15、q)-next; (*q)-next=t-next; free(t); return OK; else *q=(*q)-next; if(*q)-next=NULL) return FALSE;int ChangePolyn(polynomail *p,elemtype x,elemtype y) polynomail s; MakeNode(&s,y); DeletePolyn(p,x); InsertPolyn(p,&s); return OK;void DifferentialPolyn(polynomail *p,int n) polynomail q,s; int i; q=*p;
16、s=q-next; for(i=0;idata.expn!=0) s-data.coef*=s-data.expn; s-data.expn-; q=q-next; s=q-next; else q-next=s-next; s=q-next; q=*p; s=q-next; void MultiplyPolyn(polynomail *pa,polynomail *pb) int n=0,i; polynomail s,t,q100; s=*pb; while(s-next!=NULL) n+; s=s-next; s=(*pb)-next; for(i=0;inext; while(t!=
17、NULL) t-data.coef*=s-data.coef; t-data.expn+=s-data.expn; t=t-next; s=s-next; for(i=1;inext; while(s!=NULL) s-data.coef/=s-data.expn+1; s-data.expn+; q=q-next; s=q-next; double DefiniteIntegralPolyn(polynomail *p,float x,float y) IntegratePolyn(p); double f; f=EvaluatePolyn(*p,y)-EvaluatePolyn(*p,x)
18、; return f;void InvolutionPolyn(polynomail *p,int n) polynomail q100; int i; for(i=0;in;i+) qi=*p; for(i=1;inext!=NULL) s=s-next; while(t-next!=NULL) t=t-next; m=s-data.expn; n=t-data.expn; Initlist(&x); x-data.coef=0.0; x-data.expn=-1; Initlist(&rest); rest-data.coef=0.0; rest-data.expn=-1; while(m
19、!=0&m=n) Initlist(&q1); q1-data.coef=0.0; q1-data.expn=-1; AddPolyn(&q1,q); x-data.coef=s-data.coef/(t-data.coef); x-data.expn=s-data.expn-t-data.expn; InsFirst(&rest,&x); q2=(*q)-next; while(q2!=NULL) q2-data.coef*=x-data.coef; q2-data.expn+=x-data.expn; q2=q2-next; SubStractPolyn(p,&q1); DestroyPo
20、lyn(&q1); s=*p; t=*q; while(s-next!=NULL) s=s-next; while(t-next!=NULL) t=t-next; m=s-data.expn; n=t-data.expn; q1=*p; q2=*q; *p=rest; *q=q1; DestroyPolyn(&q2);void main() polynomail p,q,p1,q1; int m,n,t; Initlist(&p); Initlist(&q); Initlist(&p1); Initlist(&q1); printf(please input the length of pol
21、ynomail:n); scanf(%d,&m); CreatePolyn(&p,m); CreatePolyn(&q,m); PrintPolyn(p); PrintPolyn(q); AddPolyn(&p,&q); PrintPolyn(p); printf(please input n= n); scanf(%d,&n); DifferentialPolyn(&p,n); PrintPolyn(p); IntegratePolyn(&p); PrintPolyn(p); printf(please input the length of polynomail:n); scanf(%d,&t); CreatePolyn(&p1,t); CreatePolyn(&q1,t); PrintPolyn(p1); PrintPolyn(q1); DivisionPolyn(&p1,&q1); PrintPolyn(p1); PrintPolyn(q1); printf(%lfn,EvaluatePolyn(p,3.0);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1