数据结构课程设计一元多项式.docx

上传人:b****5 文档编号:7189974 上传时间:2023-01-21 格式:DOCX 页数:18 大小:73.44KB
下载 相关 举报
数据结构课程设计一元多项式.docx_第1页
第1页 / 共18页
数据结构课程设计一元多项式.docx_第2页
第2页 / 共18页
数据结构课程设计一元多项式.docx_第3页
第3页 / 共18页
数据结构课程设计一元多项式.docx_第4页
第4页 / 共18页
数据结构课程设计一元多项式.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

数据结构课程设计一元多项式.docx

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

数据结构课程设计一元多项式.docx

数据结构课程设计一元多项式

长沙学院

 

课程设计说明书

题目

一元多项式运算

系(部)

计算机科学与技术系

专业(班级)

软件工程6班

姓名

邹胤屏

学号

2010022615

指导教师

魏歌

起止日期

2011.09.06-2011.09.16

课程设计任务书

课程名称:

数据结构与算法

设计题目:

一元多项式计算问题

已知技术参数和设计要求:

问题描述:

设计一个稀疏多项式简单计算器

基本要求:

(1)输入并分别建立多项式A和B

(2)输入输出多项式,输出形式为整数序列:

n,c1,e1,c2,e2……,其中n是多项式的项数,ci和ei是第i项的系数和指数,序列按指数降序排列

(3)完成两个多项式的相加、相减,并将结果输出;

测试数据:

(1)A+BA=3x14-8x8+6x2+2B=2x10+4x8+-6x2

(2)A-BA=11x14+3x10+2x8+10x6+5B=2x14+3x8+5x6+7

(3)A+BA=x3+x1B=-x3-x1

(4)A+BA=0B=x7+x5+x3+x1

(5)A-BA=100x100+50x50+20x20+xB=10x100+10x50+10x20+x

选作内容:

(1).多项式在x=1时的运算结果

(2)求多项式A和B的乘积

设计工作量:

40课时

工作计划:

见课表

 

指导教师签名:

         日期:

        

教研室主任签名:

       日期:

        

系主任签名:

         日期:

        

 

长沙学院课程设计鉴定表

姓名

邹胤屏

学号

2010022615

专业

软件工程

班级

六班

设计题目

图书预定系统

指导教师

付细楚

指导教师意见:

 

评定等级:

教师签名:

日期:

答辩小组意见:

 

评定等级:

     答辩小组长签名:

     日期:

    

教研室意见:

 

教研室主任签名:

日期:

 

系(部)意见:

 

系主任签名:

        日期:

     

说明

课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;

 

摘要

这是我第一次接触关于数据结构的程序设计,这一次有三个可选择,而我选择了一元多次项式的计算器来作为我这次的任务。

输入多个或一个多项式后,一元多项式有两两进行相加、相减、相乘,还有把它按次幂的升或降进行排列输出。

我做的主界面很普通,按0-4来选择这些功能,如果选择没有在这个范围了,你就可以是否重新选择。

这次主要运用了链表存储结构,这样可以很方便的计算一元多项式的基本运算。

这次设计还用到了

C++和C语言的相关知识,在主函数中可以通过调用来完成运算。

 

关键字:

数据结构、C++、C语言、链表、一元多项式运算

 

目录

第1章需求分析····························································6

1.1问题描述·····························································6

1.2基本要求·····························································6

1.3测试数据····························································6

1.4选作内容····························································6

第2章系统分析···························································7

2.1功能模板设计························································7

2.1.1多项式创建··························································7

2.1.2主菜单······························································7

2.2编码································································8

第3章.运行效果图·························································9

3.1创建多项式A..B··················································9

3.2主菜单···························································9

3.3输出多项式AB··················································10

3.4多项式A+B······················································10

3.5多项式A-B······················································10

3.6多项式在X处的值···············································10

3.7退出···························································10

总结······································································11

参考文献·································································12

附录A源程代码···························································13

 

第1章.需求分析

1.1问题描述:

设计一个稀疏多项式简单计算器

1.2基本要求:

(1)输入并分别建立多项式A和B。

(2)输入输出多项式,输出形式为整数序列:

n,c1,e1,c2,e2……,

其中n是多项式的项数,ci和ei是第i项的系数和指数,序列按指数降序排列。

(3)完成两个多项式的相加、相减,并将结果输出。

1.3测试数据:

(1)A+BA=3x14-8x8+6x2+2;

B=2x10+4x8-6x2

(2)A-BA=11x14+3x10+2x8+10x6+5;

B=2x14+3x8+5x6+7

(3)A+BA=x3+x1;B=-x3-x1

(4)A+BA=0;B=x7+x5+x3+x1

(5)A-BA=100x100+50x50+20x20+x;

B=10x100+10x50+10x20+x

1.4选作内容:

(1)多项式在x=1时的运算结果;

(2)求多项式A和B的乘积

 

第二章.系统分析

2.1功能模块设计

2.1.1多项式创建

文字说明:

先输入多项式的项数,再用for循环把多项式的系数和指数一一输入,在输入的时候调用voidInsert(node*p,node*h)来进行排序(降幂)并且把相同的项数合并。

 

2.1.2主菜单

文字说明:

如图所示,选择0-4来操作系统功能.

 

2.2编码

//A*B时

while(s->next)//系数取反

{

s->coef*=(-1);

s=s->next;

}

//创建多项式中相同次幂时合并

if(!

q2->coef)//系数为0的话释放结点

{

q1->next=q2->next;

delete[]q2;

}

}

else

{//指数为新时将结点插入

p->next=q2;

q1->next=p;

}

 

第三章.运行效果图

图3.1创建多项式A..B

 

图3.2主菜单

 

图3.3输出多项式A..B

 

图3.4多项式A+B图3.5多项式A-B

 

图3..6多项式在X处的值图3.7退出

 

总结

这一次课程设计我从一开始就没有用心去做,一想到网上有,我就没有了原来做这个的心了,其实一开始我也是从网上搞了这样的一篇下来,但老师说不可以,我又重新做,我做了好久都没有做出来,后来我又把我的书,网上下载的资料看,就这样我又学到了不少知识,如果我没有去查找相应的资料有话,我是做不出来的。

也因为如此,我体会了到了凡事要自己动手,不劳而获的东西永远都不是自己的,只有经过自己的努力得到的才会属于自己。

这一次让我更加了解了链表,以前不会在输入时排序的,通过这次我了解了。

希望我能在这一次后能个更上一层楼,不再想着从别个地方来不劳而获,加油。

 

参考文献

[1]王挺,周会平,贾丽丽,徐锡山.C++程序设计[M].北京:

清华大学出版社

[2]严蔚敏,吴伟民,数据结构(C语言版)北京:

清华大学出版社

[3]李跟强,倪飞舟,钟志水,郭清溥数据结构(C++版)(第二版)习题解答用实训指导中国水利水电出版社

 

附录A源程代码

#include

structnode

{

intcoef;//系数

intexpn;//指数

node*next;

};

//

voidInsert(node*p,node*h)

{

if(p->coef==0)

delete[]p;//系数为0的话释放结点

else{

node*q1;node*q2;

q1=h;q2=h->next;

while(q2&&p->expnexpn)//查找插入位置

{

q1=q2;

q2=q2->next;

}

if(q2&&p->expn==q2->expn)//将指数相同相合并

{

q2->coef+=p->coef;

delete[]p;

if(!

q2->coef)//系数为0的话释放结点

{

q1->next=q2->next;

delete[]q2;

}

}

else

{//指数为新时将结点插入

p->next=q2;

q1->next=p;

}

}

}//Insert

//建立一个头指针为head、项数为m的一元多项式

node*createlist(node*head)

{

inti;intm;

node*p;

p=head=newnode;

head->next=NULL;

cout<<"请输入多项式的项数:

";

cin>>m;

cout<

for(i=0;i

{

p=newnode;//建立新结点以接收数据

cout<<"请输入第"<

"<

cin>>p->coef;

cin>>p->expn;

Insert(p,head);//调用Insert函数插入结点

}

returnhead;

}

voidoutprintlist(node*head)//输出多项式链表

{

node*cur=head->next->next;

cout<next->coef<<"X^"<next->expn;

while(cur)

{

if((cur->coef)>0)

{

cout<<"+";

if((cur->expn!

=0)&&(cur->expn!

=1))

cout<coef<<"X^"<expn;

elseif(cur->expn==0)

cout<coef;

else

cout<coef<<"X";

}

if(cur->coef<0)

{

if((cur->expn!

=0)&&(cur->expn!

=1))

cout<coef<<"X^"<expn;

elseif(cur->expn==0)

cout<coef;

else

cout<coef<<"X";

}

cur=cur->next;

}

cout<

}

intcompare(node*q1,node*q2)

{

if(q1&&q2)

{

if(!

q1||q1->expn>q2->expn)

return1;

else

if(!

q1||q1->expnexpn)

return-1;

else

return0;

}

else

if(!

q1&&q2)

return-1;//q1多项式已空,但q2多项式非空

else

return1;//q2多项式已空,但q1多项式非空

}

//多项式的加法A+B

node*addlist(node*q1,node*q2)

{

q1=q1->next;

q2=q2->next;

node*head,*tail,*temp;

tail=newnode;

tail->next=NULL;

head=tail;

while(q1||q2)

{

temp=newnode;

switch(compare(q1,q2))

{

case1:

{

temp->coef=q1->coef;

temp->expn=q1->expn;

q1=q1->next;

break;

}

case0:

{

temp->coef=(q1->coef)+(q2->coef);

temp->expn=q1->expn;

q1=q1->next;

q2=q2->next;

break;

}

case-1:

{

temp->coef=q2->coef;

temp->expn=q2->expn;

q2=q2->next;

break;

}

}

if(temp->coef==0)

delete[]temp;

else

{

temp->next=tail->next;

tail->next=temp;

tail=temp;

}

}

returnhead;

}

//多项式的减法A-B

node*Subtractlist(node*q1,node*q2)

{

node*s=q2;

node*s1;

if(s==NULL)

{

cout<<"这个多项式空的。

\n";

returnNULL;

}

else

{

while(s->next)//系数取反

{

s->coef*=(-1);

s=s->next;

}

}

s1=addlist(q1,s);

returns1;

}

//输入x值,计算并返回多项式的值

floatValuelist(node*head,floatx)

{

node*p;

inti;

floatsum=0,t;

for(p=head->next;p;p=p->next)

{

t=1;

for(i=p->expn;i!

=0;)

{

if(i<0){t/=x;i++;}//指数小于0,进行除法

else

{

t*=x;i--;

}//指数大于0,进行乘法

}

sum+=p->coef*t;

}

returnsum;

}//ValuePolyn

intmain()

{

intflag=0,g=0;

floatx;

node*A=NULL,*B=NULL,*pc,*pd,*pe;//定义各式的头指针,pa与pb在使用前付初值NULL

cout<

cout<<"建立多项式A\n";cout<

A=createlist(A);//建立多项式A

cout<<"建立多项式B."<

B=createlist(B);//建立多项式B

//输出菜单

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

cout<<"**"<

cout<<"*----------------------------操作提示---------------------------*"<

cout<<"**"<

cout<<"*------------------------0.退出功能系统-------------------------------*"<

cout<<"**"<

cout<<"*1.输出多项式A和B*"<

cout<<"*2.建立多项式A+B*"<

cout<<"*3.建立多项式A-B*"<

cout<<"**"<

cout<<"*------------------------4.计算多项式A在x处的值-----------------*"<

cout<<"**"<

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

while(g==0)

{

cout<<"请选择操作功能:

";

cin>>flag;

cout<

switch(flag)

{

case1:

{

cout<<"多项式A:

"<

cout<<"多项式B:

"<

cout<

break;

}

case2:

{

pc=addlist(A,B);

cout<<"多项式A+B:

"<

outprintlist(pc);

cout<

break;

}

case3:

{

pd=Subtractlist(A,B);

cout<<"多项式A-B:

"<

outprintlist(pd);

cout<

break;

}

case4:

{

cout<<"输入x的值:

x=";

cin>>x;

cout<<"输入x的值后多项式A的值是:

";

cout<

cout<

break;

}

}

if(flag==0)

{

break;

cout<

}

if(flag<0||flag>4)

{

inti=0;

cout<

cout<<"!

!

!

!

!

你输入的操作有错噢!

!

!

!

!

"<

cout<<"----------------------------"<

cout<<"*******重新输入*****---1"<

cout<<"******不重新输入****---0"<

cout<<"----------------------------"<

cout<<"请选择:

"<

cin>>i;

cout<

if(i==1)

g=0;

else

g=1;

cout<

}

}

return0;

}

 

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

当前位置:首页 > 医药卫生 > 基础医学

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

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