数据结构课程设计报告一元多项式加减乘除文档格式.docx

上传人:b****4 文档编号:17839699 上传时间:2022-12-11 格式:DOCX 页数:38 大小:249.69KB
下载 相关 举报
数据结构课程设计报告一元多项式加减乘除文档格式.docx_第1页
第1页 / 共38页
数据结构课程设计报告一元多项式加减乘除文档格式.docx_第2页
第2页 / 共38页
数据结构课程设计报告一元多项式加减乘除文档格式.docx_第3页
第3页 / 共38页
数据结构课程设计报告一元多项式加减乘除文档格式.docx_第4页
第4页 / 共38页
数据结构课程设计报告一元多项式加减乘除文档格式.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

数据结构课程设计报告一元多项式加减乘除文档格式.docx

《数据结构课程设计报告一元多项式加减乘除文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告一元多项式加减乘除文档格式.docx(38页珍藏版)》请在冰豆网上搜索。

数据结构课程设计报告一元多项式加减乘除文档格式.docx

1.2国内外研究的现状

顺序存储和链式存储实现简单的计算运算是计算机实现的最简单最低的基本功能,

顺序存储和链式存储是计算各种功能的基础,随着计算机的研究不断发展,现在国内外的研究都达到非常稳定和成熟的程度。

1.3任务与分析

本课题主要的目的是分别采用顺序和动态存储结构实现一元多项式的加法、减法和乘法。

并将操作结果分别按升序和降序输出。

2程序的主要功能

2.1一元多项式创建

建立一元多项式的顺序表和链式表,按程序提示输入每个项数据结束创建。

借助元素在存储器中的相对位置来表示数据元素之间的关系,顺序表中第i个位置表示一元多项式的第i项的系数为第i个位置存放的内容,指数为i-1。

用链表来表示只存储多项式中系数非零的项。

链表中的每一个结点存放多项式的一个term项结构和指向下一个节点的指针域,term又包括系数和指数两个域分别存放该项的系数、。

2.2一元多项式的加法

对于两个一元多项式中所有指数相同的项,对应系数相加,若其和不为零,则构成“和多项式”中的一项;

对于两个一元多项式中所有指数不相同的项,则分别复抄到和多项式中去。

2.3一元多项式的减法

对于两个一元多项式中所有指数相同的项,对应系数相减,若其差不为零,则构成“和多项式”中的一项;

对于两个一元多项式中所有指数不相同的项,将其按减法规则复抄到差多项式中去。

2.4一元多项式的乘法

将乘法运算分解为一系列的加法运算利用两个一元多项式相加的算法实现。

2.5一元多项式项的指数比较

比较相邻两项的指数的大小。

按升序排列时,前面项的指数大于后面项的指数就交换其项的位置。

按降序序排列时,后面项的指数大于前面项的指数就交换其项的位置。

2.6一元多项式运算结果升降排序

一元多项式运算结果选择调用降序或升序排序函数。

2.7一元多项式的输出

将选择的运算操作结果输出。

2.8一元多项式的销毁

销毁已建立的两个多项式,释放空间。

3程序运行平台

VC++6.0。

编译,链接,执行。

WindowsXP。

4总体设计

图4.1系统总体框架图

5程序类的说明

(1)Ploy结构声明

typedefstruct//顺序表结构声明

{

inta[N];

//记录多项式

intlen;

//记录多项式的长度

}Ploy;

(2)term结构声明

typedefstruct//项的表示

{floatcoef;

//系数

intexpn;

//指数

}term;

(3)LNode结构声明

typedefstructLNode

{termdata;

//term多项式值

structLNode*next;

}LNode,*LinkList;

//两个类型名

typedefLinkListpolynomail;

//用带头结点的有序链表表示多项式

6模块分析

整个流程图如图所示:

图1

6.1创建模块

6.1.1、链式存储结构的一元多项式的创建

程序源代码:

polynomailcreatpolyn(polynomailP,intm)

{

//输入m项的系数和指数,建立表示一元多项式的有序链表P

polynomailr,q,p,s,Q;

inti;

P=(LNode*)malloc(sizeof(LNode));

r=P;

for(i=0;

i<

m;

i++)

{

s=(LNode*)malloc(sizeof(LNode));

printf("

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

"

i+1);

scanf("

%f%d"

&

s->

data.coef,&

data.expn);

r->

next=s;

r=s;

}

next=NULL;

if(P->

next->

next!

=NULL)

for(q=P->

next;

q!

=NULL/*&

&

q->

=NULL*/;

q=q->

next)//合并同类项

for(p=q->

next,r=q;

p!

=NULL;

if(q->

data.expn==p->

data.expn)

{

q->

data.coef=q->

data.coef+p->

data.coef;

r->

next=p->

Q=p;

p=p->

free(Q);

}

else

{

r=r->

returnP;

}

6.1.2、顺序存储结构一元多项式的创建

voidGetPloy(Ploy*A)

inti,coef,ex,maxe=0;

charch;

请输入每个项的系数及对应的指数,指数为负数时标志输入结束!

\n"

);

N;

A->

a[i]=0;

%d%d"

coef,&

ex);

while(ex>

=0)

{

if(ex>

maxe)

maxe=ex;

if(A->

a[ex]!

{

printf("

你输入的项已经存在,是否更新原数据?

(Y/N)"

cin>

>

ch;

if(ch=='

Y'

||ch=='

y'

{

A->

a[ex]=coef;

printf("

更新成功,请继续输入!

}

else

请继续输入!

;

}

else

A->

scanf("

A->

len=maxe;

return;

}

6.2一元多项式的加法

6.2.1链式存储两多项式相加

polynomailaddpolyn(polynomailpa,polynomailpb)

//完成多项式相加运算,即:

Pa=Pa+Pb

polynomails,newp,q,p,r;

intj;

p=pa->

q=pb->

newp=(LNode*)malloc(sizeof(LNode));

r=newp;

while(p&

q)

switch(cmp(p->

data,q->

data))

case-1:

s->

data.coef=p->

s->

data.expn=p->

data.expn;

r->

r=s;

p=p->

break;

case0:

data.coef+q->

if(s->

data.coef!

=0.0)

{

s->

r->

r=s;

}

q=q->

break;

case1:

data.expn=q->

}//switch

}//while

6.2.2顺序存储的多项式相加

voidADD(PloyA,PloyB,Ploy*M)

/*多项式A与多项式B相加,得到多项式M*/

intla=A.len,lb=B.len,i;

M->

len=la>

lb?

la:

lb;

=la&

=lb;

M->

a[i]=A.a[i]+B.a[i];

while(i<

=la)

a[i]=A.a[i];

i++;

=lb)

a[i]=B.a[i];

return;

6.3一元多项式相减

6.3.1链式存储的多项式相减

/*3、两多项式相减*/

polynomailsubpolyn(polynomailpa,polynomailpb)

//完成多项式相减运算,即:

Pa=Pa-Pb

polynomails,newp,q,p,r,Q;

p=p->

case0:

data.coef-q->

r=s;

data.coef=-q->

q=q->

while(p)

while(q)

if(newp->

=NULL&

newp->

=NULL)//合并同类项

for(q=newp->

next)

Q=p;

free(Q);

else

{r=r->

p=p->

升序1,降序2\n"

选择:

%d"

j);

if(j==1)

arrange1(newp);

else

arrange2(newp);

returnnewp;

6.3.2顺序存储的多项式相减

voidSUB(PloyA,PloyB,Ploy*M)

/*多项式A与多项式B相减(A-B),得到多项式M*/

a[i]=A.a[i]-B.a[i];

=la){M->

i++;

=lb){M->

a[i]=0-B.a[i];

6.4一元多项式相乘

6.4.1链式存储的多项式相乘

polynomailmulpolyn(polynomailpa,polynomailpb)

//完成多项式相乘运算,即:

Pa=Pa*Pb

inti=20,j;

for(p=pa->

for(q=pb->

{

s=(LNode*)malloc(sizeof(LNode));

data.coef*q->

data.expn+q->

arrange1(newp);

arrange2(newp);

for(;

i!

=0;

i--)

for(q=newp->

for(p=q;

p->

if(q->

{

q->

r=p->

p->

free(r);

}

returnnewp;

6.4.2顺序存储多项式相乘

voidMUL(PloyA,PloyB,Ploy*M)

/*多项式A与多项式B相乘,得到多项式M*/

inti,j;

=A.len+B.len+1;

i++)M->

=A.len;

for(j=0;

j<

=B.len;

j++)

M->

a[i+j]+=A.a[i]*B.a[j];

len=A.len+B.len;

6.5一元多项式输出结果按项的指数排序

6.5.1链式由小到大排序

图6.6.1链式升序流程图

voidarrange1(polynomailpa)

{polynomailh=pa,p,q,r;

if(pa==NULL)exit(-2);

for(p=pa;

next);

r=p;

for(h=pa;

h->

=r;

)//大的沉底

{for(p=h;

=r&

if(cmp(p->

data,p->

data)==1)

{q=p->

p->

next=q->

q->

next=q;

//r指向参与比较的最后一个,不断向前移动

}}

6.5.2链式由大到小排序

图6.6.2链式降序流程图

voidarrange2(polynomailpa)

)//小的沉底

6.5.3顺序由大到小排序

voidPrintPloy1(PloyA)//降序输出顺序一元多项式

%dx^%d"

A.a[A.len],A.len);

for(i=A.len-1;

i>

=1;

if(A.a[i]==0);

elseif(A.a[i]==1)printf("

+x^%d"

i);

elseif(A.a[i]==-1)printf("

-x^%d"

if(A.a[i]>

0)

+%dx^%d"

A.a[i],i);

-%dx^%d"

-A.a[i],i);

if(A.a[0]==0);

elseif(A.a[0]>

printf("

+%d"

A.a[0]);

//打印x的0次项

-%d"

-A.a[0]);

6.5.4顺序由小到大排序

voidPrintPloy2(PloyA)//升序输出顺序一元多项式

inti=0;

while(A.a[i]==0)

++i;

if(i==0)

A.a[i]);

if(A.a[i]==1)

x^%d"

elseif(A.a[i]==-1)

-x^%d"

%dx^%d"

for(++i;

elseif(A.a[i]==1)

+x^%d"

elseif(A.a[i]==-1)

-x^%d"

elseif(A.a[i]>

1)

+%dx^%d"

elseif(A.a[i]<

-1)

-%dx^%d"

6.6一元多项式运算系统实现

6.6.1主菜单系统

voidMenu()

************一元多项式的基本运算系统************\n"

1、一元多项式顺序存储的子系统请按1\n"

2、一元多项式链式存储的基本运算请按2\n"

3、退出系统请按3\n"

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

请输入你想进行的操作号:

intn;

n);

while(n!

=1&

n!

=2&

=3)

对不起,你的输入不正确,请重新输入!

switch

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

当前位置:首页 > 小学教育 > 小学作文

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

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