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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

程序与算法综合设计课程设计指导书.docx

1、程序与算法综合设计课程设计指导书数据结构与算法综合设计课程设计指导书合肥工业大学计算机与信息学院2014年6月一、概述课程设计是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的、必不可少的一个教学环节。通常,课程设计中的问题比平时的习题复杂的多,也更接近实际。课程设计着眼于原理与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,培养软件工作所需要的动手能力;另一方面,能使书上的知识变“活”,起到深化理解和灵活掌握教学内容的目的。平时的习题较偏重于如何编写功能单一的“小”算法,局限于一个或两个知识点,而课程设计题是软件设计的综合训练,包括问题分析,总体结构设计,用户界面设

2、计、程序设计基本技能和技巧,多人合作,以至一整套软件工作规范的训练和科学作风的培养。此外,还有很重要的一点是:计算机是比任何教师更严厉的检查者。为达到上述目的,使学生更好地掌握程序设计的基本方法和C+语言的应用,本课程安排了课程设计环节,提供了各类题目供学生选择。每个设计题采取了统一的格式,由问题描述、基本要求、测试数据、实现提示和选做内容等五个部分组成。问题描述旨在为学生建立问题提出的背景,指明问题“是什么”。基本要求则对问题进一步求精,划出问题的边界,指出具体的参量或前提条件,并规定该题的最低限度要求。测试数据部分旨在为检查学生上机作业提供方便。在实现提示部分,对实现中的难点及其解法思路等

3、问题作了简要提示,提示的实现方法未必是最好的,学生不应拘泥与此,而应努力设计和开发更好的方法和结构。选做部分向那些尚有余力的读者提出了更高的要求,同时也能开拓其它读者的思路,在完成基本要求时就力求避免就事论事的不良思想方法,尽可能寻求具有普遍意义的解法,使得程序结构合理,容易修改、扩充和重用。二、总体要求1系统分析与系统设计“分析就是在采取行动之前,对问题的研究”(Demarco,1978)。系统分析在软件开发过程中是非常重要的,其任务就是通过对问题本身的研究,产生一个系统需要做什么的规范的、一致的和可行的需求说明。在此基础上,确定系统中所需考虑的类(对象)、类之间的关系、本系统中各个类所涉及

4、的属性及针对这些属性的操作。类及类之间的关系可用类图来表示,对象之间的消息传递可用箭头表示,另外一些重要的操作应给出规格说明。2详细设计与编码对类中的属性和操作从实现的角度(如可扩充、在派生类中能否直接使用或只需少量修改、访问的效率和方便性等)进一步考察;对类中的操作(即方法)进一步求精:用if、while、for和赋值语句加上自然语言写出算法框架;同时考虑能否使用已有类库(包括直接使用或通过派生)以减少编程的工作量和提高程序的可靠性。编码,即程序设计,是对详细设计的结果的进一步求精,用面向对象语言(如C+)表达出来。在充分理解和把握语言运行机制的基础上,编写出正确的、清晰的、易读易改和高效率

5、的程序。另外,在标识符的命名、代码的长度(一个方法长度一般不超过40行,否则应划分为两个或多个方法)、程序书写的风格(如缩进格式、空格(空行)的应用、注释等)方面也应注意,遵循统一的规范。3上机调试和测试上机时要带一本面向对象语言的教材,若有开发环境的用户指南(手册)及类库(库函数)手册则更好。应仔细阅读程序编译和连接时的错误信息(通常是英文的),弄清其确切含义,提高调试效率。要学习并掌握开发环境所提供的调试工具。经过调试,能够运行的的程序并非就是一个正确的程序。实际上,在上机之前,就应根据系统的需求设计相应的测试数据集,特别是一些异常情况的处理(如用户输入数据未按指定格式、数据极大或极小时程

6、序如何处理等一些极端的情况)。4课程设计报告课程设计报告的内容及要求:(1)需求和规格说明描述问题,简述题目要解决的问题是什么?规定软件做什么。原题条件不足时补全(2)设计1)设计思想:程序结构(如类图),重要的数据结构。主要算法思想(文字描述,不要画框图)2)设计表示:类名及其作用,类中数据成员名称及作用,类中成员函数原型及其功能,可以用表格形式表达。3)实现注释:各项要求的实现程度、在完成基本要求的基础上还实现了什么功能?4)详细设计表示:主要算法的框架及实现此算法的成员函数接口。(3)用户手册即使用说明(包括数据输入时的格式要求)。(4)调试及测试调试过程中遇到的主要问题是如何解决的;对

7、设计和编码的回顾讨论和分析;程序运行的时空效率分析;测试数据集;运行实例;改进设想;经验和体会等。(5)附录1)源程序清单:打印文本和磁盘文件,磁盘文件是必须的。源程序要加注释,除原有注释外再用钢笔加一些必要的注释和断言。2)测试数据:即列出测试数据集3)运行结果:上面测试数据输入后程序运行的结果注意事项:以上要求为一般的要求,针对具体问题和具体的开发过程,某些方面可以做适当的增减。各种文档资料要在程序开发过程中逐渐形成,而不是最后补写(但不排斥最后誉清)。各种文档要以统一格式的稿纸用钢笔书写,也可录入计算机用Word及其它文字编辑软件排版后打印输出。三、课程设计示例封面: 课程设计报告设计题

8、目:小型公司人员信息管理学生姓名:专 业:班 级:学 号:指导教师:完成日期:合肥工业大学计算机与信息学院(1) 需求和规格说明某小型公司,主要有四类人员:经理、技术人员、销售经理和推销员。要求存储这些人员的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息。人员编号基数为1000,每输入一个人员的信息,编号顺序加1。程序要对所有人员有提升级别的功能。为简单起见,所有人员的初始级别均为1级,然后进行升级,经理升为4级,技术人员和销售经理升为3级,推销员仍为1级。月薪计算办法是:经理拿固定月薪8000元;技术人员按每小时100元领取月薪;推销员的月薪按该推销员当月销售额的4%提成;销售经理既

9、拿固定月薪也领取销售提成,固定月薪为5000元,销售提成为所管辖部门当月销售总额的5。(2) 设计根据上述需求,设计一个基类employee,然后派生出technician(技术人员)类、manager(经理)类和salesman(推销员)类。由于销售经理(salesmanager)既是经理又是销售人员,兼具两类人员的特点,因此同时继承manager和salesman两个类。在基类中,除了定义构造函数和析构函数以外,还应统一定义对各类人员信息都应有的操作,这样可以规范各派生类的基本行为。但是各类人员的月薪计算方法不同,不能在基类employee中统一定义计算方法。各类人员信息的显示内容也不同,

10、同样不能在基类中统一定义显示方法。因此,在employee类中用纯虚函数的方式定义了计算月薪函数pay()和显示信息函数displayStatus(),然后在派生类中再根据各自的同名函数实现具体的功能。由于salesmanager的两个基类又有公共基类employee,为避免二义性,这里将employee类设计为虚基类。、系统类图salesmanagervirtual void pay();vitual void displayStatus();salesman float CommRate; float sales; virtual void pay(); vitual void displ

11、ayStatus();manager float monthlyPay virtual void pay(); vitual void displayStatus();technician float hourlyRate int workHours virtual void pay(); vitual void displayStatus();employee char *name int individualEmpNo; int grade; float accumPay; static int employeeNo; virtual void pay(); void promote(in

12、t); vitual void displayStatus();属性和方法定义类名成员类别类型成员名描述employee属性char *name雇员姓名intindividualEmpNo个人编号intgrade级别floataccumPay月薪总额intemployeeNo本公司雇员编号目前最大值方法voidpay()计算月薪函数(为纯虚函数)voidpromote(int)升级函数voidDisplayStatus()显示人员信息(为纯虚函数)类名成员类别类型成员名描述technician属性floathourlyRate每小时酬金intworkHours当月工作时数方法voidpay()

13、accumPay=hourlyRate*workHoursvoidDisplayStatus()显示技术人员信息manager属性floatmonthlyPay固定月薪数方法voidpay()AccumPay=monthlyPayvoidDisplayStatus()显示经理信息salesman属性floatCommRate按销售额提取酬金百分比floatsales当月销售额方法voidpay()accumPay=sales*CommRatevoidDisplayStatus()显示推销员信息salesmanager属性方法voidpay()accumPay=monthlyPay+CommRa

14、te*salesvoidDisplayStatus()显示销售经理信息(3) 用户手册程序运行时,首先提示输入雇员姓名。对于经理直接输出其工资及其它信息;对于技术人员,程序提示输入其本月工作时数,然后输出其工资及其它信息;对于推销员,程序提示输入其本月销售额,然后输出其工资及其它信息;对于销售经理,程序提示输入其管辖部门本月销售总额,然后输出其工资及其它信息。(4) 调试及测试由于公司每增加一个雇员,无论他(她)是哪一类人员,其编号均是顺序加1,也就是employee类的所有派生类对象创建时,都要访问同一个employeeNo,因此将employeeNo定义为静态数据成员。运行实例:pleas

15、e input employees name: zhangplease input employees name: wangplease input employees name: Liplease input employees name: zhaoinput zhang the workHours of this month: 56Technician: zhang No: 1001 month salary: 5600Technician: zhang No: 1001 grade: 3 this month salary: 5600Manager: wang No: 1002 mont

16、h salary: 8000Manager: wang No: 1002 grade: 4 this month salary: 8000input Li the sales of this month: 47900Salesman: Li No: 1003 month salary: 1916Salesman: Li No: 1003 grade: 1 this month salary: 1916input zhao the total sales of the department of this month: 123654salesman: zhao No: 1004 month sa

17、lary: 5618.27salesmanager: zhao No: 1004 grade: 3 this month salary: 5618.27(5)进一步改进(1)目前程序中,经理月薪,技术人员的小时酬金和销售人员的销售额提成比例均是固定的,这不适应不同公司的需要,可考虑用带参数的构造函数来解决。(2)销售经理月薪计算中,要输入其管辖部门当月销售总额。实际上,这可以通过将本部门所有推销员销售额相加而得到。可以考虑在推销员类中增加所属部门等属性来完成这方面的功能。(6)附录源程序四、课程设计题目题1:求字符串之间距离目的:字符串是一种基础且广泛使用的数据结构,与字符串相关的题目既可以考

18、察基本程序设计能力和技巧,也可以考查较强算法设计能力。要求:设有字符串X,称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为“abcbcd”,则字符串“abcbcd”,“abcbcd”和“abcbcd”都是X的扩展串,这里“”代表空格字符。 如果A1是字符串A的扩展串,B1是字符串B的扩展串,A1与B1具有相同的长度,那么定义字符串A1与B1的距离为相应位置上的字符的距离总和,而两个非空格字符的距离定义为它们的ASCII码的差的绝对值,而空格字符与其它任意字符之间的距离为已知的定值K,空格字符与空格字符的距离为0。在字符串A、B的所有扩展串中,必定存在两个等长的扩展串

19、A1、B1,使得A1与B1之间的距离达到最小,将这一距离定义为字符串A、B的距离。请编写程序,求出字符串A、B的距离。题2:后缀表达式计算器目的:后缀表达式不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则,如:2 1 + 3 *,即(2 + 1) * 3. 通过本课程设计,应使学生掌握后缀表达式的特点、栈的基本方法和基本原理,培养学生运用语言编程及调试的能力,运用数据结构解决简单的实际问题的能力,为后续计算机专业课程的学习打下坚实的基础。要求:实现一个简单的后缀表达式计算器。假定表达式里的基本数值为实数,可用的运算符包括+,-,

20、*,/,,其中的 表示求幂运算。1) 假定输入表达式里的数和运算符之间都有空格,这样可以简化输入的处理;2) 输入的算术表达式以分号为结束符。计算器应该能输入并计算一系列表达式,遇到一行的第一个字符就是分号时程序结束。 3)上题的计算器增加一元函数功能,允许表达式里写sin, cos, tan, log(自然对数)等函数,还可以考虑加入自定义的其他数学函数。题3:两个小游戏目的:很多精妙的数学理论往往都以有趣的游戏形式表现出来,正是这些有趣的小游戏使得高深的数学理论被广泛的传播和接受。通过编程实现这些“数学游戏”可以提高学生的编程技巧和算法设计能力,提高解决实际问题的能力。要求:(1)猜数字(

21、文曲星游戏)电脑随机生成一个09999之间的整数,若为23,则记为0023。玩家去猜,电脑将对玩家的答案做个评价,然后玩家再按电脑的评价重新猜,一共8次机会,猜对为赢。比如:电脑随机生成7859,若玩家第一次输入:1234,程序返回0A0B,A代表数字和位置都猜对,B代表数字猜对,但位置不对。若玩家第二次输入:5678,则返回0A2B,因为78都是原整数中的,但是位置不对。若玩家第三次输入:0896,则返回1A1B依次,直至玩家输入7859,返回4A0B并终止程序。记住,只有8次机会哦。(2)生命游戏(经典游戏,实现起来不难,正因为实现简单却变化繁复所以才成为经典)我们可以把计算机中的宇宙想象

22、成是一堆方格子构成的封闭空间,尺寸为N的空间就有N*N个格子。而每一个格子都可以看成是一个生命体,每个生命都有生和死两种状态,如果该格子生就显示蓝色,死则显示白色。每一个格子旁边都有邻居格子存在,如果我们把3*3的9个格子构成的正方形看成一个基本单位的话,那么这个正方形中心的格子的邻居就是它旁边的8个格子。 每个格子的生死遵循下面的原则: 1) 如果一个细胞周围有3个细胞为生(一个细胞周围共有8个细胞),则该细胞为生(即该细胞若原先为死,则转为生,若原先为生,则保持不变) 。 2) 如果一个细胞周围有2个细胞为生,则该细胞的生死状态保持不变; 3) 在其它情况下,该细胞为死(即该细胞若原先为生

23、,则转为死,若原先为死,则保持不变设定图像中每个像素的初始状态后依据上述的游戏规则演绎生命的变化,由于初始状态和迭代次数不同,将会得到令人叹服的优美图案)。题4:二叉树结点染色问题目的:二叉树是常用的重要非线性数据结构,在客观世界中有着广泛的应用。通过本题可以加深对于二叉树这一数据结构的理解。掌握二叉树的存储结构及各种操作。要求:一棵二叉树可以按照如下规则表示成一个由0、1、2组成的字符序列,我们称之为“二叉树序列S”:例如,图1所表示的二叉树可以用二叉树序列S=21200110来表示。图1 二叉树序列示意图任务是要对一棵二叉树的节点进行染色。每个节点可以被染成红色、绿色或蓝色。并且,一个节点

24、与其子节点的颜色必须不同,如果该节点有两个子节点,那么这两个子节点的颜色也必须不相同。给定一棵二叉树的二叉树序列,请求出这棵树中最多和最少有多少个点能够被染成绿色。题5:打印机任务队列目的:通过本课程设计,应使学生掌握队列的基本方法和基本原理,培养学生运用语言编程及调试的能力,运用数据结构解决简单的实际问题的能力,为后续计算机专业课程的学习打下坚实的基础。要求:打印机的打印队列中,每一个打印任务都有一个优先级,为19的一个整数(9的优先级最高,1的优先级最低),打印按如下方法进行。(1)取出打印队列中队首的打印任务J;(2)如果打印队列中存在优先级高于J的打印任务,则将J移动到打印队列的队尾;

25、否则,打印J.现在的问题是,要确定你要打印的文件何时打印完毕。给定当前打印队列(一个优先级队列)和你的打印任务在当前打印队列中的位置,确定你的打印任务完成时需要多长时间。为了简化问题,假定没有新的打印任务加入到打印队列中;并且,假定完成任何一个打印任务均需要1min时间,向打印队列中加入一个打印任务或从打印队列中移除一个打印任务不需要时间。例如,当前打印队列为“1 1 9 1 1 1”且你的打印任务在队首时,需要5min。题6: 题目:约瑟夫双向生死游戏是在约瑟夫生者死者游戏的基础上,正向计数后反向计数,然后再正向计数。具体描述如下:30(NumofPeople)个旅客同乘一条船,因为严重超载

26、,加上风高浪大,危险万分;因此船长告诉乘客,只有将全船一半(NumofKilled)的旅客投入海中,其余人才能幸免遇难。无奈,大家只得同意这种办法,并议定30个人围成一圈,由第一个人开始,顺时针依次报数,数到第9(ForwardCount)人,便把他投入大海中,然后从他的下一个人数起,逆时针数到第5(ReverseCount)人,将他投入大海,然后从他逆时针的下一个人数起,顺时针数到第9人,再将他投入大海,如此循环,直到剩下15个乘客为止。问哪些位置是将被扔下大海的位置。要求:1 分别采用链表和顺序表两种结构实现该算法。2 对比分析上述两种方法的性能优缺点。题7:求解布尔表达式目的:本课程设计

27、是求中缀算术表达式真值问题。求中缀算术表达式值的问题是数据结构中栈的一个典型应用。通过本题,学生应掌握中缀表达式和后缀表达式的转换方法和后缀表达式求值问题。要求:已知某种类型的布尔表达式由“V”、“F”、“!”、“&”和“|”组成,其中,“V”代表真值True,“F”代表真值False,“!”代表逻辑非运算,“&”代表逻辑或运算。并且,运算符“!”、“&”和“|”的优先级为:“!”最高,“|”最低,“&”介于“!”和“|”之间。你的任务是,计算给定布尔表达式的真值。例如,布尔表达式“(V|V)&F&(F|V)”的真值为“F”.题8:谣言传播问题目的:通过本课程设计,应使学生掌握如何用图结构解决

28、实际问题的能力,加深对于图结构的理解和认识。掌握图的存储方法和关于图的经典算法。提高学生的程序设计能力。要求:股票经纪人往往对谣言很敏感,你老板希望你能找到一个好方法向他们散布谣言,从而使他在股市占有战术优势。为了达到最有效果,需要谣言传播的尽量快。不幸的是,股票经纪人只相信从他们信任的信源传播来的消息,因此,在你散布谣言之前,需要对他们的联系网进行详细考察。对于一个股票经纪人,他需要一定时间才能将信息传送给他联系人,给你这些信息,你的任务是,决定选谁作为第一个传送谣言的人,以使谣言传遍所有人的时间最短,当然,如果谣言不能传遍所有人的话,你也要给出说明。例如,假设共有3个联系人,联系人1传递信

29、息给联系人2和3所有的时间分别为4和5;联系人2传送信息给联系人1和3所有的时间分别为2和6;联系人3传送信息给联系人1和2所有的时间均为2,则选择联系人3作为第一个传送谣言的人,可以使谣言传遍所有的人时间最短,为2.(选择有向图中的一个源点,使它到其余各顶点的最短路径中最长的一条路径最短)题9:分形问题目的:递归是基本的算法思想和设计方法之一,也是数据结构重点讲授的部分,是许多算法的基础,对它们的理解和运用直接关系着其他算法的理解和应用。因此,熟练掌握递归是十分重要的。通过本题,应使学生加深对于递归方法的理解,提高运用递归解决问题的能力。要求:分形是一种具有自相似性的现象,在分形中,每一组成

30、部分都在特征上和整体相似,只不过仅仅是缩小了一些而已,一种盒子分形定义如下:(1)规模为1的盒子分形为X(2)规模为2的盒子分形为X XXX X(3)若用B(n - 1)表示规模为n-1的盒子分形,则规模为n的盒子分形为B(n - 1) B(n - 1)B(n - 1)B(n - 1) B(n - 1)你的任务是,输出规模为n的盒子分形。例如,规模为3的盒子分形输出如下:X X X XX XX X X XX XXX XX X X XX XX X X X题10:网络布线计算机网络要求网络中的计算机被连接起来,本问题考虑一个“线性”的网络,在这一网络中计算机被连接到一起,并且除了首尾的两台计算机只分别连接着一台计算机外,其它任意一台计算机恰连接着两台计算机。图2中用圆点表示计算机,它们的位置用直角坐标表示。网络连接的计算机之间的距离单位为英尺。图2 网络布线示意图由于很多原因,我们希望使用的电缆长度应可能地短。你的问题是去决定计算机应如何被连接以使你所使用的电缆长度最短。在设计方案施工时,电缆将埋在地下

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

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