一元多项式计算.doc

上传人:李司机 文档编号:1119207 上传时间:2022-06-27 格式:DOC 页数:8 大小:102KB
返回 下载 相关 举报
一元多项式计算.doc_第1页
第1页 / 共8页
一元多项式计算.doc_第2页
第2页 / 共8页
一元多项式计算.doc_第3页
第3页 / 共8页
一元多项式计算.doc_第4页
第4页 / 共8页
一元多项式计算.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《一元多项式计算.doc》由会员分享,可在线阅读,更多相关《一元多项式计算.doc(8页珍藏版)》请在三一办公上搜索。

1、数据结构课内实验实验报告实验1 一元多项式计算1 问题描述: 能够按照指数降序排列建立并输出多项式; 完成两个多项式的相加、相减和相乘,并将结果输出.参考教材P42页上的例2-4定义抽象数据类型,实现多项式的创建、相加、相减、相乘、打印等函数.可以采用链表或数组任意一种结构表示多项式.2 设计思想数学模型的选择在数学上,一个一元多项式Pn可按升幂写成:Pn=a 0+a1 x+a2 x2 +an xn-1 .它由n+1个系数惟一确定,因此,在计算机里,它可用一个线性表P来表示:Pn=每一项的指数i隐含在其系数ai的序号里. 多项式的乘法规则:多次运用单项式与多项式相乘的法则得到的计算时,先把看成

2、一个单项式, 是一个多项式,运用单项式与多项式相乘的法则,得到=a+b,然后再次运用单项式与多项式相乘的法则.3 数据结构定义typedef struct Polynomiafloat coef;int expn;struct Polynomial *next;*Polyn,Polynomial;4 系统功能模块介绍系统主要分为:pare;insertcreatepolynprintpolynaddpolynsubtractpolynmulpolyn main5 程序清单打印清单# include stdio.h# include malloc.htypedef struct Polynomi

3、alfloat coef;int expn;struct Polynomial *next;*Polyn,Polynomial;/int pare if ifexpnb-expn return 1; else ifexpnexpnreturn -1; else return 0; else ifreturn -1;/a多项式已空,但b多项式非空elsereturn 1;/b多项式已空,但a多项式非空/pare /void Insert ifcoef=0 free; /系数为0的话释放结点else /如果系数不为0 Polyn q1,q2; q1=h;q2=h-next; whileexpnex

4、pn /查找插入位置q1=q2; q2=q2-next; ifexpn=q2-expn /将指数相同相合并q2-coef+=p-coef; free; ifcoef /系数为0的话释放结点q1-next=q2-next; free; else /指数为新时将结点插入p-next=q2; q1-next=p; /Insert /Polyn CreatePolyn Polyn p; /定义一个p链表p=head=mallocsizeof; head-next=NULL; p=mallocsizeof;/建立新结点以接收数据scanfcoef,&p-expn; whilecoef!=-100 Ins

5、ert; /调用Insert函数插入结点p=mallocsizeof; /建立新结点以接收数据scanfcoef,&p-expn; printf;return head; /CreatePolyn /void PrintPolyn Polyn q=P-next; int flag=1; /项数计数器if /若多项式为空,输出0 putchar; printf; return; while ifcoef0&flag!=1 putchar; /系数大于0且不是第一项ifcoef!=1&q-coef!=-1 /系数非1或-1的普通情况printfcoef; ifexpn=1putchar; else

6、 ifexpn printfexpn; else ifcoef=1 ifexpnputchar; else ifexpn=1 putchar; else printfexpn; ifcoef=-1 ifexpn printf; else ifexpn=1printf; else printfexpn; q=q-next; flag+; /while printf; /PrintPolyn /Polyn AddPolyn /求解并建立多项式a+b,返回其头指针Polyn qa=pa-next; Polyn qb=pb-next; Polyn headc,hc,qc; hc=mallocsizeo

7、f; /建立头结点hc-next=NULL; headc=hc; while qc=mallocsizeof; switchpare case 1: qc-coef=qa-coef; qc-expn=qa-expn; qa=qa-next; / 当a-expn b-expn时,将a这个节点放进新的多项式hc中break; case 0: qc-coef=qa-coef+qb-coef; qc-expn=qa-expn; qa=qa-next; qb=qb-next; break; / 当a-expn=b-expn时,先把系数相加,指数不变,在将这个节点放进新的多项式hc中 case -1: q

8、c-coef=qb-coef; qc-expn=qb-expn; qb=qb-next; break; / 当a-expn expn时,将b这个节点放进新的多项式hc中 /switch ifcoef!=0 qc-next=hc-next; hc-next=qc; hc=qc; else free; /当相加系数为0时,释放该结点 /while return headc; /AddPolyn /Polyn SubtractPolyn /求解并建立多项式a-b,返回其头指针Polyn h=pb; Polyn p=pb-next; Polyn pd; while /将pb的系数取反p-coef*=-

9、1; p=p-next; pd=AddPolyn; fornext;p;p=p-next /恢复pb的系数p-coef*=-1; return pd; /SubtractPolyn /Polyn MulPolyn /求解并建立多项式a*b,返回其头指针 Polyn hf,pf; Polyn qa=pa-next; Polyn qb=pb-next; hf=mallocsizeof; /建立头结点hf-next=NULL; fornext fornext;qb;qb=qb-next pf=mallocsizeof; pf-coef=qa-coef*qb-coef; pf-expn=qa-expn

10、+qb-expn; Insert; /调用Insert函数以合并指数相同的项 return hf; /MulPolyn /int main Polyn pa=0,pb=0,pc,pd,pf;/定义各式的头指针,pa与pb在使用前付初值NULL /pc头指针所在的多项式用在加法中作为结果,pd用在加法中,pf乘法中int i=1; /菜单变量printf;pa=CreatePolyn; /建立第一个多项式a printf;printf;pb=CreatePolyn;printf; /建立第二个多项式b printf多项式A=; /多项式aPrintPolyn;printf多项式B=; /多项式b

11、PrintPolyn;whileprintf;printf;printf 1:A+Bn;printf 2:A-Bn;printf 3:A*Bn;printf;printf;scanf;switch case 1 : pc=AddPolyn; printf多项式A+B=; /多项式a+b PrintPolyn; break; case 2 : pd=SubtractPolyn; printf多项式A-B=; /多项式a-b PrintPolyn;break; case 3 :pf=MulPolyn; printf多项式A*B=; /多项式a*b PrintPolyn;break;default : return 0; 6 运行与调试分析运行结构截图和调试小结对于多项式的运算的,运算符的输出很重要,一开始多输出一个+,并且当为负数时会输出+-.还有当系数为0时的输出都没有专门考虑.和周围的同学交流一下算法,相互探讨了出现的问题,和解决的方法.讨论中改掉很多不足.使代码更加完善.通过本次试验,我发现自己分析问题不是很全面,忽略掉一些细节.以后分析问题时要仔细考虑,认真分析,避免在细节上犯错误.通过这次实验,我发现自己编程能力相当欠缺,尤其是用链表实现.自己以后要勤加练习.8 / 8

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号