ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:95.76KB ,
资源ID:6498247      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6498247.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(多项式的简单运算数据结构课程设计.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

多项式的简单运算数据结构课程设计.docx

1、多项式的简单运算数据结构课程设计一、课程设计目的 数据结构是计算机专业的专业基础课,是一门实践性很强的课程,学生通过理论学习, 并在完成每章后面的一些小程序后,理解了数据结构的基本概念,掌握了一些基本的编程技术, 但仅有这一方面的训练还是很不够的。全面、严格的训练,是学好该课程的一个不可缺少的组成 部分。课程设计对于提高学生用学到的书本知识解决实际问题, 培养实际工作所需要的动手能力, 对于提高以科学理论和工程上的技术,规范地开发大型、复杂、高质量的应用软件和系统软件具 有关键性作用。通过课程设计的实践,学生可以在程序设计方法、上机操作等基本技能和科学作 风方面受到比较系统和严格的训练。二、课

2、程设计要求 数据结构课程设计 则要培养、 训练学生选用合适的数据结构并运用程序设计语言 (C/C+) 编写质量高的应用程序。并建立初步评价算法程序的能力。为编译技术、操作系统、数据库及算 法设计与分析等后继课程的学习以及为应用软件特别是非数值应用软件的开发打下良好的理论 基础和实践基础 重点和难点:1.针对具体问题如何选择或设计合适的数据结构;2.如何根据一定的存储策略实现数据的存储表示;3.基于上述数据结构设计并实现完成具体要求的算法;4.对算法的时间性能进行分析。针对每一个设计题目写出1.问题分析和任务定义: 根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么?(而不是怎么做?)

3、 限制条件是什么?2.逻辑设计:对问题描述中涉及的操作对象定义相应的数据类型, 并按照以数据结构为中心的原则划分模 块,定义主程序模块和各抽象数据类型。 逻辑设计的结果应写出每个抽象数据类型的定义 ( 包 括数据结构的描述和每个基本操作的功能说明 ) ,各个主要模块的算法,并画出模块之间的 调用关系图;3.详细设计: 定义相应的存储结构并写出各函数的伪码算法。在这个过程中,要综合考虑系统功能,使得 系统结构清晰、合理、简单和易于调试,抽象数据类型的实现尽可能做到数据封装,基本操 作的规格说明尽可能明确具体。详细设计的结果是对数据结构和基本操作作出进一步的求 精,写出数据存储结构的类型定义,写出

4、函数形式的算法框架;4.程序编码: 把详细设计的结果进一步求精为程序设计语言程序。同时加入一些注解和断言,使程序中逻 辑概念清楚;5.程序调试与测试:采用自底向上,分模块进行,即先调试低层函数。能够熟练掌握调试工具的各种功能,设计测试数据确定疑点,通过修改程序来证实它或绕过它。调试正确后,认真整理源程序及其注 释,形成格式和风格良好的源程序清单和结果;三、题目是“用C语言实现一元多项式的相加相减和相乘”1.问题分析和任务定义:用单链表的结构来存储多项式的信息是合适的。首先,一元多项式是必须在运行时动态决定 创建的,单链表的动态分配内存空间能够很好的解决这个问题,从而避免了空间上浪费。其次, 对

5、于多项式的运算是以其每个节点为单位进行的,其排列可以根据多项式各个项式的指数的不 同,由高到低排列,其中对于指数相同的项进行系数的归并,是加减法的运算基础。2.逻辑设计:一元多项式的每个项都有 2 个重要数据域 , 一是 系数 二是 指数 , 由于考虑到用链表的存储 结构故而还要设计下一个节点的指针域 , 从而节点的结构体就这样形成了。在创建链表时,为了便于对新开辟的节点进行赋值 ,所以在内存中开辟float 系数,int 指数的暂存单元,它们连续从终端接受数据,并且覆盖上一次的数据,从而保证了输入的连续性。链表在创建过程中以什么作为结束链表的创建的标志?这很重要,考虑到系数为 0 ,该节点就

6、没有意义,故而链表结束创建的标志 是 0 0 ,这样的节点会在插入的过程中自动删除。3.详细设计:定义节点typedef struct node / 定义节点类型float coef;int expn;struct node * next;PLOY;创建链表void insert(PLOY *head,PLOY *inpt) ;PLOY*creat(char ch) ; /char ch 中的 ch 则是多项式的字符标志,如 f,g 等,传入字符后, 接下来就为其函数内的暂存单元赋数值,接着将创建的节点,调用 insert 函数,将节点插入链表,继而返回链表的头指针输出链表void print

7、(PLOY *fun) / 此函数是根据实际的输出格式,对链表的信息进行加工后输出,由 于考虑到如果系数为正,直接输出就会缺少 +号,而如果该系数为正且系链表的第一项就省略,另外就是,如果系数的绝对值为 1 ,就可以省略系数 1 , 直接输出符号 链表的加操作PLOY *addPLOY(PLOY *head,PLOY *pre)/ 多项式相加,此原理就是将其中的一条链表的各个项, 都用一个结构体单元拷贝后,调用 insert 函数直接插入另外一条链表,从而返回该链表链表的减操作PLOY*minusPLOY(PLOY*head,PLOY *pre)/ 多项式相减, 原理与加法相似, 但是由于设计

8、到 号,在拷贝每个结构体单元后必须,在系数上加 链表的乘操作PLOY *byPLOY(PLOY *head1,PLOY *head2)/ 多项式相乘,先从其中一个链表的第一项开始,依 次去乘以另一个链表的每一项,并开辟新链表,插入每一项,直到全部乘完4.程序编码:#includeusing namespace std;typedef struct node / 定义节点类型 float coef;int expn;struct node * next;PLOY;void start() / 用户选择界面 couttt=endl; couttt 两个一元多项式的相加 / 相减,相乘 :endl;

9、couttt=endl; couttt 请选择操作 :endl;couttt0. 退出 endl;couttt1. 两个一元多项式相加 endl; couttt2. 两个一元多项式相乘 endl;couttt3. 两个一元多项式相减 endl; couttt=next=NULL) pre-next=inpt; / 如果只有头结点 ,就将待插入的节点,接上else now=pre-next; / 否则将 now 指针指向第一个节点while(signal=0)指数小,往后插下一个节点没有if(inpt-expnexpn)/if(now-next=NULL) /now-next=inpt;sign

10、al=1;else pre=now;now=pre-next;如果发现比现在的链节大了就插入到这个连接的前else if(inpt-expnnow-expn)/ 面inpt-next=now; pre-next=inpt; signal=1;elsenow-coef=now-coef+inpt-coef; / 系数相加 signal=1;delete inpt;/ 释放 插入节点 if(now-coef=0) / 系数等于 0 pre-next=now-next; / 删除该节点delete now;PLOY *creat(char ch) / 创建链表PLOY *head,*inpt;flo

11、at x;int y; / 系数及指数的暂存单元head=new PLOY; / 创建链表头 head-next=NULL; / 初始化链表)endl;cout 请输入一元多项式 chxy; / 给暂存单元赋值while(x!=0)inpt=new PLOY; inpt-coef=x; inpt-expn=y;inpt-next=NULL; / 以暂存单元的数值来创建一个节点insert(head,inpt);/ 将该节点插入链表中cout 请输入一元多项式 ch 的下一项 :( 以 0 0 结束! )xy; / 给下一个节点的暂存单元赋值return head;PLOY *addPLOY(P

12、LOY *head,PLOY *pre)/ PLOY *inpt;int flag=0;while(flag=0)if(pre-next=NULL)flag=1;/ 当指向空时跳出循环 elsepre=pre-next;inpt=new PLOY;/ 创建新链节 inpt-coef=pre-coef; inpt-expn=pre-expn; inpt-next=NULL; insert(head,inpt);/ 把当前 g(x) 的节点插入到 y(x) 中 return head;PLOY *minusPLOY(PLOY *head,PLOY *pre)/ PLOY *inpt;int fla

13、g=0;while(flag=0)if(pre-next=NULL)flag=1;/ 当指向空时跳出循环elsepre=pre-next;多项式相加多项式相减inpt=new PLOY;/ 创建新链节 inpt-coef=-pre-coef;inpt-expn=pre-expn;inpt-next=NULL;insert(head,inpt);/ 否则把当前 g(x) 的节点插入到 y(x) 中 return head;/ 多项式相乘PLOY *byPLOY(PLOY *head1,PLOY *head2) PLOY *inpt,*res,*pre;int flag=0;res=new PLO

14、Y;res-next=NULL; / 初始化存放结果的链表head1=head1-next;pre=head2;while(flag=0)if(pre-next=NULL)pre=head2;/ 当现在指向空时跳出循环 head1=head1-next;continue;if(head1=NULL)flag=1;/ 当现在指向空时跳出循环 continue;pre=pre-next;inpt=new PLOY;/ 创建新链节 inpt-coef=pre-coef*head1-coef;inpt-expn=pre-expn+head1-expn;inpt-next=NULL;insert(res

15、,inpt);/ 把当前 g(x) 的链节插入到 y(x) 中 return res; void print(PLOY *fun)/ 输出多项式PLOY *printing; / 打印指针int flag=0; / 打印完成的标志printing=fun-next;/ 给打印指针初始化 , 从第 1 个节点开始if(fun-next=NULL)cout0coef0 & fun-next!=printing) / 如果打印项不是第 1 项 , 且系数大于 0printf(+); / 先打印 + 号 , 因为正数不带 + 号if(printing-coef!=1&printing-coef!=-1

16、)/ 系数非 1 或 -1 的普通情况printf(%f,printing-coef);if(printing-expn=1)printf(X);elseif(printing-expn!=0)prin tf(XA%d,pri nti ng-exp n);else / 系数为 1 或者 -1 的情况if(printing-coef=1)if(!printing-expn) printf(1);else if(printing-expn=1) printf(X);elseprin tf(XA%d,pri ntin g-exp n);if(printing-coef=-1)if(!printing

17、-expn) printf(-1); else if(printing-expn=1) printf(-X); else printf(-XA%d,printing-expn);if(printing-next=NULL) flag=1;elseprinting=printing-next;coutendl; void main()PLOY *f,*g;int sign=-1;/ 设置标志start();coutsign;switch(sign)case 0:break;/ 退出case 1:endl;coutn 你选择的操作是多项式相加 f=creat(f);/ 输入多项式 f(x) cou

18、tf(x)=;print(f);g=creat(g);/ 输入多项式 g(x)coutg(x)=;print(g);coutF(x)=f(x)+g(x)=; f=addPLOY(f,g);/ 两个多项式相加 print(f);sign=-1;/ 复位标志start();/ 回复用户选择界面 break;case 2:cout 你选择的操作是多项式相乘 f=creat(f);/ 输入多项式 f(x) coutf(x)=;print(f);g=creat(g);/ 输入多项式 g(x) coutg(x)=;print(g);coutF(x)=f(x)*g(x)=; f=byPLOY(f,g);/

19、两个多项式相乘 print(f);sign=-1;/ 复位标志start();/ 回复用户选择界面 break;case 3:cout 你选择的操作是多项式相减 f=creat(f);/ 输入多项式 f(x) coutf(x)=;print(f);g=creat(g);/ 输入多项式 g(x) coutg(x)=;:endl;:endl;print(g);coutF(x)=f(x)-g(x)二;f=mi nusPLOY(f,g); 两个多项式相减prin t(f);sig n=-1; 复位标志start(); 回复用户选择界面break;default:cout输入有误!请重新选择操作!忌矗入

20、一亍亡割顼心白勺下一顼=2-U 结康! P|T 1 - ldtJie,tit,0H r -总.tJtJidiJtitjK 亠-1萨镜入一尢自工页:乂 榕式畀 疾吉攵扌以a 结耒! a 皆缶入一尹;宰珈竝的 卜一换=咲8 a 结車! kf*T4fi?.A_“”,宰丄页:代口的 卜一一两=乂片0 紿审! n aLcm 4 _ 二:f *H k _ nnnemK A4两亍 开哥工页#的相如”相 嫌 才口年瞿婀髀眇&吉籀人一兀毎项式a 3 5,呼输入一元參顼戎的下一项乂叹0 0纪東! 请辐入一元參工页式的下一顼y以0 结束! M 0tcseGifi - RRflHRXAA *23 - ARRF)RRE

21、5诒输入一k多项式rr=u檢式足.毎数扌抒敕;1?Ab 0结束!b bh晴输人一元辜H页尹暫旳下一丄页Y以厲負束! 揺诲入一元务项式n的下一顶江以9 0 结束! A冃0fr -5 . ndnfdM&E . HRRRnX-6lr -f -2B(9.0UtdHUK-71 *115 . UU U00 K VC3 nA36 . B00UU0K12 112BU -一两不二完芸議菽鬲祐乔;藕蠢 厂需55厂请选擇探(仁 唾萸 _ _ 、 :L_ 两丁一匹垒;一. 审个一匹秦藝总:芫垂豔癮3 ”两个一兀峯顼式两彳-一亓狷页式的相力U”相减,相汞=一一目目J-1 -1 _ 连以 HHH _ -一 吩凳壬 操 一 军更人 “ i-J-LJ- H 磴曲两两一 0 i W 3 _四、总结程序=算法+数据结构;通过本次的 C+数据结构的实习,使我对于这句话的理解更加深刻,数据结构就像是建立一个数学模型,将现实世界的各种事物及现实问题抽象出来,并加以表示, 使计算机能够按照人类的意愿,进行运算。而只有模型建立得合适,才能够简化计算。从而设计 出高效,稳定的好程序。以上便是我对此次实习的最大理解。五、参考文献:1王红梅,胡明,王涛编著.数据结构(C+版).北京.清华大学出版社,20072王晓东编著 . 数据结构 . 北京 . 科学出版社 ,20023郑莉等编著.C+程序设计教程.北京机械工业出版社,2001

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

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