数据结构课程设计一元多项式.docx
- 文档编号:7189974
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:18
- 大小:73.44KB
数据结构课程设计一元多项式.docx
《数据结构课程设计一元多项式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计一元多项式.docx(18页珍藏版)》请在冰豆网上搜索。
数据结构课程设计一元多项式
长沙学院
课程设计说明书
题目
一元多项式运算
系(部)
计算机科学与技术系
专业(班级)
软件工程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->expn
{
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< while(cur) { if((cur->coef)>0) { cout<<"+"; if((cur->expn! =0)&&(cur->expn! =1)) cout< elseif(cur->expn==0) cout< else cout< } if(cur->coef<0) { if((cur->expn! =0)&&(cur->expn! =1)) cout< elseif(cur->expn==0) cout< else cout< } cur=cur->next; } cout< } intcompare(node*q1,node*q2) { if(q1&&q2) { if(! q1||q1->expn>q2->expn) return1; else if(! q1||q1->expn 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; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 一元 多项式