软件课程设计1指导书
上传者:李新社|上传时间:2015-05-07|密次下载
软件课程设计1指导书
《软件课程设计1》设计指导书
一、课程设计的目的与任务
C++是当今最流行的高级程序设计语言之一,应用十分广泛,也是一门复杂的语言,与C语言兼容,既支持结构化的程序设计方法,也支持面向对象的设计方法。
本课程设计是在完成C++程序设计教学后所进行的课程设计,是对学生C++程序设计知识的全面综合训练,把书本上学到的知识用于解决实际问题、培养软件开发工作所需的动手实践能力,包括问题分析、总体结构设计、用户界面的设计、程序设计的基本技能和技巧,以及一整套软件工作规范的训练和团体协作精神的培养。
二、课程设计内容和基本要求
1.问题分析和任务定义
对问题的描述应避开具体的算法和涉及的数据结构,它是对要完成的任务做出明确的回答。强调的是做什么,而不是怎么做。
2. 逻辑设计和数据结构的选择
为操作对象定义相应的数据结构,以面向对象的程序设计的思想方法为原则划分各个模块,定义数据的抽象数据类型。
3. 详细设计和编码
算法的具体描述和代码的书写。
4. 上机调试
源程序的输入和代码的调试
三、课程设计方式
一人一题。
四、课程设计报告
要求一份完整的设计报告,包括:需求分析、概要设计、详细设计、调试分析、测试报告等。具体内容如下:
(1) 需求分析
以无歧义的陈述说明程序设计的任务,强调的是程序要做什么?明确规定:
·输入的形式和输出、值的范围
·输出的形式
·程序所能达到的功能
·测试的数据:包括正确的输入和错误的输入及其相应的输出结果
(2) 概要设计
说明程序中用到的所有抽象数据类型的定义,主程序的流程以及各程序模块之间的层次(调用)关系。
(3) 详细设计
实现概要设计中定义所有数据类型,对每个操作具体的算法。
(4) 调试分析
内容包括:
· 调试过程中遇到的问题并且是如何解决的以及对设计实现的回顾讨论和分析 · 经验和体会等
(5) 用户使用说明
说明用户如何使用你编写的程序,详细列出每一步的操作步骤。
(6) 测试结果
列出测试结果,包括输入的数据和相应的输出数据。这里的测试数据应该完整和严格,最好多于需求分析中所列。
(7) 附录
应附上带详细注释的源程序。
五、成绩考核
上机演示和设计报告各占50%的成绩。
六、说明
下面列出该课程设计的参考题目,由于学生只学过C++语言,许多专业课程还没有学,所以题目相对较简单,指导老师可以自行出题目。学生也可以自找题目,但必须征得指导老师的同意。下列题目仅供参考(较难的题目已给出提示)。
1. 编程序,使用如下所谓的简单变量“数据平移”方法来求出Fibonacci数列的第n项(的具体项值)并显示在屏幕上(正整数n通过键盘输入):说明变量old1=1,old2=1,newItem;新的Fibonacci项newItem总是“距它最近”的前两项(old1与old2)的累加和。而后通过“old1=old2; old2=newItem;”进行所谓的“数据平移”。接着计算另一个新的Fibonacci项newItem,依次循环,直到求出数列的第n项时为止。
Fibonacci数列的计算公式如下:
fib(1) = 1;
fib(2) = 1;
fib(n) = fib(n-1) + fib(n-2); //对大于等于3的任意n
2. 编程序,循环进行如下的处理过程:由计算机生成简单的四则运算题;用户给出答案;计算机判断对错。直到用户回答说不再继续做了时结束程序。
提示:可让用户选择指定出加、减、乘、除哪一种运算题,以及出一位数还是两位数的运算题;而后通过使用“rand()%10”或“rand()%100”来获得一个0到9的一位整数随机值或得到0到99的两位整数随机值来为用户出题。还可进一步对用户所做算术题的对错次数进行记录,结束程序时给出一个某种形式的成绩。
3. 已知如下与计算圆周率
内容需要下载文档才能查看π
π/4 = 1 - 1/3 + 1/5 -1/7 + 1/9 -?
编一个程序计算
内容需要下载文档才能查看π
(1)计算200项得到的近似
内容需要下载文档才能查看π
(2)要求误差小于0.000001的
内容需要下载文档才能查看π
4. 编程序,使用所谓的数组方法来求出Fibonacci数列的第n项(的具体项值)并显示在屏幕上:说明数组f用来存放Fibonacci数列的各项之值,且仅初始化前两个元素f[0]=1,f[1]=1,而后通过f[i]=f[i-2]+f[i-1];依次计算出f[2]到f[n-1](注意f[n-1]恰为所要求出的第n项)并将该值显示在屏幕上。
5.(1) 将输入的2进制数(一个非“0”即“1”的字符串)化为10进制数。
提示:用字符数组a盛放所输入的二进制数;而后从后往前逐一计算每一位的“位权”w (2的0次方、2的1次方、...),再计算“位权”乘以“位值”并累加到一个初值为0的变量value上,最后输出该value。
(2)如何把8进制数或16进制数化为10进制数。
(3)如何把某一个k进制的数化为10进制数呢?
6. 编程序,输入正整数m,它代表一个人民币钱数(元数)。求取这样一个方案,使用最少张数的人民币纸币,凑成上述的钱数m,并输出求取结果。
注意,现在共有7种元以上面值的人民币纸币,分别为:100,50,20,10,5,2,1。
7. 用户任意输入一个年份以及该年的1月1日是星期几,而后任意指定某一天(再输入该年的任意一个月份日期),由程序计算出这一天是星期几。注意,2月份闰年为29天,非闰年为28天;可被4整除而不可被100整除的年份、或者可被400整除的年份均为闰年。 思考:利用元年元月元日(即1年1月1日)是星期一的已知事实,可对程序进行改造,让用户仅输入一个表示日期的年月日,则程序就应计算出那一天是星期几。
8. 用户任意输入一个年份以及该年的1月1日是星期几,而后再输入该年的任意一个月份,由程序负责在屏幕上按照你所设计的格式显示出这一个月的月历。
思考:利用元年元月元日(即1年1月1日)是星期一的已知事实,可对程序进行改造,让用户仅输入任意一个年份和一个月份,则程序就应按格式显示出该年那一个月的月历。
9.有12人围坐成一圈(假设他们的编号沿顺时针方向依次为1到12)。编程序,使用数组来存放各数据(人员编号),而后从1号人员开始数起(沿顺时针方向),当数到k时(其中k>1由用户通过cin输入指定),则该号人员被“淘汰出局”;接着仍沿顺时针方向从被淘汰出局者的下一人员又重新从1开始数起,数到k后,淘汰第2个人;如此继续,直到最后剩下一个人时停止。请输出最后所剩那一个人的编号,并输出淘汰过程的某种“中间结果数据”。 点评:若将人数12改为10(或其他正整数)的话,则可以对10(或其他指定个数)人的情况进行处理。
10.用户猜测藏物位置:计算机在10行10列(行号为0到9,列号为0到9)的“棋盘”的某一位置处“藏放一物件”(具体位置通过使用“rand()%10”来随机产生);用户通过输入行列号来“寻找”该物件;若没猜对时计算机要告诉用户与藏放物件的位置有多远(取整后的近似距离)。
思考:若没猜对时也可增加告诉用户藏物的方向信息;另外在猜对结束时,还可告诉用户共猜了几次。
11.编程序,让计算机来猜测用户“暗记”的某张扑克牌:计算机从一副扑克牌(54张)中任意抽出27张,摆放在不同的三行上(每行9张),用户“暗记”某张纸牌,而后告诉计算机所“暗记”的那张纸牌处于哪一行中;之后计算机再两次将纸牌重新摆放,并让用户再回答两次相同的提问(那张纸牌在重新摆放后又处在哪一行上);此时计算机会将用户所“暗记”的那张纸牌给挑出来。
例如,程序执行后的屏幕显示结果可设计为(其中的前缀a、b、c、d代表四种不同的花色):
-------------------------------------------------------------
Line 1: c-9 d-3 a-7 d-9 a-9 c-3 b-8 a-A d-7
Line 2: b-10 a-Q d-6 b-4 a-3 b-9 b-K c-A d-8
Line 3: KING2 d-A b-A a-4 a-2 b-7 d-5 c-7 a-8
-------------------------------------------------------------
Remember a card, and tell me what line it reside in(1/2/3): 3
-------------------------------------------------------------
Line 1: c-9 d-3 a-7 b-10 a-Q d-6 KING2 d-A b-A
Line 2: d-9 a-9 c-3 b-4 a-3 b-9 a-4 a-2 b-7
Line 3: b-8 a-A d-7 b-K c-A d-8 d-5 c-7 a-8
-------------------------------------------------------------
What line the card you remembered reside in now (1/2/3) : 1
-------------------------------------------------------------
Line 1: c-9 b-10 KING2 d-9 b-4 a-4 b-8 b-K d-5
Line 2: d-3 a-Q d-A a-9 a-3 a-2 a-A c-A c-7
Line 3: a-7 d-6 b-A c-3 b-9 b-7 d-7 d-8 a-8
-------------------------------------------------------------
What line the card you remembered reside in now (1/2/3) : 1
-------------------------------------------------------------
Your remembered card is : KING2
提示:
1)要从一副54张的扑克牌中任意抽出27张,可通过“rand()%54”所产生的随机值来确定。但注意,一旦随机抽走哪张,下次牌中就没有这张了。
2)程序总按照一种策略将三行纸牌重新“摆放”,而后进一步让用户进行指定。上述所谓的策略指的是,总将纸牌“一分为三”:第一次要将每一行的9张分散到不同的3行上(每行仅“剩”3张),而第二次则要将上次“确定”出的某3张进一步分散到不同的3行上(每行只“剩”1张。此时靠用户再指定一次行号则可唯一确定所“暗记”的那张纸牌)。
12. 编制具有如下原型的函数prime,用来判断整数n是否为素数:bool prime(int n); 而后编制主函数,任意输入一个大于4的偶数d,找出满足d=d1+d2的所有数对,其中要求d1与d2均为素数(通过调用prime来判断素数)。如偶数18可以分解为11+7以及13+5;而偶数80可以分解为:43+37、61+19、67+13、73+7。
提示:i与d-i的和恰为偶数d,而且只有当i与d-i均为奇数时才有可能成为所求的“数对”。
13. 编写具有如下原型的函数:int f(unsigned long x, int n, int& Lxn);
它负责将整数x的第n位(从左边数第n位,n>0)的数值放到引用Lxn之中(将作为结果返回到主调函数的对应实参变量中),并将倒数第n位(从右边数第n位,n>0)的数值作为函数结果返回去。并编制主函数对它进行调用以验证其正确性。
例如,当x=123456789,n=7时,执行语句“Rxn=f(x, n, Lxn);”将使返回的Lxn为7,并使Rxn变为3;而执行语句“Rxn=f(12345, 6, Lxn);”将使Lxn与Rxn都变为为0(超出数的“长度”即总位数时返回0)。
14. 编写具有如下函数原型的递归与非递归两种函数f,负责判断数组a的前n个元素是否从大到小完全有序了,是则返回true,否则返回false。并编制主函数对它们进行调用,以验证其正确性。
bool f(int a[], int n);
提示:
(1)非递归函数中只需逐对地判断各a[i]与a[i+1]是否都已从大到小有序排列(i = 0,1,?,n-2)。
(2)递归函数中将问题分解处理为:若n=1(即只有1个元素时)则返回true而递归出口;n>1时,若最后一对元素不顺序则返回false,否则进行递归调用(传去实参a与 n-1,去判断前n-1个元素的顺序性),并返回递归调用的结果(与前n-1个元素的是否顺序性相同)。
15. 编写具有如下函数原型的递归与非递归两种函数equ,负责判断数组a与b的前n个元素值是否按下标对应完全相同,是则返回true,否则返回false。并编制主函数对它们进行调用,以验证其正确性。
bool equ(int a[], int b[], int n);
提示:递归函数中可按如下方式来分解并处理问题,先判断最后一个元素是否相同,不同则返false;相同则看n是否等于1,是则返回true,否则进行递归调用(传去实参a、b与 n-1,去判断前n-1个元素的相等性),并返回递归调用的结果(与前n-1个元素的是否相等性相
同)。
16. 编写程序求解骑士巡游问题:在n行n列的棋盘上(如n=5),假设一位骑士(按象棋中“马走日”的行走法)从初始坐标位置(x1,y1)出发,要遍访(巡游)棋盘中的每一个位置一次。请编一个程序,为骑士求解巡游“路线图”(或告诉骑士,从某位置出发时,无法遍访整个棋盘 — 问题无解)。
当n=5时,意味着要在5行5列的棋盘的25个“点”处,按骑士行走规则,依次将1至25这25个“棋子”(数码)分别摆放到棋盘上(摆满25个位置则成功,否则失败问题无解)。
例如,当n=5且初始坐标位置定为(1,1) — 即最左上角的那个点时,如下是一种巡游“路线图”。程序执行后的输出结果为:
(x1,y1)? => (1=>5, 1=>5) : 1 1
1 6 15 10 21
14 9 20 5 16
19 2 7 22 11
8 13 24 17 4
25 18 3 12 23
提示:
(1)“棋盘”可用二维数组B表示。
(2)编制一个具有如下原型的递归函数solve,用于完成任务:从(i,j)点出发,做第k至第n*n(即n的平方)次的移动 — 将k直到n的平方这些数码按规则分别摆放到棋盘即数组B中,若成功则通过引用参数ok返回true,否则返回false。
void solve(int i, int j, int k, bool& ok);
(3)编制主函数,让用户输入作为巡游起点的初始坐标位置(x1,y1),在该处摆放“棋子”(数码)1,而后进行调用“solve(x1, y1, 2, ok);”来完成所求任务。
欲处理的初始问题为:从某点(x1,y1)出发,按所给行走规则,作24次移动,遍访棋盘中没被访问过的各点(或发现无路可走)。
可分解化简为如下两个子问题(正是形成递归函数的基础):
① 由点(x1,y1)出发,按所给行走规则作1次移动到达(g,h)(或发现无路可走);
② 从(g,h)点出发,按所给行走规则,作23次移动,遍访棋盘中没被访问过的各点(或发现无路可走)。
solve函数具体实现时,若由(i,j)点出发已“无路可走”,则将引用参数ok置为false而递归出口;否则,先“迈一步”到达(g,h)点,而后再进行递归调用:solve(g, h, k+1, ok);以实现从新点(g,h)出发,将k+1直到25这些“棋子”(数码)分别摆放到棋盘上,若成功则通过引用参数ok返回true(否则返回false)。
点评:
(1)也可编制第二种解法的主函数:将棋盘上的n平方个点依次作为巡游起点的初始坐标位置(x1,y1),判断从每一位置出发是否有解或无解(输出“OK!”或“NO!”,但并不输出“路线图”)。
(2)若更改程序中的n值(如改为4或6等),便可求解其他阶数的巡游“路线图”。
(3)可改用非递归方法设计并编写solve函数,那样的话,通常要增加一个记录摆放“棋子”信息的数组,可记录下是沿着什么方向到达了当前的什么位置(在那儿摆放了“棋子”)等,而且对上述数组可按照栈(stack)的方式来使用(栈总是采用FILO即所谓的先进后出使用方式),以便在“无路可走”的情况下,回退(回溯)到上一个位置,接着按照另外的方向去寻找其他的“行走”方法。
下载文档
热门试卷
- 2016年四川省内江市中考化学试卷
- 广西钦州市高新区2017届高三11月月考政治试卷
- 浙江省湖州市2016-2017学年高一上学期期中考试政治试卷
- 浙江省湖州市2016-2017学年高二上学期期中考试政治试卷
- 辽宁省铁岭市协作体2017届高三上学期第三次联考政治试卷
- 广西钦州市钦州港区2016-2017学年高二11月月考政治试卷
- 广西钦州市钦州港区2017届高三11月月考政治试卷
- 广西钦州市钦州港区2016-2017学年高一11月月考政治试卷
- 广西钦州市高新区2016-2017学年高二11月月考政治试卷
- 广西钦州市高新区2016-2017学年高一11月月考政治试卷
- 山东省滨州市三校2017届第一学期阶段测试初三英语试题
- 四川省成都七中2017届高三一诊模拟考试文科综合试卷
- 2017届普通高等学校招生全国统一考试模拟试题(附答案)
- 重庆市永川中学高2017级上期12月月考语文试题
- 江西宜春三中2017届高三第一学期第二次月考文科综合试题
- 内蒙古赤峰二中2017届高三上学期第三次月考英语试题
- 2017年六年级(上)数学期末考试卷
- 2017人教版小学英语三年级上期末笔试题
- 江苏省常州西藏民族中学2016-2017学年九年级思想品德第一学期第二次阶段测试试卷
- 重庆市九龙坡区七校2016-2017学年上期八年级素质测查(二)语文学科试题卷
- 江苏省无锡市钱桥中学2016年12月八年级语文阶段性测试卷
- 江苏省无锡市钱桥中学2016-2017学年七年级英语12月阶段检测试卷
- 山东省邹城市第八中学2016-2017学年八年级12月物理第4章试题(无答案)
- 【人教版】河北省2015-2016学年度九年级上期末语文试题卷(附答案)
- 四川省简阳市阳安中学2016年12月高二月考英语试卷
- 四川省成都龙泉中学高三上学期2016年12月月考试题文科综合能力测试
- 安徽省滁州中学2016—2017学年度第一学期12月月考高三英语试卷
- 山东省武城县第二中学2016.12高一年级上学期第二次月考历史试题(必修一第四、五单元)
- 福建省四地六校联考2016-2017学年上学期第三次月考高三化学试卷
- 甘肃省武威第二十三中学2016—2017学年度八年级第一学期12月月考生物试卷
网友关注
- 创意简历模板五百丁JM0177
- 高考录取分数线——国家重点大学211工程、985工程院校(2010、2009、2008年)
- [资料]大师长教师求职简历模型
- [通知/申请]私营企业登记程序
- 超复杂英文长句结构破解阅读报名通知
- [新版]大师长教师求职简历模型大全_文档下载
- 巧用邮箱追踪求职简历
- 创意简历模板五百丁JM0185A
- 创意简历模板五百丁JM0180
- [优质文档]大师长教师求职简历模型大全[1]
- 创意简历模板五百丁JM0201A
- 创意简历模板五百丁JM0182
- 创意简历模板五百丁JM0204A
- [新版]大师长教师求职简历模型大全_完整版
- 创意简历模板五百丁JM0176
- 创意简历模板五百丁JM0191A
- 创意简历模板五百丁JM0205A
- 要求删除或断开链接涉嫌网络侵权内容的通知
- 创意简历模板五百丁JM0197A
- 人事文员求职简历模板
- 创意简历模板五百丁JM0179
- 创意简历模板五百丁JM0190A
- 创意简历模板五百丁JM0178
- 创意简历模板五百丁JM0194A
- [精品]小我求职简历表格模板
- 业务文员求职简历模板
- 创意简历模板五百丁JM0202A
- 主办会计的求职简历模板
- 30种小我求职简历模型与填写技能[整理版]
- 创意简历模板五百丁JM0001Y
网友关注视频
- 第五单元 民族艺术的瑰宝_16. 形形色色的民族乐器_第一课时(岭南版六年级上册)_T3751175
- 北师大版八年级物理下册 第六章 常见的光学仪器(二)探究凸透镜成像的规律
- 外研版八年级英语下学期 Module3
- 【部编】人教版语文七年级下册《逢入京使》优质课教学视频+PPT课件+教案,辽宁省
- 冀教版小学数学二年级下册第二单元《有余数除法的整理与复习》
- 冀教版小学数学二年级下册第二单元《余数和除数的关系》
- 河南省名校课堂七年级下册英语第一课(2020年2月10日)
- 沪教版牛津小学英语(深圳用) 四年级下册 Unit 8
- 化学九年级下册全册同步 人教版 第22集 酸和碱的中和反应(一)
- 沪教版八年级下册数学练习册21.4(1)无理方程P18
- 苏科版数学七年级下册7.2《探索平行线的性质》
- 沪教版牛津小学英语(深圳用)五年级下册 Unit 1
- 冀教版英语四年级下册第二课
- 第五单元 民族艺术的瑰宝_15. 多姿多彩的民族服饰_第二课时(市一等奖)(岭南版六年级上册)_T129830
- 每天日常投篮练习第一天森哥打卡上脚 Nike PG 2 如何调整运球跳投手感?
- 六年级英语下册上海牛津版教材讲解 U1单词
- 冀教版小学数学二年级下册第二单元《有余数除法的简单应用》
- 8 随形想象_第一课时(二等奖)(沪教版二年级上册)_T3786594
- 沪教版牛津小学英语(深圳用) 四年级下册 Unit 2
- 8.对剪花样_第一课时(二等奖)(冀美版二年级上册)_T515402
- 七年级下册外研版英语M8U2reading
- 【部编】人教版语文七年级下册《过松源晨炊漆公店(其五)》优质课教学视频+PPT课件+教案,江苏省
- 二次函数求实际问题中的最值_第一课时(特等奖)(冀教版九年级下册)_T144339
- 精品·同步课程 历史 八年级 上册 第15集 近代科学技术与思想文化
- 七年级英语下册 上海牛津版 Unit5
- 冀教版小学英语四年级下册Lesson2授课视频
- 冀教版小学数学二年级下册第二周第2课时《我们的测量》宝丰街小学庞志荣
- 人教版历史八年级下册第一课《中华人民共和国成立》
- 冀教版小学英语五年级下册lesson2教学视频(2)
- 三年级英语单词记忆下册(沪教版)第一二单元复习
精品推荐
- 2016-2017学年高一语文人教版必修一+模块学业水平检测试题(含答案)
- 广西钦州市高新区2017届高三11月月考政治试卷
- 浙江省湖州市2016-2017学年高一上学期期中考试政治试卷
- 浙江省湖州市2016-2017学年高二上学期期中考试政治试卷
- 辽宁省铁岭市协作体2017届高三上学期第三次联考政治试卷
- 广西钦州市钦州港区2016-2017学年高二11月月考政治试卷
- 广西钦州市钦州港区2017届高三11月月考政治试卷
- 广西钦州市钦州港区2016-2017学年高一11月月考政治试卷
- 广西钦州市高新区2016-2017学年高二11月月考政治试卷
- 广西钦州市高新区2016-2017学年高一11月月考政治试卷
分类导航
- 互联网
- 电脑基础知识
- 计算机软件及应用
- 计算机硬件及网络
- 计算机应用/办公自动化
- .NET
- 数据结构与算法
- Java
- SEO
- C/C++资料
- linux/Unix相关
- 手机开发
- UML理论/建模
- 并行计算/云计算
- 嵌入式开发
- windows相关
- 软件工程
- 管理信息系统
- 开发文档
- 图形图像
- 网络与通信
- 网络信息安全
- 电子支付
- Labview
- matlab
- 网络资源
- Python
- Delphi/Perl
- 评测
- Flash/Flex
- CSS/Script
- 计算机原理
- PHP资料
- 数据挖掘与模式识别
- Web服务
- 数据库
- Visual Basic
- 电子商务
- 服务器
- 搜索引擎优化
- 存储
- 架构
- 行业软件
- 人工智能
- 计算机辅助设计
- 多媒体
- 软件测试
- 计算机硬件与维护
- 网站策划/UE
- 网页设计/UI
- 网吧管理