稀疏一元多项式运算器 实验报告 附源程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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项,修改函数中调用