ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:295.91KB ,
资源ID:21963353      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/21963353.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(稀疏一元多项式运算器实验报告附源程序Word格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

稀疏一元多项式运算器实验报告附源程序Word格式.docx

1、每一个多项式由头指针引出,头指针数组lnode* pN。每一个单元存储一多项式头指针。当多项式不存在,pi=NULL;多项式为空,pi-next=NULL,即只存在头指针。操作函数见程序结构描述部分。程序结构描述:函数包括创建结点函数,有序插入函数,打印函数,创建多项式函数,多项式清空函数,多项式销毁函数,求值函数,求和函数,求差函数,复制函数,删除结点函数,修改函数,n阶微分函数,不定积分函数。对函数原型,功能,借口逐一描述如下:创建结点函数函数原型:linklist makenode(double coef, int exp)输入double型系数项,int型指数项,创建lnode结点,返

2、回指向结点的linklist指针。功能:创建新结点,在复制函数以及输入系数指数插入结点时(修改多项式)调用。有序插入函数void insert(linklist phead, linklist head)输入插入结点指针phead以及多项式头指针head,无返回值新结点phead有序插入头结点为head的多项式内(按指数项降序排列),在创建,复制,修改函数中调用。打印函数void printlinklist(linklist phead)输入待打印多项式头指针phead,无返回值分别打印系数项和指数项,打印系数项是使用%g输入取消无效0,通过特殊情况讨论(如exp=0,exp=1,首项的加号等

3、情况),使多项式输出符合书写习惯。打印多项式创建多项式linklist creatlist()返回创建多项式头指针,调用时先在主函数中输入该多项式头指针在头指针数组中位置。实现:先若该位置无多项式,申请头结点,之后新建数据结点,有序插入头结点对应多项式。清空多项式void linklistclear(linklist head)输入待清空多项式头结点,无返回值,将pi仅保留头结点。用前后两指针,遍历多项式并逐一删去结点,最后将头指针的next域置NULL。销毁多项式void linklistdestroy(linklist &head)输入待销毁多项式头结点,无返回值,将pi置NULL实现方法

4、类似清空,删去包括head在内结点。多项式求值double linklistvalue(linklist head,double x)输入待求多项式头结点,变量x值 double x,返回double型结果通过exp求每一项权重,与系数coef相乘,最后累加所有结果。多项式求和void linklistadd(linklist ahead,linklist bhead,linklist &chead)输入相加两多项式a,b头指针以及输出位置c,无返回值通过pa,pb遍历a,b,新建c结点对比当前位置a,b exp大小,分别做对应赋值,之后将c结点插入c多项式中(*当c新结点系数为0时不进行插入

5、)多项式求差void linklistsub(linklist ahead,linklist bhead,linklist &chead) 输入相减两多项式a,b头指针以及输出位置c,无返回值实现完全与求和相同多项式复制linklist linklistcopy(linklist a)输入待复制多项式头指针 linklist a,输出复制结果指针 linklist。遍历多项式a,读取每一结点coef,exp值,调用makenode函数创建新结点,插入多项式b,返回b头指针head。删除多项式中一节点int linklistdelete(linklist head, int m)输入待删除多项式

6、头指针 linklist head,待删除项指数值int m,成功返回1,反之-1删除head中一指数为m项,修改函数中调用遍历多项式,若指数项系数为m,free(p)修改多项式void linklistmodify(linklist head)输入待修改多项式头指针 linklist head,无返回值调用函数时输入1,2,3选择插入结点,删除结点,修改结点操作(删除后插入),分别调用delete函数及insert函数实现。微分void linklistdiff(linklist &输入待微分多项式头指针linklist head,按照求导规则逐项修改系数,指数,并对原常数项结点进行删除操作

7、。实现N阶微分是在主函数中n次调用即可。不定积分void iteintegral(linklist head)输入多项式头指针 linklist head,无返回值按多项式积分规则逐项修改系数,指数,对不定积分中C取0。实现定积分是同时调用不定积分函数与求值函数即可。算法时空分析:无复杂嵌套,均一次遍历即可,对多项式操作复杂度均为O(N)数量级。调试及结果分析:选择键面:创建多项式:创建并打印,指数为0结束显示多项式:判断第一项前不输出+,指数正负1,0修改输出格式复制多项式:求和:说明:为测试一个多项式先加完的情况,选择b多项式指数项系数大于a,在未修改前因访问b-exp,而b=NULL报错

8、。修改分情况讨论。求差:求值:销毁:清空:修改:n阶微分:验证删除常数项微分功能,选择该实验数据不定积分:定积分:遍历每个函数验证可行,一些特殊分支的测试函数不予以列出,调试时主要解决一些健壮性问题以及一些未考虑周全的方面。 实验体会和收货:实验中大部分函数思路较为简单,但存在大量细节问题。如打印多项式中,系数的无效0去除,打印结果与正常书写习惯的符合性;add函数中某多项式先插完的极端情况;加减函数中结果为0项的删除;主函数中输入位置i合法性检查等。完善其在各种极端情况下的健壮性很多时候更为耗时,但却是必须的。在写较大函数时应进行分块。本实验完成时,我采取了完成create,print函数后

9、逐一写运算函数的方法,尽管在单个函数调试时并未有明显障碍,但给之后调用和阅读带来极大不便,以后需要避免。处理这类问题时,最复杂的步骤往往是确定和建立数据结构,本次完成实验的很大一部分时间花在了基础函数(create,insert,print)的完成上,而非简单的运算函数。测试数据选择需加以仔细思考一方面是有些数据可同时测试多路,提高效率,更重要的是很多极端情况只有特定函数才能完成测试。#include#define N 20lnode* pN=NULL; 除结点n2.增加结点n3.修改结点n); scanf(%d,&flag); switch(flag) case 1: printf(输入删除

10、结点指数值: scanf(exp); linklistdelete(head,exp); break; case 2:输入增加结点指数值 系数:%d %lfexp,&coef); insert(makenode(coef,exp),head); case 3:输入指数 修改后系数: head) linklist p=head-next; while(p!=NULL) if(p-exp=0) linklistdelete(head,0); break; else p-coef*=p-exp;exp-=1; p=p- void iteintegral(linklist head) linklist

11、 p=head- p-exp+=1;coef=p-coef/p- p=p-int main() int flag,i; printf(*n* 稀疏一元多项式运算器 *n* 0.退出 *n建多项式 *n示多项式 *n制多项式 *n和 *n差 *n值 *n毁多项式 *n空多项式 *n改多项式 *n定微分 *n* 12.定微分 *n while(1)键入数字选择操作: switch(flag) case 0: printf(thanks for usingn return 0; case 1:input location: scanf(i); if(pi-1=NULL) pi-1=creatlist

12、(); else printf(空间已被占用n case 2:输入显示位置: if(pi-1!=NULL) printlinklist(pi-1);该位置无多项式n case 3: int j;input 原位置 复制位置:%d %di,&j);=NULL&pj-1=NULL) pj-1=linklistcopy(pi-1);输入位置空或输出位置满 case 4: int j,k;输入a,b位置,以及输出c位置:%d %d %dj,&k);pj-1!pk-1=NULL) linklistadd(pi-1,pj-1,pk-1); else printf(位置被占用或原多项式不存在n case 5

13、: linklistsub(pi-1,pj-1,pk-1); case 6:输入多项式位置: double tempx;输入x值: scanf(%lftempx);结果为%gn,linklistvalue(pi-1,tempx); break; case 7:输入删除位置: linklistdestroy(pi-1); case 8:输入清空位置: linklistclear(pi-1);该位置不存在多项式n case 9:输入修改对象位置: linklistmodify(pi-1);对应位置为空n case 10:输入微分位置:输入求导阶数: int n,j;n); for(j=0;jn;j+) linklistdiff(pi-1); case 11:输入不定积分位置: iteintegral(pi-1); case 12:输入定积分位置: double j1,j2;输入上下限:%lf %lfj1,&j2); %g n,linklistvalue(pi-1,j1)-linklistvalue(pi-1,j2);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1