多项式Word文档下载推荐.docx

上传人:b****6 文档编号:21355738 上传时间:2023-01-29 格式:DOCX 页数:19 大小:72.20KB
下载 相关 举报
多项式Word文档下载推荐.docx_第1页
第1页 / 共19页
多项式Word文档下载推荐.docx_第2页
第2页 / 共19页
多项式Word文档下载推荐.docx_第3页
第3页 / 共19页
多项式Word文档下载推荐.docx_第4页
第4页 / 共19页
多项式Word文档下载推荐.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

多项式Word文档下载推荐.docx

《多项式Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《多项式Word文档下载推荐.docx(19页珍藏版)》请在冰豆网上搜索。

多项式Word文档下载推荐.docx

实现两个多项式的减法

ValuePolyn(head,x)

对多项式求值

Derivative(head)

一元多项式head已经存在

对多项式求导

Derivative(pa,pb)

实现两个多项式的乘法

DestroyPolyn(p)

一元多项式p已存在

将一元多项式销毁

PrintPolyn(p)

打印出一元多项式p

}ADTPolyn

2、本程序包含2个模块

a、主函数模块

voidmain(){

创建多项式;

选择操作;

执行运算;

输出结果;

销毁多项式;

}

b、链表模块——实现链表的抽象数据类型

各模块之间的调用如下:

主函数模块

链表模块

三、详细设计

1、结点类型和部分数据定义

typedefstructLNode//存储结构定义

{

floatcoef;

//系数

intexpn;

//指数

structLNode*next;

}*ElemType,LNode;

2、主函数和其他函数的算法分析

voidInsert(ElemTypep,ElemTypeq);

//插入函数,将q插入到p中,用于创建多项式时,实现创建的多项式按降幂//排列

StatusCreatePolyn(ElemType&

p,intn);

//实现多项式的有序创建,调用Insert函数,将各项按幂的降序排列

//n<

=0,返回ERROR;

n>

0,返回OK

StatusDestroyPolyn(ElemTypep);

//实现多项式的销毁,销毁成功返回OK

voidPrintPolyn(ElemTypep)

//实现多项式的输出

intcompare(ElemTypea,ElemTypeb);

//比较两项指数大小,若a的指数大于b的指数,返回1;

若a的指数小于

//b的指数,返回-1;

若a的指数等于b的指数,返回0

ElemTypeAddPolyn(ElemTypepa,ElemTypepb);

//实现两个多项式的加法,创建一个新的多项式,依次比较pa,pb的各项指数

//调用compare函数插入到新多项式中

ElemTypeSubtractPolyn(ElemTypepa,ElemTypepb);

//实现两个多项式的减法,将pb的各项系数取相反数,然后再与pa进行加法

floatValuePolyn(ElemTypehead,intx);

//实现多项式的求值,输入一个x,逐项将其值代入,若该项指数为负,则

//除以x,将指数加1,循环,直到x为0;

否则,乘以x,将指数减1,循

//环,直到x值为0

ElemTypeDerivative(ElemTypehead);

//实现多项式的求导,该项为常数项时,将该项删除,否则,将系数与指数

//相乘作系数,指数减1作指数

ElemTypeMultiplyPolyn(ElemTypepa,ElemTypepb);

//实现多项式的乘法,积的系数等于两系数相乘,积的指数等于两系数之和

//调用Insert函数

四、调试分析

1、在该程序的早期版本中,由于缺乏调试技术,源程序中没有明确对尾指针的指向,曾多次出现内存分配错误,后均通过调试改正。

这是我对调试技术有了进一步了解。

2、函数的时空分析

1)虽然该程序在输入时对输入的顺序并未作硬性要求,但create函数中附加了排序和合并同类项的功能,这样能大大减小后面的加减法的排序次数。

同时在每个函数的排序操作中,均设置了两个指针,一个指向当前结点,另一个指向他的前继结点,这样能方便地在两个指针之间进行插入操作。

create函数中的时间复杂度最大为O((n-1)*n/2),Insert1、Insert2函数中的时间复杂度最大为O(m+n)(其中,p为n项,q为m项,插入操作是将q插入p中)。

2)在create函数中,插入操作中除新开辟的头节点和第一个结点外,其他皆为原链表中的结点,因此空间复杂度为O(8*(m+2)),Insert1、Insert2函数中的空间复杂度最大为O(8*(m+n))(其中,p为n项,q为m项,插入操作是将q插入p中)。

3、在求解合并后多项式项数中,该程序引用了一个全局变量,使项数的求解变得很简单,不需用一个函数来实现。

4、本次程序采用抽象数据类型来实现,使每一个模块的功能变得非常清晰,且模块之间的调用关系也非常明朗。

这样的程序设计方法使编程者的思路非常清晰,同时便于对各个模块进行单独调试,非常方便。

通过本次试验作业,我确实得到了一次良好的程序设计训练。

五、用户手册

1、本程序的运行环境为DOS操作系统,执行文件为:

一元稀疏多项式.exe。

2、进入演示程序后即显示文本方式的用户界面:

3、看到“请选择您要进行的操作(1~8):

”提示后,依次输入一项的系数和指数,按回车键结束。

4、接受其他命令后即执行相应运算和显示相应结果,在此不再一一演示。

六、测试结果

测试数据1:

多项式1:

2,15,8-3.1,11

多项式2:

7,0-5,811,9

运算方式:

加法

结果:

测试数据2:

多项式1:

6,-3-1,14.4,2-1.2,9

-6,-35.4,2-1,27.8,15

减法

附录

源程序:

#include<

stdio.h>

malloc.h>

stdlib.h>

#defineTRUE1

#defineFALSE0

#defineOK1

#defineERROR0

#defineOVERFLOW-1

floatcoef;

intexpn;

structLNode*next;

typedefintStatus;

//typedeftermElemType;

voidInsert(ElemTypep,ElemTypeq)//插入函数,将各项按幂的降序排列

if(p->

coef==0)//若系数为0释放结点

free(p);

else

{

ElemTypes1,s2;

s1=q;

s2=q->

next;

while(s2&

&

p->

expn<

s2->

expn)//查找插入位置

{

s1=s2;

s2=s2->

}

if(s2&

expn==s2->

expn)//若系数相同,则把它们的系数相加

s2->

coef+=p->

coef;

free(p);

if(!

s2->

coef)//若相加后系数为0,则释放结点

{

s1->

next=s2->

free(s2);

}

else//若为新指数项则插入结点

p->

next=s2;

s1->

next=p;

}

p,intn)//实现多项式的有序创建,将各项按幂的降序排列

if(n<

=0)

returnERROR;

inti;

ElemTypeq;

q=p=(ElemType)malloc(sizeof(LNode));

p->

next=NULL;

for(i=0;

i<

n;

i++)//循环输入各项

q=(ElemType)malloc(sizeof(LNode));

//建立新结点

printf("

请输入第%d项的系数与指数:

"

i+1);

scanf("

%f%d"

&

q->

coef,&

expn);

Insert(q,p);

returnOK;

StatusDestroyPolyn(ElemTypep)//实现多项式的销毁

ElemTypeq1,q2;

q1=p->

q2=q1->

while(q1->

next)

free(q1);

q1=q2;

q2=q2->

voidPrintPolyn(ElemTypep)//实现多项式的输出

ElemTypeq=p->

intcount=1;

//项数计数器

if(!

q)//多项式为空

printf("

该多项式为空!

\n"

);

while(q)

if(q->

coef>

0&

count!

=1)//若该项的系数不为0且不是第一项

printf("

+"

coef!

=1&

q->

=-1)//若该项的系数不为正负1

%f"

q->

coef);

if(q->

expn==1)//若指数为1输出X

printf("

x"

elseif(q->

expn)//若指数不为0

x^%d"

else

coef==1)

if(!

expn)//若系数为1,指数为0

printf("

1"

elseif(q->

expn==1)//若系数为1,指数也为1

else

coef==-1)

expn)//若系数为-1,指数为0

-1"

expn==1)//若系数为-1,指数为1

-x"

else

-x^%d"

q=q->

count++;

intcompare(ElemTypea,ElemTypeb)//比较指数大小

if(a&

b)

if(a->

expn>

b->

expn)//a,b均不为空时,a的指数大于b的指数返回1

return1;

elseif(a->

expn)

return-1;

else

return0;

elseif(!

a&

b)//a为空b不为空时返回-1

return-1;

else//b为空a不为空时返回1

return1;

ElemTypeAddPolyn(ElemTypepa,ElemTypepb)//实现两个多项式的加法,和按幂的降序排列

ElemTypeqa=pa->

ElemTypeqb=pb->

ElemTypeheadc,hc,qc;

hc=(ElemType)malloc(sizeof(LNode));

//建立头结点

hc->

headc=hc;

//headc=(ElemType)malloc(sizeof(LNode));

while(qa||qb)

qc=(ElemType)malloc(sizeof(LNode));

switch(compare(qa,qb))//按幂降序将各项插入到qc中

case1:

qc->

coef=qa->

expn=qa->

expn;

qa=qa->

break;

case0:

coef+qb->

qb=qb->

case-1:

coef=qb->

if(qc->

=0)//若该项系数不为0,则放到hc中

qc->

next=hc->

hc->

next=qc;

hc=qc;

else//否则释放结点

free(qc);

returnheadc;

ElemTypeSubtractPolyn(ElemTypepa,ElemTypepb)//实现多项式的减法

ElemTypeh=pb;

ElemTypep=pb->

ElemTypepd;

//pd=(ElemType)malloc(sizeof(LNode));

while(p)//将pb的各项系数取相反数

coef*=-1;

p=p->

pd=AddPolyn(pa,h);

//调用加法

for(p=h->

p;

p=p->

next)//将pb还原

returnpd;

floatValuePolyn(ElemTypehead,intx)//实现多项式的求值

ElemTypep;

floatsum=0,t;

for(p=head->

t=1;

for(i=p->

i!

=0;

if(i<

0)//若指数为负,则除以x,直到指数为0

t/=x;

i++;

else//若指数为非负,则乘以x,直到指数为0

t*=x;

i--;

sum+=p->

coef*t;

//最后每项乘以系数,求和

returnsum;

ElemTypeDerivative(ElemTypehead)//实现多项式的求导

ElemTypeq=head->

next,p1,p2,hd;

hd=p1=(ElemType)malloc(sizeof(LNode));

hd->

expn!

=0)//该项不是常数项时

p2=(ElemType)malloc(sizeof(LNode));

p2->

coef=q->

coef*q->

expn=q->

expn-1;

next=p1->

//连接结点

p1->

next=p2;

//p1=p2;

returnhd;

ElemTypeMultiplyPolyn(ElemTypepa,ElemTypepb)//实现多项式乘法

ElemTypehf,pf;

hf=(ElemType)malloc(sizeof(LNode));

hf->

for(;

qa;

qa=qa->

for(qb=qb->

qb;

qb=qb->

pf=(ElemType)malloc(sizeof(LNode));

pf->

coef*qb->

//积的系数等于两系数相乘

expn+qb->

//积的指数等于两指数之和

Insert(pf,hf);

returnhf;

voidmain()

//inta;

//intm,n,x;

/*pa=(ElemType)malloc(sizeof(structPolynomial));

pb=(ElemType)malloc(sizeof(structPolynomial));

pc=(ElemType)malloc(sizeof(structPolynomial));

pd=(ElemType)malloc(sizeof(structPolynomial));

*/

charselect;

ElemTypepa,pb,pc,pd;

***********************************************************\n"

**一元稀疏多项式运算器**\n\n"

menu:

\n1:

创建多项式\n2:

输出多项式\n3:

多项式的加法运算\n4:

多项式的减法运算\n5:

多项式的乘法运算\n6:

对多项式求导\n7:

代入x求多项式的值\n8:

退出程序\n"

while

(1)

请选择您要进行的操作(1~8):

\n"

scanf("

%c"

select);

switch(select)

case'

1'

:

intm;

请输入多项式的项数:

scanf("

%d"

m);

CreatePolyn(pa,m);

多项式创建成功!

break;

/*printf("

请输入b的项数:

n);

pb=CreatePolyn(pb,n);

是否继续操作(Y\N)?

%c"

ch);

if(ch=='

N'

||'

n'

*/

//break;

2'

\n多项式a="

PrintPolyn(pa);

break;

3'

intm,n;

请输入a的项数:

CreatePolyn(pb,n);

\n多项式b="

PrintPolyn(pb);

pc=AddPolyn(pa,pb);

\na+b="

PrintPolyn(pc);

4'

pc=SubtractPolyn(pa,pb);

\na-b="

5'

pc=MultiplyPolyn(pa,pb);

\na*b="

6'

pc=Derivative(pa);

\n多项式a

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 图表模板

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

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