- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验五一元多项式的表示及运算
一元多项式的表示及运算
问题描述
利用链表表示一元多项式,并对多项式进行加、减、乘、求值、微分和积分运算。
【输入】根据程序提示输入一元多项式
【输出】根据程序提示选择功能,可输出相应多项式运算的结果。
算法分析
符号多项式的操作,已经成为表处理的典型用例。在数学上一个一元多项式Pn(x)可按降幂写成:
Pn(x)=Anx^n+An-1x^n-1+···+p1x+p0
它由n+1个系数唯一确定。因此,在计算机里可以用一个线性表来表示,每个的节点都是一个结构体变量,其元素有多项式中某一项的系数和幂数以及指向下一节点的指针。则多项式的各种操作就是对链表中的元素(系数,幂数)以及节点的操作。那么可以将多项式的操作分几步来实现:
1.用户输入并由程序建立多项式。这可以采用有序插入法。首先要编写有序插入的模块,为了在建立多项式时,存储空间能够有效利用并且简化多项式运算,在有序插入时应该可以进行同类项的合并,并能释放系数为零的节点,其算法如下:
Insertarr(Linklist L,term *s){//链表有序插入并合并同类项
Linklist p,q;
p=L;
while(p-next 不为空且其幂数大于新插入项的幂数)
p=p-next;给新项定位
if(p-next 不为空且其幂数等于新插入项的幂数){
幂数相同的系数相加;
if(该项的系数等于零){
删除该项并释放空间
}
}
else{// p-next 为空或其幂数小于新插入项的幂数
直接插入新项;
}
}
有了以上模块,创建多项式只需要从缓冲区读入数据再有序插入即可,而且由于是新项大于某一项时插在那项的前面,因此无论是顺序输入还是乱序输入,建立的多项式皆为降幂排列。
2.多项式的加减运算。这可以用一个模块完成,只要设置一个标志,当其为-1(减法运算)时,将减数多项式的系数取反即可。在处理相加时,可以充分利用前述的的有序插入合并同类项的模块。其算法如下:
Linklist Addpolyn(Linklist qa, Linklist qb, int sign){//两多项式相加减
Linklist sb=qb-next;// sb指向减数多项式的第一项
if(sign==1){//当sign为1时,对减数多项式的系数取反
while(减数多项式的节点sb不为空){
sb的系数取反;
sb=sb-next;
}
}
qb=qb-next;//qb指向减数多项式的第一项
while(qb不为空){
sb=qb-next;
Insertarr(qa,qb);//调用插入合并同类项函数
qb=sb;//qb指向减数多项式下一项
}
}
有了以上模块,加减轻松搞定。
3.多项式的乘法运算。这可以直接用乘法分配律将两个多项式乘开,再合并同类项。事实上,由于有有序插入模块,我们可以用两重循环将两多项式的项分别相乘,并将每两项相乘结果有序插入一个新的链表(多项式)中。则可以相乘、合并同类项一次完成。其算法如下:
Linklist multiplypolyn(Linklist qa, Linklist qb){//多项式乘法
Linklist head=(term *)malloc(sizeof(term));先建立一个头结点
head-next=NULL;头结点的尾指针置空
for(la指向被乘多项式的的第一项;la不为空;la指向下一个节点){
for(lb指向被乘多项式的的第一项;lb不为空;lb指向下一个节点){
p=(term *)malloc(sizeof(term));新建立一个节点
p 的系数等于la与lb系数之积;
p 的幂数等于la与lb幂数之和;
Insertarr(head,p);//插入到新多项式中
}
}
释放qa、qb的空间;
return head;
}
利用有序插入,可以一次完成多项式的乘法。
4.多项式求积分。这很简单,多项式的项数不变,只需将每项的系数除以(原幂数+1),而幂数加一即可。其算法如下:
Linklist integralpolyn(Linklist qa){//对多项式求积分
p=qa-next;//p指向多项式的第一项;
while(p不为空){
p的系数=p的原系数/(p的原幂数+1)
p的幂数加一;
p指向下一项;
}
}
5.多项式求微分。对多项式求微分,当幂数大于等于一时,很简单,只需要系数乘以原幂数,而原幂数减一即可。但当多项式中有常数项时,多项式的项数会减一,因而需要在微分过程中删除为零的项。其算法如下:
Linklist deriv
您可能关注的文档
最近下载
- 七年级下学期体育与健康教案全集(54课时).doc VIP
- 2025年绿色矿山建设技术挑战与机遇报告.docx
- 住房公积金贷款全权代理委托书范本.docx VIP
- 2024-2025学年人美版(2024)美术小学一年级上册教学设计(附教材目录).docx VIP
- 【北师大版】二年级《劳动实践指导手册》第1课《清洗我的小水杯》课件.pptx VIP
- 高中通用技术作品实验报告.doc VIP
- 急性有机磷农药中毒诊治.ppt VIP
- JB_T 7334-2016 手拉葫芦.pdf VIP
- 燃气管道施工方案.doc VIP
- DB15T 3962.3-2025绿色矿山建设规范 第3部分:黄金行业.pdf VIP
文档评论(0)