一元多项式的加减求导运算算法(数据结构算法)

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

实验题目:一元多项式运算

班级:13级数学一班姓名:张保昌学号:2013433037 日期:2014—10—09

一、需求分析

1.问题描述;

设计一个简单的一元稀疏多项式加减及求导运算器。

2.基本要求的功能要求;

(1)输入多项式时可以按任意次序输入各项的数据(输入并建立多项式A与B),不必按指数有序;在算法中实现建立按指数有序的多项式。

(2)计算多项式A与B的和,即建立多项式A+B。

(3)按照指数升序次序,输出多项式A、B、A+B。

(4)计算多项式A与B的差,即建立多项式A-B;

(5)计算多项式A的导函数Aˊ。

3.测试数据。

(1)(x+3x6-8.6x11)+(6-3x6+21x9)=6+x+21x9-8.6x11

(2)(3x-3-x+4.1x2-1.2x9)+(―3x―3-5.1x2 +7.8x12)=-x-x2-1.2x9+7.8x12

(3)(x+x3)+(―x―x3)=0

(4)(x+x2+x3)+0=x+x2+x3

(5)(x+x2+x3)—(x+x2+x3)=0

(6) (x+x2+x3)ˊ=1+2x+3x2

二、概要设计

1.本程序所用的抽象数据类型的定义;

typedef struct pnode

{

double coef; /*系数域*/

int exp; /*指数域*/

struct pnode *next; /*指针域,*/

}polynode, *polylink;

polylink insert_list(polylink h,char o); //输入多项式。

polylink order_list(polylink h); //按指数升序排列

polylink simply_list(polylink h); //初步整理(合并多项式,并删除系数为零的式子)polylink add(polylink a,polylink b); //加法运算

polylink opposite(polylink b); //将减法统归为加法

polylink derivative(polylink a); //求导函数

void list_display(polylink h,char o); //输出显示

void index(); //菜单函数

2.模块划分。

1)主函数模块。2)加法运算模块3)减法运算模块4)导数模块。

3.主模块的流程及各子模块的主要功能;

三、详细设计

1.采用c++语言定义相关的数据类型;

typedef struct pnode

{

double coef; /*系数域*/

int exp; /*指数域*/

struct pnode *next; /*指针域

}polynode, *polylink;

2.写出各模块的伪码算法;

void index() //菜单函数。

{

cout<<" 一元多项式运算"<

cout<<" 1.一元多项式加法"<

cout<<" 2.一元多项式减法"<

cout<<" 3.一元多项式导数"<

cout<<" 0. 结束"<

polylink insert_list(polylink h,char o) //输入多项式

{

h=new polynode;

double coef1;

int num,expo1;

polylink temp;

polynode *data;

temp=h;

h->next =NULL;//头结点

cout<<"多项式"<

cin>>num;

for(int i=1;i<=num;i++)

{

cout<<"请输入第"<

cout<<"系数:";

cin>>coef1;

cout<<"指数:";

cin>>expo1;

data=new polynode;

data->coef=coef1;

data->exp =expo1;

data->next =NULL;

temp->next =data;

temp=data;

}

return h;

}

polylink simply_list(polylink h) //初步化简,系数无0,无重复指数{

polylink p,q,r,k;

p=h->next ;

if(!p)

return h; //空表while(p)

{

k=p;

q=k->next ;

while(q)

{

if(q->exp==p->exp )

{

r=q;

q=q->next ;

p->coef +=r->coef ;

k->next =r->next ;

delete r;

}

else

{

q=q->next ;

k=k->next;

}

}

p=p->next ;

}

k=h;

q=h->next ;

while(q)

{

if( q ->coef==0)

{

r=q;

q=q->next ;

k->next =r->next ;

delete r;

}

else

{

q=q->next ;

k=k->next ;

}

}

相关文档
最新文档