数据结构课程设计一元多项式的四则运算Word文档格式.docx

上传人:b****5 文档编号:8511555 上传时间:2023-05-11 格式:DOCX 页数:27 大小:142.56KB
下载 相关 举报
数据结构课程设计一元多项式的四则运算Word文档格式.docx_第1页
第1页 / 共27页
数据结构课程设计一元多项式的四则运算Word文档格式.docx_第2页
第2页 / 共27页
数据结构课程设计一元多项式的四则运算Word文档格式.docx_第3页
第3页 / 共27页
数据结构课程设计一元多项式的四则运算Word文档格式.docx_第4页
第4页 / 共27页
数据结构课程设计一元多项式的四则运算Word文档格式.docx_第5页
第5页 / 共27页
数据结构课程设计一元多项式的四则运算Word文档格式.docx_第6页
第6页 / 共27页
数据结构课程设计一元多项式的四则运算Word文档格式.docx_第7页
第7页 / 共27页
数据结构课程设计一元多项式的四则运算Word文档格式.docx_第8页
第8页 / 共27页
数据结构课程设计一元多项式的四则运算Word文档格式.docx_第9页
第9页 / 共27页
数据结构课程设计一元多项式的四则运算Word文档格式.docx_第10页
第10页 / 共27页
数据结构课程设计一元多项式的四则运算Word文档格式.docx_第11页
第11页 / 共27页
数据结构课程设计一元多项式的四则运算Word文档格式.docx_第12页
第12页 / 共27页
数据结构课程设计一元多项式的四则运算Word文档格式.docx_第13页
第13页 / 共27页
数据结构课程设计一元多项式的四则运算Word文档格式.docx_第14页
第14页 / 共27页
数据结构课程设计一元多项式的四则运算Word文档格式.docx_第15页
第15页 / 共27页
数据结构课程设计一元多项式的四则运算Word文档格式.docx_第16页
第16页 / 共27页
数据结构课程设计一元多项式的四则运算Word文档格式.docx_第17页
第17页 / 共27页
数据结构课程设计一元多项式的四则运算Word文档格式.docx_第18页
第18页 / 共27页
数据结构课程设计一元多项式的四则运算Word文档格式.docx_第19页
第19页 / 共27页
数据结构课程设计一元多项式的四则运算Word文档格式.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数据结构课程设计一元多项式的四则运算Word文档格式.docx

《数据结构课程设计一元多项式的四则运算Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计一元多项式的四则运算Word文档格式.docx(27页珍藏版)》请在冰点文库上搜索。

数据结构课程设计一元多项式的四则运算Word文档格式.docx

操作流程图如下图所示:

开始

创建一个含n个链表类型结点的项

分别输入各项的系数和指数

判断是否系数不为0且指数大于0

重新输入

一元多项式创建成功

N

Y

图3-1一元多项式的创建流程图

3.2一元多项式相加

先判断多项式的系数与项数之间大小关系,流程图如下所示:

运算时系数想加

删除该项

判断所输入的多项式系数是否为0

判断输入的两个多项式指数是否相等

输入的第1个多项式为B

判断输入的多项式1,2指数是否e1>

e2

输入的第2个多项式为B

进行运算

N

N

图3-2一元多项式相加流程图

3.3一元多项式相减

相减即取第二个的相反数,然后进行加法运算,操作流程图如下图所示:

调用多项式加法函数进行运算

将多项式B进行复制

取多项式B的相反数

图3-3一元多项式相减流程图

3.4一元多项式相乘

给出运算的两个多项式

按系数相乘指数相加进行运算

将运算的结果相加并输出

图3-4一元多项式相乘流程图

3.5一元多项式输出

先判断录入的两个多项式是否有空项,如果两个多项式都不是空的,那么顺序输出多项式A和多项式B,否则多项式创建不成功,提示重新输入。

输出多项式B

输出多项式A

判断所输入的两个多项式是否有空的

多项式创建有误,重新输入

Y

图3-5一元多项式输出流程图

3.6一元多项式销毁

先判断存储多项式的链表类型结点是否都不为空结点,若有空结点,则提示重新选择,否则,按顺序销毁多项式A,B。

销毁存储多项式B的结点

销毁存储多项式A的结点

判断存储多项式的链表类型结点是否都不为空

多项式不存在,重新选择

Y

图3-6一元多项式销毁流程图

3.7退出

本过程较为简单,用exit(0)强制终止程序,返回状态码0表示正常结束。

其操作流程图如下图所示:

强制终止程序

提示退出

图3-6一元多项式退出流程图

4运行环境与结果

4.1运行环境

在本课程设计中,系统开发平台为WindowsXP,程序设计语言为C++,程序的运行环境为VisualC++6.0。

4.2运行结果

(1)在程序开始运行时,会出现一个编号1-7的菜单并提示选择,如下图所示:

图4-1最初运行界面

(2)选择1,创建两个一元多项式,按顺序操作,录入两个一元多项式,结果如下图所示:

图4-2一元多项式创建

(3)选择2,将两个一元多项式相加,操作后结果如下图所示:

图4-3一元多项式相加

(4)选择3将两个一元多项式相减,操作后结果如下图所示:

图4-4一元多项式相减

(5)选择4将两个一元多项式相乘,操作后结果如下图所示:

图4-5一元多项式相乘

(6)选择5显示两个一元多项式,操作后结果如下图所示:

图4-6一元多项式输出

(7)选择6,销毁所创建的两个多项式,操作后结果如下图所示:

图4-7一元多项式销毁

(8)选择7,退出程序,操作后结果如下图所示:

图4-8退出程序

5结束语

  由于课程设计只有短短的两周时间,再加上原本自己编程能力并非突出,所以连这个简单的一元多项式的四则运算都令我大伤脑筋,尽管这样,还是没能完善,虽然我到处查资料,试图改写除法算法,也曾自己仿写一个除法的算法,不过都没能成功,所以说到四则运算,其实,我还只能算勉勉强强完成了三则运算,不过虽说这样,我也从中学到不少东西,我深刻认识到编程中结构化和模块化的重要性,当然也注意到很多细节问题是平时编小程序时经常疏忽的,如局部变量,外部变量等的定义与使用。

虽然这次课程设计并非做的好,但我知道这也只不过是另一次尝试,一次考验。

而且通过这次课程设计,我深知在做一件比较专业的事情的时候,没有其专业知识时绝对不可能把它做好的,也许并非这个一元多项式的四则运算难,而是自己的编程知识缺乏了点,所以一直在想我该先做什么,后来,我就去查阅了一些资料,就把目标锁定在要实现的功能上,从简单到容易,所以就构思了一下整体结构,然后开始找资料,写程序。

但不管怎样,我受益还是颇多的,起码让我认识到自身编程知识还是有些欠缺的,所以我以后会踏踏实实的走好每一步。

参考文献

[1]苏运霖.《数据结构与算法》.中南工业大学出版社,2002

[2]Shaffer.《数据结构与算法分析》(C++版).电子工业出版社,1999

[3]严蔚敏,吴伟民.《数据结构》(C语言版).清华大学出版社,2005

[4]清华大学数据结构(C语言)讲义.道客巴巴,

[5]数据结构课程设计一元多项式的运算.XX知道,

附录:

源程序代码

//程序功能:

//程序作者:

阳超

//最后修改日期:

2011-03-02

#include<

iostream>

//标准输入输出流

conio.h>

//使程序中可用键盘输入函数

stdlib.h>

//使程序中可用系统标准输出函数

usingnamespacestd;

//命名空间std内定义的所有标识符均有效

structNode

{

floatcoef;

//结点类型,系数

intexp;

//指数

};

typedefNodepolynomial;

structLNode

polynomialdata;

//链表类型

LNode*next;

typedefLNode*Link;

/*申明各功能函数*/

voidCreateLink(Link&

L,intn);

voidPrintList(LinkL);

voidPolyAdd(Link&

pc,Linkpa,Linkpb);

voidPolySubstract(Link&

voidCopyLink(Link&

pc,Linkpa);

voidPolyMultiply(Link&

intJudgeIfExpSame(Linkpa,Linke);

voidDestroyLink(Link&

L);

intCompareIfNum(inti);

/*销毁链表类型结点*/

L)//

Linkp;

p=L->

next;

while(p)

{

L->

next=p->

deletep;

p=L->

}

deleteL;

L=NULL;

/*创建含有n个链表类型结点的项,即创建一个n项多项式*/

L,intn)

if(L!

=NULL)

DestroyLink(L);

Linkp,newp;

L=newLNode;

L->

next=NULL;

(L->

data).exp=-1;

//创建头结点

p=L;

for(inti=1;

i<

=n;

i++)

newp=newLNode;

cout<

<

"

请输入第"

项的系数和指数:

endl;

系数:

;

cin>

>

(newp->

data).coef;

指数:

data).exp;

if(newp->

data.exp<

0)

{

您输入有误,指数不允许为负值!

deletenewp;

i--;

continue;

}

newp->

p=L;

data.coef==0)

系数为零,重新输入!

while((p->

next!

=NULL)&

&

((p->

next->

data).exp<

data).exp))

p=p->

//p指向指数最小的那一个

if(!

JudgeIfExpSame(L,newp))

p->

next=newp;

else

输入的该项指数与多项式中已存在的某项相同,请重新创建一个正确的多项式"

CreateLink(L,n);

//创建多项式没有成功,递归调用重新创建

break;

/*判断指数是否与多项式中已存在的某项相同*/

intJudgeIfExpSame(LinkL,Linke)

while(p!

=NULL&

(e->

data.exp!

=p->

data.exp))

if(p==NULL)

return0;

elsereturn1;

/*输出链表*/

voidPrintList(LinkL)

if(L==NULL||L->

next==NULL)

该一元多项式为空!

else

//项的系数大于0的5种情况

if((p->

data).coef>

{

data).exp==0)

(p->

//如果指数为0则直接输出系数

elseif((p->

data).coef==1&

data).exp==1)

x"

//如果系数和指数均为1,则输出x

data).exp!

=1)

x^"

//如果系数为1,指数不为1,则输出x的指数次方

data).exp==1&

data).coef!

data).coef<

//如果系数不为1,指数为1,则输出系数倍x

elsecout<

//如果系数和指数都不为1,则输出系数乘以x的指数次方

//项的系数小于0的5种情况

//如果指数为0,则直接输出系数

elseif(p->

data.coef==-1&

p->

data.exp==1)

-x"

//如果系数为-1,指数为1,则输出-x

-x^"

data.exp;

//如果系数为-1,指数不为1,则输出x的指数次方的相反数

data.coef<

//如果指数为1,则输出系数倍x

//如果指数不为1,系数不为-1,则输出系数倍x的指数次方

while(p!

0)//系数大于0时输出情况

data).exp==0)

+"

=1)

data).coef==1)

0)//系数小于0时输出情况

cout<

/*把一个链表的内容复制给另一个链表*/

pc,Linkpa)

Linkp,q,r;

pc=newLNode;

pc->

r=pc;

p=pa;

while(p->

q=newLNode;

q->

data.coef=p->

data.coef;

data.exp=p->

r->

next=q;

r=q;

/*将两个一元多项式相加*/

pc,Linkpa,Linkpb)

Linkp1,p2,p,pd;

CopyLink(p1,pa);

CopyLink(p2,pb);

p=pc;

p1=p1->

p2=p2->

while(p1!

p2!

if(p1->

p2->

data.exp)

next=p1;

p1=p1->

elseif(p1->

data.exp>

next=p2;

p2=p2->

else

p1->

data.coef=p1->

data.coef+p2->

//如果指数相同,运算时系数想加

data.coef!

=0)

pd=p1;

deletepd;

//如果系数为0,则删除该项

if(p1!

if(p2!

/*将两个多项式相减*/

Linkp,pt;

CopyLink(pt,pb);

p=pt;

(p->

data).coef=(-(p->

data).coef);

//被减的多项式前加“-”号

PolyAdd(pc,pa,pt);

//调用多项式加法运算函数

DestroyLink(pt);

//清屏函数

voidClear()

system("

pause"

);

cls"

}//让用户重新选择

/*将两个一元多项式相乘*/

Linkp1,p2,p,pd,newp,t;

p1=pa->

p2=pb->

pd=newLNode;

pd->

p=newLNode;

t=p;

while(p2)

data.coef*p2->

//系数相乘

data.exp=p1->

data.exp+p2->

//指数相加

t->

t=t->

PolyAdd(pd,pc,p);

CopyLink(pc,pd);

p2=pb->

DestroyLink(p);

DestroyLink(pd);

//菜单函数

voidMenu()

================================一元多项式的四则运算============================"

\t\t\t\t\t\t\t\t"

[1]创建要运算的两个一元多项式\t\t"

[2]将两个一元多项式相加\t\t\t"

[3]将两个一元多项式相减\t\t\t"

[4]将两个一元多项式相乘\t\t\t"

[5]显示两个一元多项式\t\t\t"

[6]销毁所创建的二个多项式\t\t"

[7]退出\t\t\t\t\t"

请选择:

//判断输入的整数是不是为1到7的数字

intCompareIfNum(inti)

if(i>

0&

8)

return0;

//返回1时出错,因为菜单中只有1~7

voidmain()

intn;

LinkL,La=NULL,Lb=NULL;

//La,Lb分别为创建的两个多项式

intchoose;

while

(1)

Menu();

//调用菜单函数

choose;

switch(choose)

case1:

请输入你要运算的第一个一元多项式的项数:

n;

if(CompareIfNum(n)==1)

您的输入有误,请重新输入……"

Clear();

CreateLink(La,n);

请输入你要运算的第二个一元多项式

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

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2