C语言多项式运算.docx

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

C语言多项式运算.docx

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

C语言多项式运算.docx

C语言多项式运算

#include

#include

#include

typedefstructPolyNode

{

floatcoef;//系数

intexpn;//指数

structPolyNode*next;

}LNode,*LinkList;

LNode*MakeNode(floatcoef,intexpn){

LNode*p;

p=(LNode*)malloc(sizeof(LNode));

p->coef=coef;p->expn=expn;p->next=NULL;

returnp;

}

voidInitList(LinkList&L){

L=MakeNode(0,-1);

return;

}

voidPrintPolyn(LinkListL){

LNode*p;

if(!

L)

printf("NULL\n");

elseif(L->next==NULL)

printf("0\n");

else{

p=L->next;

while(p){

printf("%gX^%d",p->coef,p->expn);

p=p->next;

if(p&&p->coef>0)printf("+");

}

printf("\n");

}

}

voidOrderInsert(LinkListL,LNode*s){

LNode*p,*q;

p=L;

while(p->next&&p->next->expnexpn)p=p->next;

if(p->next&&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;

}

}

LinkListcreatlist(void){

LinkListhead;

LNode*p;

floatc;inte;

InitList(head);

printf("输入系数指数,系数为0时结束:

");

while

(1){

scanf("%f",&c);

if(c==0)break;

scanf("%d",&e);

p=MakeNode(c,e);

OrderInsert(head,p);

}

returnhead;

}

voidDestroyPolyn(LinkList&L){

LNode*p=L,*q;

while(p){

q=p->next;

free(p);p=q;

}

L=NULL;

}

voidClearPolyn(LinkList&L){

LNode*p,*q;

if(L==NULL)return;

p=L->next;L->next=NULL;

while(p){

q=p->next;

free(p);p=q;

}

}

voidCopyPolyn(LinkListLa,LinkList&Lb){

LNode*p,*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;

}

voidAddPolyn(LinkListLa,LinkListLb,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(sizeof(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;

}

elseif(p->expn>q->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("4\n");

r->next=(LNode*)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("5\n");

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;

}

voidSubPolyn(LinkListLa,LinkListLb,LinkList&Lc){

LNode*p,*q,*r,*h;

floatmin;

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;

}

}

elseif(p->expn>q->expn){

printf("2\n");

r->next->coef=-q->coef;

r->next->expn=q->expn;

q=q->next;

r=r->next;

}

else{

printf("3\n");

r->next->coef=p->coef;

r->next->expn=p->expn;

p=p->next;

r=r->next;}

}

if(q==NULL){

while(p!

=NULL){

printf("4\n");

r->next=(LNode*)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){

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;

}

doubleSumPolyn(LinkListLa,double&x){

doubleSum=0;

if(!

La)printf("error");

LNode*p;

p=La->next;

while(p){

Sum+=p->coef*pow(x,p->expn);

p=p->next;

}

returnSum;

}

voidDaoShuPolyn(LinkListLa,LinkList&Lb,int&x){

LNode*p,*q,*k;

inti;

CopyPolyn(La,Lb);

if(!

La||!

Lb)printf("error");

p=La;

q=Lb;

for(i=0;i

while(q){

if(q->next&&q->next->expn>0){

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

}

elseq=q->next;

}

}

q=Lb;

}

}

voidJifenPolyn(LinkListLa,LinkList&Lb,int&x){

LNode*p,*q;

inti;

CopyPolyn(La,Lb);

if(!

La||!

Lb)printf("error");

p=La;

q=Lb;

for(i=0;i

while(q->next){

q->next->expn=q->next->expn+1;

q->next->coef=q->next->coef/q->next->expn;

q=q->next;

}

q=Lb;

}

}

doubleDingJifenPolyn(LinkListLa,int&w,double&a,double&b){

LinkListLb;

doubleA;

JifenPolyn(La,Lb,w);

A=SumPolyn(Lb,a)-SumPolyn(Lb,b);

returnA;

}

voidMulityPolyn(LinkListLa,LinkListLb,LinkList&Lc){

LNode*p,*q,*r;

LinkListLr;

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

}

}

voidPowPolyn(LinkListLa,LinkList&Lb,intv){

CopyPolyn(La,Lb);

inti=0;

for(i=0;i

MulityPolyn(La,Lb,Lb);

}

}

#defineN15

voidmain(){

LinkListP[N]={NULL};

inti,j,k,menu;

while

(1){

printf("\n");

printf("0--Exit\n");

printf("1--Create\n");

printf("2--Print\n");

printf("3--Copy\n");

printf("4--Add\n");

printf("5--Sub\n");

printf("6--Destroy\n");

printf("7--Clear\n");

printf("8--Sum\n");

printf("9--DaoShu\n");

printf("10--Mulity\n");

printf("11--Jifen\n");

printf("12--DingJifen\n");

printf("13--Pow\n");

printf("\nPleaseChoose:

");

scanf("%d",&menu);

switch(menu){

case0:

return;

case1:

printf("输入新多项式的下标(0--%d):

",N-1);

scanf("%d",&i);

P[i]=creatlist();

break;

case2:

for(i=0;i

printf("P[%d]=",i);

PrintPolyn(P[i]);

}

break;

case3:

printf("输入被复制的多项式和新多项式的下标(0--%d):

",N-1);

scanf("%d%d",&i,&j);

CopyPolyn(P[i],P[j]);

break;

case4:

printf("输入两相加的多项式的和生成多项式的下标(0--%d)",N-1);

scanf("%d%d%d",&i,&j,&k);

AddPolyn(P[i],P[j],P[k]);

break;

case5:

printf("输入两相减的多项式和生成多项式的下标(0--%d)",N-1);

scanf("%d%d%d",&i,&j,&k);

SubPolyn(P[i],P[j],P[k]);

break;

case6:

printf("输入被销毁多项式的下标(0--%d):

",N-1);

scanf("%d",&i);

DestroyPolyn(P[i]);

break;

case7:

printf("输入被清空多项式的下标(0--%d):

",N-1);

scanf("%d",&i);

ClearPolyn(P[i]);

break;

case8:

doubleSum,x;

printf("输入要求多项式的下标(0--%d)和x的值",N-1);

scanf("%d%lf",&i,&x);

Sum=SumPolyn(P[i],x);

printf("Sum=%lf",Sum);

break;

case9:

inty;

printf("输入要求导的多项式下标和求导后多项式下标(0--%d)以及求导次数y\n",N-1);

scanf("%d%d%d",&i,&j,&y);

DaoShuPolyn(P[i],P[j],y);

break;

case10:

printf("输入两个相乘多项式的下标和生成多项式的下标(0--%d)",N-1);

scanf("%d%d%d",&i,&j,&k);

MulityPolyn(P[i],P[j],P[k]);

break;

case11:

intz;

printf("输入要积分的多项式下标和积分后的多项式下标(0--%d)以及积分的次数z\n",N-1);

scanf("%d%d%d",&i,&j,&z);

JifenPolyn(P[i],P[j],z);

break;

case12:

intw;

doublea,b,S;

printf("输入要积分的多项式下标(0--%d)以及积分的次数w,以及上下限a,b\n",N-1);

scanf("%d%d%lf%lf",&i,&w,&a,&b);

S=DingJifenPolyn(P[i],w,a,b);

printf("积分后的值S=%lf",S);

break;

case13:

intv;

printf("输入要乘方的多项式下标和乘方后的多项式下标(0--%d)以及乘方次数v\n",N-1);

scanf("%d%d%d",&i,&j,&v);

PowPolyn(P[i],P[j],v);

break;

default:

;

}

}

}

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

当前位置:首页 > 初中教育

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

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