1、 (1)输入并建立多项式; (2)输出多项式,输出的形式为整数序列:n,c1,e1,c2,en,期中n为多项式的项数,ci和ei分别为第i 项的系数和指数,系列按指数的降序排列; (3)多项式a和多项式b相加,建立多项式a+b; (4)多项式a和b相减,建立多项式a-b;3程序代码#includestdlib.hmalloc.htypedef struct list float xishu;/某项的系数 int zhishu;/某项的指数 struct list * next;*linklist;void caidan(void); void xianshi(linklist);linklis
2、t dx_built(int);linklist dx_jia(linklist,linklist);linklist dx_jian(linklist,linklist);linklist sort(linklist head);main() int i,a,b; linklist pa,pb,pc1,pc2; caidan(); do printf(n);请选择你想要的功能0-4n scanf(%d,&i); switch(i) case 1: printf(请输入多项式A的项数:a); pa=dx_built(a);pa=sort(pa);请输入多项式B的项数:b); pb=dx_bui
3、lt(b);pb=sort(pb); break; case 2:多项式A与B的和为: pc1=dx_jia(pa,pb); xianshi(pc1); case 3:多项式A与B的差为: pc2=dx_jian(pa,pb); xianshi(pc2); case 4:多项式A= xianshi(pa); printf(多项式B= xianshi(pb); case 0: break; while(i!=0);你选择了退出操作,欢迎使用! system(pause/ 系统暂停,按任意键键继续 flushall();clsvoid caidan(void) / 定义菜单函数*nt一元稀疏多项式
4、计算器tn0.退出程序n1.建立多项式n2.多项式加法n3.多项式减法n4.多项式输出n/ caidanlinklist dx_built(int m) /创建多项式 int i; linklist head,p; head=(struct list *)malloc(sizeof(struct list); head-next=NULL; for(i=1;ixishu,&zhishu); if(p-xishu=0) /系数为0的时候,删掉该节点 free(p); else/系数不为0的时候 p-next =head-next ;next =p; return head;linklist so
5、rt(linklist head) /指数按降序排列 linklist p,q,tail,s; tail=NULL; while(head-next!=tail) p=head; q=p-next; while(q-next-zhishuzhishu) s=q- p-next=q- q-next=q; q=s; p=p- q=q- tail=q; void xianshi(linklist head) linklist q=head- int flag=0;/项数计数器 if(!q) /若多项式为空,输出00n return; while(q) if(q-xishu0&flag!=0) put
6、char(+ /系数大于0且不是第一项 if(q-xishu!=1&=-1) /系数非1或-1的普通情况%.f,q-xishu);zhishu=1) putchar(X else if(q-zhishu) printf(X%d elsexishu=1)zhishu) putchar(1 else printf(xishu=-1)-1zhishu=1) printf(-X-X%d q=q- flag+;linklist dx_jia(linklist pa,linklist pb) /*多项式相加*/ linklist p=pa-next ,q=pb-next ,pc,tail,s;/pc用来存
7、储两个多项式的和 pc=tail=(struct list *)malloc(sizeof(struct list); while(p!=NULL&q!=NULL) s=(struct list *)malloc(sizeof(struct list); if(p-zhishu zhishu )/p指数大,则存入pc,p然后后移 s-xishu=p-xishu; s-zhishu=p-zhishu; tail-next =s; tail=s; p=p- if(p-zhishu xishu=q-zhishu=q- tail- tail=s; q=q- else /指数相等时 if(p-xishu
8、 +q-xishu=0 )/系数和为0则不存入pc中,p.q都后移 p=p- q=q- else /系数和不为0,则存入pc中,q,p后移 s-xishu+q-xishu ; tail-next=s; tail=s; p=p- q=q- if(p=NULL)/p多项式比q短的时候,把q剩余的部分接到pc tail- else/q多项式比p短的时候,把p剩余的部分接到pcnext=p; return pc;linklist dx_jian(linklist pa,linklist pb) /*多项式相减*/pc用来存储两个多项式的差zhishu)/q指数大,则把q是系数前加-1再存入pc,q然后
9、后移xishu=-(q-xishu -q-xishu=0 )/系数差为0则不存入pc中,p.q都后移 else /系数差不为0,则存入pc中,q,p后移xishu-q- if(p =NULL)/p多项式比q短的时候,把q剩余的部分接到pc三.实验使用环境(本实验所使用的平台和相关的软件)Microsoft Visual C+ 6.0四. 实验步骤和调试过程(实验步骤 测试数据设计 测试结果分析) 测试结果:五. 实验小结(实验过程中遇到的问题及解决过程.实验体会和收获)1.在编写一元稀疏多项式程序代码的时候,为了实现这个程序,我采取了模块化设 计,针对每个功能,我使用一个函数去实现它;2.在建
10、立多项式的时候,我使用了单向链表去实现,在建立的时候,我把系数为0时候,这个节点给删掉,if(p-然而我我这个函数还有个不足的地方,就是当指数相同,系数不同的时候,我没考虑到把它合并,这我以后会改进;2.在主函数里,我采用了调用函数的方式,使界面简洁,但是我刚开始的时候没有准确地调用函数,程序运行失败,并且我把排序函数插入到现实函数里,导致了一个未知的错误,程序失败了,后来我把排序函数加到了建立的地方, printf(3,这个程序我花了最多时间的地方就是加法算法,我使用了三条链,pa.pb,pc,我把和的结果给存放在pc中,当和为0的时候我不存入pc, if(p-并且我还考虑了当两个多项式项数不相等的时候,用了一下这条语句去实现if(p =NULL)/p多项式比q短的时候,把q剩余的部分接到pc,但是我刚开始的时候,if(p-next=NULL),这个加法没有成功,最后发现了这个错误,运行成功;4.我在编写这个程序的时候,很好地复习了c语言的知识,并且能够对链表这个章节的知识有很好的巩固;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1