多项式四则运算.docx
- 文档编号:13726329
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:25
- 大小:88.57KB
多项式四则运算.docx
《多项式四则运算.docx》由会员分享,可在线阅读,更多相关《多项式四则运算.docx(25页珍藏版)》请在冰点文库上搜索。
多项式四则运算
多项式四则运算
运行图:
源代码:
//多项式加减乘除-02.cpp:
定义控制台应用程序的入口点。
//
#include"stdafx.h"
int_tmain(intargc,_TCHAR*argv[])
{
return0;
}
#include
#include
typedefstructPolynomial
{
floatcoef;
intexpn;
structPolynomial*next;
}*Polyn,Polynomial;
voidInsert(Polynp,Polynh)
{
if(p->coef==0)
free(p);
else
{
Polynq1,q2;
q1=h;
q2=h->next;
while(q2&&p->expn
{
q1=q2;
q2=q2->next;
}
if(q2&&p->expn==q2->expn)
{
q2->coef+=p->coef;
free(p);
if(!
q2->coef)
{
q1->next=q2->next;
free(q2);
}
}
else
{
p->next=q2;
q1->next=p;
}
}
}
PolynCreatePolyn(Polynhead,intm)
{
inti;
Polynp;
p=head=(Polyn)malloc(sizeof(structPolynomial));
head->next=NULL;
for(i=0;i { p=(Polyn)malloc(sizeof(structPolynomial)); printf("请输入第%d项的系数与指数: ",i+1); scanf_s("%f%d",&p->coef,&p->expn); Insert(p,head); } returnhead; } voidDestroyPolyn(Polynp) { Polynq1,q2; q1=p->next; q2=q1->next; while(q1->next) { free(q1); q1=q2; q2=q2->next; } } voidPrintPolyn(PolynP) { Polynq=P->next; intflag=1; if(! q) { putchar('0'); printf("\n"); return; } while(q) { if(q->coef>0&&flag! =1) putchar('+'); if(q->coef! =1&&q->coef! =-1) { printf("%g",q->coef); if(q->expn==1)putchar('X'); else if(q->expn) printf("X^%d",q->expn); } else { if(q->coef==1) { if(! q->expn) putchar('1'); elseif(q->expn==1) putchar('X'); elseprintf("X^%d",q->expn); } if(q->coef==-1) { if(! q->expn) printf("-1"); elseif(q->expn==1) printf("-X"); elseprintf("-X^%d",q->expn); } } q=q->next; flag++; } printf("\n"); } intcompare(Polyna,Polynb) { if(a&&b) { if(! b||a->expn>b->expn) return1; else if(! a||a->expn return-1; else return0; } elseif(! a&&b) return-1; else return1; } PolynAddPolyn(Polynpa,Polynpb) { Polynqa=pa->next; Polynqb=pb->next; Polynheadc,hc,qc; hc=(Polyn)malloc(sizeof(structPolynomial)); hc->next=NULL; headc=hc; while(qa||qb) { qc=(Polyn)malloc(sizeof(structPolynomial)); switch(compare(qa,qb)) { case1: { qc->coef=qa->coef; qc->expn=qa->expn; qa=qa->next; break; } case0: { qc->coef=qa->coef+qb->coef; qc->expn=qa->expn; qa=qa->next; qb=qb->next; break; } case-1: { qc->coef=qb->coef; qc->expn=qb->expn; qb=qb->next; break; } } if(qc->coef! =0) { qc->next=hc->next; hc->next=qc; hc=qc; } elsefree(qc); } returnheadc; } PolynSubtractPolyn(Polynpa,Polynpb) { Polynh=pb; Polynp=pb->next; Polynpd; while(p) { p->coef*=-1; p=p->next; } pd=AddPolyn(pa,h); for(p=h->next;p;p=p->next) p->coef*=-1; returnpd; } floatValuePolyn(Polynhead,floatx) { Polynp; inti; floatsum=0,t; for(p=head->next;p;p=p->next) { t=1; for(i=p->expn;i! =0;) { if(i<0) { t/=x; i++; } else { t*=x; i--; } } sum+=p->coef*t; } returnsum; } PolynMultiplyPolyn(Polynpa,Polynpb) { Polynhf,pf; Polynqa=pa->next; Polynqb=pb->next; hf=(Polyn)malloc(sizeof(structPolynomial)); hf->next=NULL; for(;qa;qa=qa->next) { for(qb=pb->next;qb;qb=qb->next) { pf=(Polyn)malloc(sizeof(structPolynomial)); pf->coef=qa->coef*qb->coef; pf->expn=qa->expn+qb->expn; Insert(pf,hf); } } returnhf; } #include #include #include structlist { intzhishu; intxishu; structlist*next; }; typedefstructlistnode; typedefnode*link; voidfree_list(linkhead) { linkpointer; while(head! =NULL) { pointer=head; head=head->next; free(pointer); } } linkrev(linkhead) { linkp1,p2; p1=head->next; p2=p1->next; p1->next=NULL; while(p2! =NULL) { head->next=p2; p2=p2->next; head->next->next=p1; p1=head->next; } returnhead; } linkfind_list(linkhead,intkey) { linkp0; p0=head->next; while(p0! =NULL) { if(p0->zhishu==key) returnp0; p0=p0->next; } returnp0; } linkfind2_list(linkhead,intkey) { linkp0; p0=head; while(p0! =NULL) { if((p0->next->zhishu==key)&&(p0->next->xishu! =0)) returnp0; p0=p0->next; } returnp0; } linkclearzero(linkhead) { linkp0,pp; p0=head; while(p0! =NULL) { if((p0->next->xishu==0)&&(p0->next->zhishu! =0)) { pp=p0->next; p0->next=pp->next; free(pp); } p0=p0->next; } returnhead; } intmax_list(linkhead1,linkhead2) { linkp1; linkp2; inttemp=-10000; p1=head1->next; p2=head2->next; while(p1! =NULL) { if(p1->zhishu>temp) temp=p1->zhishu; p1=p1->next; }; while(p2! =NULL) { if(p2->zhishu>temp) temp=p2->zhishu; p2=p2->next; }; returntemp; } linkadd_list(linkhead1,linkhead2) { linkpointer1; linkpointer2; linkpointer3; linknew1; linknew2; linkhead3; inta=0; inti=0; head3=(link)malloc(sizeof(node)); if(head3==NULL) { printf("MemoryallocateFailure! \n"); } else { head3->next=NULL; head3->zhishu=0; head3->xishu=0; }; pointer1=head1->next; pointer2=head2->next; pointer3=head3; if((pointer1->zhishu)>=(pointer2->zhishu)) { i=pointer2->zhishu; } else { i=pointer1->zhishu; }; while (1) { if(i>max_list(head1,head2)) break; a=0; if(find_list(head1,i)! =NULL) { new2=find_list(head1,i); a=a+new2->xishu; }; if(find_list(head2,i)! =NULL) { new2=find_list(head2,i); a=a+new2->xishu; }; if(a! =0) { new1=(link)malloc(sizeof(node)); new1->zhishu=i; new1->xishu=a; new1->next=NULL; pointer3->next=new1; pointer3=new1; }; i=i+1; }; returnhead3; } linkinit_list(linkhead) { head=(link)malloc(sizeof(node)); if(head==NULL) printf("MemoryallocateFailure! \n"); else { head->next=NULL; head->zhishu=0; head->xishu=0; } returnhead; } linkjianfa(linkhead11,linkhead22) { linkp2; p2=head22->next; while(p2! =NULL) { p2->xishu=(-1)*(p2->xishu); p2=p2->next; } returnadd_list(head11,head22); } linkchufa(linkhead1,linkhead2) { linkhead3=NULL,tp,new1,p3,p2,new2; linktemp=NULL; head3=(link)malloc(sizeof(node)); head3->next=NULL; head3->zhishu=0; head3->xishu=0; temp=(link)malloc(sizeof(node)); temp->next=NULL; temp->zhishu=0; temp->xishu=10; init_list(head3); init_list(temp); p3=head3; while (1) { if((head1->next->zhishu)<(head2->next->zhishu)) { p3->next=head1; break; }; new1=(link)malloc(sizeof(node)); new1->zhishu=(head1->next->zhishu)-(head2->next->zhishu); new1->xishu=(head1->next->xishu)/(head2->next->xishu); new1->next=NULL;p3->next=new1;p3=new1; tp=temp;p2=head2->next; while(p2! =NULL) { if((p2->xishu==0)&&(p2->zhishu==0)) { break; }; new2=(link)malloc(sizeof(node)); new2->zhishu=p2->zhishu+p3->zhishu; new2->xishu=(p2->xishu)*(p3->xishu); new2->next=NULL; tp->next=new2; tp=new2; p2=p2->next; }; head1=jianfa(rev(head1),rev(temp)); head1=rev(head1); free_list(temp->next); temp->next=NULL; }; returnhead3; } linkchengfa(linkhead1,linkhead2) { linkp1,p2,p3,new1,p,tp,p31; linkhead3=NULL; head3=(link)malloc(sizeof(node)); if(head3==NULL) { printf("MemoryallocateFailure! \n"); } else { head3->next=NULL; head3->zhishu=0; head3->xishu=0; }; p1=head1->next; p2=head2->next; p3=head3; while(p1! =NULL) { p2=head2->next; while(p2! =NULL) { new1=(link)malloc(sizeof(node)); new1->zhishu=p1->zhishu+p2->zhishu; new1->xishu=(p1->xishu)*(p2->xishu); new1->next=NULL; p3->next=new1; p3=new1; p2=p2->next; } p1=p1->next; } p3=head3->next; while(p3! =NULL) { p=p3; p31=p3; while(p31! =NULL) { if(find2_list(p31,p->zhishu)! =NULL) { new1=find2_list(p31,p->zhishu); p->xishu=p->xishu+new1->next->xishu; tp=new1->next;new1->next=tp->next;free(tp); }; p31=p31->next; }; p3=p3->next; }; returnclearzero(head3); } voidprint_list(linkhead) { linkpointer; pointer=head->next; printf(""); while(pointer! =NULL) { printf("%dx^%d",pointer->xishu,pointer->zhishu); if(pointer->next! =NULL)printf("+"); pointer=pointer->next; } printf("\n"); } /*****************************************************/ /*voidprint_list(linkhead) {linkpointer; pointer=head->next; printf("(zhishu,xishu)\n"); while(pointer! =NULL) {printf("%d,%d\n",pointer->zhishu,pointer->xishu); pointer=pointer->next; } printf("\n");} /*****************************************************/ linkcreate_list(linkhead) { linknew1; linkpointer; head=(link)malloc(sizeof(node)); if(head==NULL) printf("MemoryallocateFailure! \n"); else { head->next=NULL; head->zhishu=0; head->xishu=0; pointer=head; while (1) { new1=(link)malloc(sizeof(node)); printf("输入指数和系数: "); scanf_s("%d%d",&(new1->zhishu),&(new1->xishu)); if(new1->xishu==0) { printf("多项式输入完毕。 \n"); break; }; new1->next=NULL; pointer->next=new1;pointer=new1; }/*while*/ }/*else*/ returnhead; } voidmain() { intq=0; printf("说明: 为链表输入数据,系数值为零时退出! \n"); while (1) { q=0; printf("请根据数字选择运算! \n"); printf(" (1)加法! \n"); printf(" (2)减法! \n"); printf("(3)除法! \n"); printf("(4)乘法! \n"); printf("(0)结束运算! \n"); scanf_s("%d",&q); if(q! =0&&(q==1||q==2||q==3||q==4)) { linkhead1=NULL; linkhead2=NULL; linkhead3=NULL; head1=create_list(head1); head2=cr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多项式 四则运算