一元多项式运算c语言版.docx

上传人:b****6 文档编号:5956247 上传时间:2023-01-02 格式:DOCX 页数:16 大小:16.69KB
下载 相关 举报
一元多项式运算c语言版.docx_第1页
第1页 / 共16页
一元多项式运算c语言版.docx_第2页
第2页 / 共16页
一元多项式运算c语言版.docx_第3页
第3页 / 共16页
一元多项式运算c语言版.docx_第4页
第4页 / 共16页
一元多项式运算c语言版.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

一元多项式运算c语言版.docx

《一元多项式运算c语言版.docx》由会员分享,可在线阅读,更多相关《一元多项式运算c语言版.docx(16页珍藏版)》请在冰豆网上搜索。

一元多项式运算c语言版.docx

一元多项式运算c语言版

#include

#include

#include

#defineOK1;

#defineERROR0;

#defineTURE1;

#defineFALSE0;

#defineMAXSIZE100;

typedefstruct{

floatcoef;

intexpn;

}term,elemtype;

typedefstructLNode{

elemtypedata;

structLNode*next;

}List,*LinkList;

typedefLinkListpolynomail;

intInitlist(LinkList*p){

*p=(LinkList)malloc(sizeof(List));

(*p)->next=NULL;

returnOK;

}

intcmp(terma,termb){

if(a.expn

elseif(a.expn==b.expn)return0;

elsereturn1;

}

intLocateElem(LinkList*p,elemtypee,LinkList*q){

if(*p==NULL)returnOVERFLOW;

*q=(*p)->next;

if((*q)==NULL){

*q=*p;

returnERROR;

}

while((*q)!

=NULL){

if(cmp(e,(*q)->data)==0)break;

else*q=(*q)->next;

}

if((*q)!

=NULL)returnTURE;

if((*q)==NULL){

returnFALSE;

}

}

intMakeNode(LinkList*s,elemtypee){

if(!

(*s))returnOVERFLOW;

(*s)->data=e;

(*s)->next=NULL;

returnOK;

}

voidInsFirst(LinkList*q,LinkList*s){

(*s)->next=(*q)->next;

(*q)->next=*s;

}

intDelFirst(LinkList*q,LinkList*s){

LinkListp;

p=*s;

(*q)->next=p->next;

returnOK;

}

voidFreeNode(LinkList*p){

LinkListq;

q=*p;

free(q);

}

LinkListNextPos(LinkList*p,LinkList*q){

return(*q)->next;

}

voidSetCurElem(polynomail*p,floatm){

((*p)->data).coef=m;

}

intListEmpty(LinkListp){

if(p->next==NULL)returnTURE;

if(p->next!

=NULL)returnFALSE;

}

voidAppend(LinkList*p,LinkList*s){

LinkListq;

q=*p;

while(q->next!

=NULL)q=q->next;

q->next=*s;

}

voidSortPolyn(polynomail*p){

polynomailq,s,t,m,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)<=0){

s=s->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->next;

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;

}

voidCreatePolyn(polynomail*p,intm){

polynomailh,q[100],s[100],x;

inti;

elemtypee;

elemtypet[100];

h=*p;

e.coef=0.0;

e.expn=-1;

h->data=e;

h->next=NULL;

q[0]=h;

Initlist(&x);

for(i=0;i

Initlist(&s[i]);

printf("pleaseinputthecoef:

theexpn:

\n");

scanf("%f%d",&t[i].coef,&t[i].expn);

if(!

LocateElem(p,t[i],&x)){

if(MakeNode(&s[i],t[i]))InsFirst(&q[i],&s[i]);

q[i+1]=s[i];

}

elseq[i+1]=q[i];

}

SortPolyn(p);

}

voidPrintPolyn(polynomailq){

q=q->next;

if((q->data).coef>0.0&&(q->data).expn!

=0)printf("%.4f*x^(%d)",(q->data).coef,(q->data).expn);

elseif((q->data).expn==0)printf("%.4f",(q->data).coef);

elseprintf("%.4f*x^(%d)",(q->data).coef,(q->data).expn);

q=q->next;

while(q!

=NULL){

if((q->data).coef>0.0&&(q->data).expn!

=0)printf("+%.4f*x^(%d)",(q->data).coef,(q->data).expn);

elseif((q->data).expn==0&&(q->data).coef>0.0)printf("+%.4f",(q->data).coef);

elseif((q->data).expn==0&&(q->data).coef<0.0)printf("%.4f",(q->data).coef);

elseprintf("%.4f*x^(%d)",(q->data).coef,(q->data).expn);

q=q->next;

}

printf("\n");

}

voidAddPolyn(polynomail*pa,polynomail*pb){

polynomailha,hb,qa,qb;

ha=*pa;

hb=*pb;

qa=NextPos(pa,&ha);

qb=NextPos(pb,&hb);

elemtypea,b;

floatsum;

while(qa&&qb){

a=qa->data;

b=qb->data;

switch(cmp(a,b)){

case-1:

ha=qa;

qa=NextPos(pa,&qa);

break;

case0:

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);

break;

case1:

DelFirst(&hb,&qb);

InsFirst(&ha,&qb);

qb=NextPos(pb,&hb);

ha=NextPos(pa,&ha);

break;

}

}

if(!

ListEmpty(*pb))Append(pa,&qb);

FreeNode(&hb);

}

voidSubStractPolyn(polynomail*pa,polynomail*pb){

polynomailha,hb,qa,qb;

ha=*pa;

hb=*pb;

qa=NextPos(pa,&ha);

qb=NextPos(pb,&hb);

elemtypea,b;

floatsum;

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;

case0:

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);

break;

case1:

DelFirst(&hb,&qb);

InsFirst(&ha,&qb);

qb=NextPos(pb,&hb);

ha=NextPos(pa,&ha);

break;

}

}

if(!

ListEmpty(*pb))Append(pa,&qb);

FreeNode(&hb);

}

doubleEvaluatePolyn(polynomailp,floatx){

polynomailq;

doubley=0.0;

q=p->next;

while(q!

=NULL){

y+=(q->data.coef)*pow(x,q->data.expn);

q=q->next;

}

returny;

}

voidDestroyPolyn(polynomail*p){

free(*p);

}

voidClearPolyn(polynomail*p){

polynomailq;

q=*p;

while(*p!

=NULL){

*p=(*p)->next;

free(q);

q=*p;

}

}

intInsertPolyn(polynomail*q,polynomail*s){

while((*q)->next!

=NULL){

switch(cmp((*q)->next->data,(*s)->data)){

case-1:

*q=(*q)->next;

break;

case0:

(*q)->data.coef+=(*s)->data.coef;

returnOK;

case1:

(*s)->next=(*q)->next;

(*q)->next=*s;

returnOK;

}

(*q)->next=*s;

returnOK;

}

}

intDeletePolyn(polynomail*q,elemtypex){

polynomailt;

while((*q)->next!

=NULL){

if(((*q)->next->data.coef==x.coef)&&((*q)->next->data.expn==x.expn)){

t=(*q)->next;

(*q)->next=t->next;

free(t);

returnOK;

}

else*q=(*q)->next;

}

if((*q)->next==NULL)returnFALSE;

}

intChangePolyn(polynomail*p,elemtypex,elemtypey){

polynomails;

MakeNode(&s,y);

DeletePolyn(p,x);

InsertPolyn(p,&s);

returnOK;

}

voidDifferentialPolyn(polynomail*p,intn){

polynomailq,s;

inti;

q=*p;

s=q->next;

for(i=0;i

while(s!

=NULL){

if(s->data.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;

}

}

voidMultiplyPolyn(polynomail*pa,polynomail*pb){

intn=0,i;

polynomails,t,q[100];

s=*pb;

while(s->next!

=NULL){

n++;

s=s->next;

}

s=(*pb)->next;

for(i=0;i

q[i]=*pa;

t=q[i]->next;

while(t!

=NULL){

t->data.coef*=s->data.coef;

t->data.expn+=s->data.expn;

t=t->next;

}

s=s->next;

}

for(i=1;i

AddPolyn(&q[0],&q[i]);

}

*pa=q[0];

}

voidIntegratePolyn(polynomail*p){

polynomailq,s;

q=*p;

s=q->next;

while(s!

=NULL){

s->data.coef/=s->data.expn+1;

s->data.expn++;

q=q->next;

s=q->next;

}

}

doubleDefiniteIntegralPolyn(polynomail*p,floatx,floaty){

IntegratePolyn(p);

doublef;

f=EvaluatePolyn(*p,y)-EvaluatePolyn(*p,x);

returnf;

}

voidInvolutionPolyn(polynomail*p,intn){

polynomailq[100];

inti;

for(i=0;i

for(i=1;i

*p=q[0];

}

voidDivisionPolyn(polynomail*p,polynomail*q){

polynomails,t,x,q1,q2,rest;

intn,m;

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;

Initlist(&x);

x->data.coef=0.0;

x->data.expn=-1;

Initlist(&rest);

rest->data.coef=0.0;

rest->data.expn=-1;

while(m!

=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);

DestroyPolyn(&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);

}

voidmain(){

polynomailp,q,p1,q1;

intm,n,t;

Initlist(&p);

Initlist(&q);

Initlist(&p1);

Initlist(&q1);

printf("pleaseinputthelengthofpolynomail:

\n");

scanf("%d",&m);

CreatePolyn(&p,m);

CreatePolyn(&q,m);

PrintPolyn(p);

PrintPolyn(q);

AddPolyn(&p,&q);

PrintPolyn(p);

printf("pleaseinputn=\n");

scanf("%d",&n);

DifferentialPolyn(&p,n);

PrintPolyn(p);

IntegratePolyn(&p);

PrintPolyn(p);

printf("pleaseinputthelengthofpolynomail:

\n");

scanf("%d",&t);

CreatePolyn(&p1,t);

CreatePolyn(&q1,t);

PrintPolyn(p1);

PrintPolyn(q1);

DivisionPolyn(&p1,&q1);

PrintPolyn(p1);

PrintPolyn(q1);

printf("%lf\n",EvaluatePolyn(p,3.0));

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1