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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

信息学院12级杨征元 PB 稀疏一元多项式运算器

问题描述:完成一元稀疏多项式运算器,完成多项式创建,显示,复制,求和,求差,求值,销毁,清空,修改,n阶微分,不定积分,定积分操作。函数功能描述如下:

稀疏一元多项式运算器

0.退出退出

1.创建多项式创建并打印

2.显示多项式打印

3.复制多项式复制多项式a至空域b,非空报错

4.求和输入abc位置,c=a+b

5.求差输入abc位置,c=a-b

6.求值输入位置,double x,输出double result

7.销毁多项式销毁,使p[i]为NULL

8.清空多项式清空保留头指针,输出为0

9.修改多项式选择插入,删除,修改(删了再插)

阶微分输入微分位置,阶数,结果存放于原位置

11.不定微分输入积分位置,不定积分,常数C取0

12.定微分输入积分位置,上下限值,输出定积分结果

算法描述:通过主菜单调用函数完成各项功能,函数描述见程序结构描述部分。

数据结构描述:多项式每一项结点定义如下:

typedef struct lnode{

double coef;

int exp;

struct lnode* next;

}lnode,*linklist;

包含指向下一结点指针linklist next,存储系数的数据单元double coef,存储指数的数据单元int exp;结点名lnode,指向结点指针linklist。

每一个多项式由头指针引出,头指针数组lnode* p[N]。每一个单元存储一多项式头指针。当多项式不存在,p[i]=NULL;多项式为空,p[i]->next=NULL,即只存在头指针。

操作函数见程序结构描述部分。

程序结构描述:

函数包括创建结点函数,有序插入函数,打印函数,创建多项式函数,多项式清空函数,多项式销毁函数,求值函数,求和函数,求差函数,复制函数,删除结点函数,修改函数,n 阶微分函数,不定积分函数。对函数原型,功能,借口逐一描述如下:

1.创建结点函数

函数原型:linklist makenode(double coef, int exp)

输入double型系数项,int型指数项,创建lnode结点,返回指向结点的linklist指针。

功能:创建新结点,在复制函数以及输入系数指数插入结点时(修改多项式)

调用。

2.有序插入函数

函数原型:void insert(linklist phead, linklist head)

输入插入结点指针phead以及多项式头指针head,无返回值

功能:新结点phead有序插入头结点为head的多项式内(按指数项降序排列),在创建,

复制,修改函数中调用。

3.打印函数

函数原型:void printlinklist(linklist phead)

输入待打印多项式头指针phead,无返回值

分别打印系数项和指数项,打印系数项是使用%g输入取消无效0,通过特殊情况讨论(如

exp=0,exp=1,首项的加号等情况),使多项式输出符合书写习惯。

功能:打印多项式

4.创建多项式

函数原型:linklist creatlist()

返回创建多项式头指针,调用时先在主函数中输入该多项式头指针在头指针数组中位

置。

实现:先若该位置无多项式,申请头结点,之后新建数据结点,有序插入头结点对应多

项式。

5.清空多项式

函数原型:void linklistclear(linklist head)

输入待清空多项式头结点,无返回值,将p[i]仅保留头结点。

实现:用前后两指针,遍历多项式并逐一删去结点,最后将头指针的next域置NULL。

6.销毁多项式

函数原型:void linklistdestroy(linklist &head)

输入待销毁多项式头结点,无返回值,将p[i]置NULL

实现方法类似清空,删去包括head在内结点。

7.多项式求值

函数原型:double linklistvalue(linklist head,double x)

输入待求多项式头结点,变量x值 double x,返回double型结果

实现:通过exp求每一项权重,与系数coef相乘,最后累加所有结果。

8.多项式求和

函数原型:void linklistadd(linklist ahead,linklist bhead,linklist &chead)

输入相加两多项式a,b头指针以及输出位置c,无返回值

实现:通过pa,pb遍历a,b,新建c结点对比当前位置a,b exp大小,分别做对应赋值,

之后将c结点插入c多项式中(*当c新结点系数为0时不进行插入)

9.多项式求差

函数原型:void linklistsub(linklist ahead,linklist bhead,linklist &chead) 输入相减两多项式a,b头指针以及输出位置c,无返回值

实现完全与求和相同

10.多项式复制

函数原型:linklist linklistcopy(linklist a)

输入待复制多项式头指针 linklist a,输出复制结果指针 linklist。

遍历多项式a,读取每一结点coef,exp值,调用makenode函数创建新结点,插入多项

式b,返回b头指针head。

11.删除多项式中一节点

函数原型:int linklistdelete(linklist head, int m)

输入待删除多项式头指针 linklist head,待删除项指数值int m,成功返回1,反之

-1

删除head中一指数为m项,修改函数中调用

相关文档
最新文档