《数据结构与算法课程设计说明书--一元多项式的加法.减法的实现.docx》由会员分享,可在线阅读,更多相关《数据结构与算法课程设计说明书--一元多项式的加法.减法的实现.docx(13页珍藏版)》请在第一文库网上搜索。
1、数据结构与算法课程设计说明书1需求分析功能:首先建立一个有序链表,输入一个多项式,进行降幕排列。接着判断进行加减乘哪种运算,再输入一个多项式进行运算.2概要设计a.建立多项式链表输入m项的系数和指数,建立表示一元多项式的有序链表P。依次输入m个非零项,生成结点并插入链表。再在界面上输入n个非零项的系数和指数structterm*CreatPo1yn(structterm*P,intm)/输入m项的系数和指数,建立表示一元多项式的有序链表Pinti;structterm=P=(structterm*)ma1Ioc(sizeof(structterm),*q;if(mcoef=0.0;printf
2、(依次输入%d个非零项n,m);for(i=1;icoef,&P-expn);if(P-coef)q=P;P=P-next=(structterm*)ma11oc(sizeof(structterm);q-next=NU11;free(P);returnh;/CreatPo1ynb,多项式加法利用两个多项式的结点构成“和多项式,Pa=Pa+Pb.structterm*APo1yn(structterm*Pa,structterm*Pb)/多项式加法:Pa=Pa+Pb,利用两个多项式的结点构成和多项式。structterm*h,*qa=Pa,*qb=Pb,*p,*q;f1oatsum;h=p=(
3、structterm5c)ma11oc(sizeof(structterm);p-next=NU11;whi1e(qa&qb)Pa和Pb均非空switch(Compare(qa,qb)case-1:/多项式PA中当前结点的指数值小p-next=qb;P=qb;qb=qb-next;break;caseO:/两者的指数值相等sum=qa-coef+qb-coef;if(sum!=O.O)/修改多项式PA中当前结点的系数值p-next=qa;qa-coef=sum;P=qa;qa=qa-next;)e1se/删除多项式PA中当前结点q=qa;qa=qa-next;free(q);)q=qb;qb=
4、qb-next;free(q);break;case1:/多项式PB中当前结点的指数值小p-next=qa;P=qa;qa=qa-next;break;/switch/whi1eif(Pa)p-next=qa;/链接Pa中剩余结点if(Pb)p-next=qb;/链接Pb中剩余结点q=h;h=h-next;free(q);returnh;/APo1ync.多项式减法Pa=Pa-Pb,利用两个多项式的结点构成差多项式。structterm*BPo1yn(structterm*Pa,structterm*Pb)/多项式减法:Pa=Pa-Pb,利用两个多项式的结点构成差多项式。structterm*
5、p=Pb;whi1e(p)p-coef*=-1;p=p-next;returnAPo1yn(Pa,Pb);/BPo1ynd.多项式乘法多项式乘法:Pa=Pa*Pb,利用两个多项式的结点构成积多项式。tructterm*CPo1yn(structterm*Pa,structterm*Pb)/多项式乘法:Pa=Pa*Pb,利用两个多项式的结点构成积多项式。structterm*pa=Pa,*p,*q,*r,*s,*t;r=p=(structterm*)ma11oc(sizeof(structterm);if(!Pb)returnNU11;whi1e(pa)p-coef=pa-coef;p-expn
6、=pa-expn;Q=P;p=p-next=(structterm*)ma11oc(sizeof(structterm);pa=pa-next;q-next=NU11;free(p);Pa二Pa;t=s=(structterm*)ma11oc(sizeof(structterm);whi1e(pa)q=s;s=s-next=(structterm*)ma11oc(sizeof(structterm);pa=pa-next;q-next=NU11;free(s);pa=Pa;whi1e(pa)(pa-coef*=Pb-coef;pa-expn+=Pb-expn;pa=pa-next;Pb=Pb-
7、next;whi1e(Pb)P=r;s=t;whi1e(p)(s-coef=p-coef*Pb-coef;s-expn=p-expn+Pb-expn;p=p-next;s=s-next;)Pa二APo1yn(Pa,t);Pb=Pb-next;)returnPa;/CPo1yne.主函数建立主函数界面,实现加、减、乘主要功能。界面运算由输入第一个一元多项式开始,逐步实现多项式计算。voidmain()(structterm*M,*N;chars2;inti,n;puts(一元多项式计算:n输入一一元多项式的项数);scanf(zz%dzz,&n);M=CreatPo1yn(M,n);M=se1s
8、ort(M);PrintfPo1y(M);p:PUtS(n1:加n2:减n3:乘n4:退出);getchar();q:gets(s);if(s1!=,0,II!isdigit(*s)PUtS(输入有误,请重新输入!);gotoq;i=*s-48;switch(i)case1:M=A(M,N);gotop;case2:M=B(M,N);gotop;case3:M=C(M,N);gotop;case4:break;defau1t:PUtS(输入有误,请重新输入!);gotoq;)3详细设计ttinc1udettinc1udettinc1udetypedefstructterm/项的表示,多项式的项
9、作为1ink1iSt的数据元素f1oatcoef;/系数intexpn;/指数structtermext;term;structterm*CreatPo1yn(structterm*P,intm)/输入m项的系数和指数,建立表示一元多项式的有序链表Pinti;structterm=P=(structterm*)ma11oc(sizeof(structterm),*q;if(mcoef=0.0;printf(依次输入%d个非零项n,m);for(i=1;icoef,&P-expn);if(P-coef)q=P;P=P-next=(structterm*)ma11oc(sizeof(structt
10、erm);)q-next=NU11;free(P);returnh;/CreatPo1ynstructterm*se1sort(structterm*h)structterm*g,*p,*q;f1oatf;inti,fini=1;if(!h)returnNU11;for(g=h;g-next&fini;g=g-next)fini=O;for(p=h,q=h-next;q;p=p-next,q=q-next)if(p-expnexpn)f=p-coef;i=p-expn;p-coef=q-coef;p-expn=q-expn;q-coef=f;q-expn=i;fini=1;)for(g=h,p
11、=g-next;p;)if(g-expn=p-expn)g-coef+=p-coef;g-next=p-next;Q=P;p=p-next;free(q);)e1seif(g-next)g=g-next;p=p-next;)returnh;PrintfPo1y(structterm*P)structterm*q=P;if(!q)putchar(O);return;if(q-coef!=1)printf(g,q-coef);if(q-expn=1)putchar(X);e1seif(q-expn)printf(zzX%dzz,q-expn);)e1seif(!q-expn)putchar(,);
12、e1seif(q-expn=1)putchar(,X,);e1seprintf(zzX%dzz,q-expn);q:q-next;whi1e(q)if(q-coef0)putchar(5+,);if(q-coef!=1)printf(z,%gzz,q-coef);if(q-expn=1)putchar(X);e1seif(q-expn)printf(zzX%dzz,q-expn);)e1seif(!q-expn)putchar(,);e1seif(q-expn=1)putchar(,X,);e1seprintf(zzX%dzz,q-expn);q=q-next;Compare(structte
13、rm*a,structterm*b)(if(a-expnexpn)return-1;if(a-expnb-expn)return1;return0;)structterm*APo1yn(structterm*Pa,structterm*Pb)/多项式加法:Pa=Pa+Pb,利用两个多项式的结点构成和多项式。structterm*h,*qa=Pa,*qb=Pb,*p,*q;f1oatsum;h=p=(structterm*)ma11oc(sizeof(structterm);p-next=NU11;whi1e(qa&qb)Pa和Pb均非空switch(Compare(qa,qb)case-1:/多项式PA中当前结点的指数值小p-next=qb;P=qb;qb=qb-next;break;caseO:/两者的指数值相等sum=qa-coef+qb-coef;if(sum!=0.0)/修改多项式PA中当前结点的系数值p-next=qa;qa-coef=sum;P=qa;qa:qa-next;)e1se/删除多项式