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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

《程序设计课程设计》指导书2Word下载.docx

1、实现设计中定义的所有数据类型,对每个操作写出伪码算法;对主程序和其他模块也写出伪码算法(伪码算法的详细程度为按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序);画出函数的调用关系图。3【设计功能的实现】(用C或C+描述)/说明:用C或C+实现代码设计。4【实例测试及运行结果】列出测试结果,包括输入和输出。测试数据应该完整、严格。测试分析内容包括:(1) 测试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论与分析;(2) 算法的时空分析和改进设想;(3) 经验和体会。5【实现提示】使用说明:说明如何使用该程序,列出每一步的操作步骤。附录:列出程序文件名的清单以及必要的带注释的源程序

2、。心得体会等等。二课程设计报告示例迷宫问题专业: 班级: 姓名: 学号: 完成日期: 【问题描述】编制一个求解迷宫通路的程序。以一个m*n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d 表示走到下一坐标的方向。如:对于下列数据的迷宫,输出的一条通路为:(1,1,1),(1,2,2),(2,2,2),(3,2,3),(3,1,2)【设计需求及分析】(1)以

3、二维数组MAZEM+2N+2表示迷宫,其中:MAZE0J和MAZEM+1J(0JN+1)及MAZEI0和MAZEIN+1(0IM+1)为添加的一圈障碍。数组中以元素值为0表示通路,1表示障碍。限定迷宫的大小M,N10。(2)用户以文件的形式输入迷宫的数据:文件中第一行的数据为迷宫的行数M和列数N;从第2行至第M+1行(每行N个数)为迷宫值,同一行中的两个数字之间用空白字符相隔。(3)迷宫的入口位置和出口位置可由用户随时设定。(4)若设定的迷宫存在通路,则以长方阵形式将迷宫及其通路输出到标准输出文件(即终端)上,其中,字符“#”表示障碍,字符“*”表示路径上的位置,字符“”表示“死胡同”,即曾经

4、经过但不能到达出口的位置,其余用空格符表示。若设定的迷宫不存在通路,则报告相应信息。(5)本程序只求出一条成功的通路。然而,只需要对迷宫求解的函数作小量修改,便可求得全部路径。【设计功能的实现】(用C或C+语言描述)说明:此内容由学生自己设计完成。提示:程序应包含的执行命令有:1)创建迷宫; 2)求解迷宫; 3)输出迷宫的解。概要设计示例如下:1设定栈的抽象数据类型定义为:ADT stack数据对象:D=ai|aicharset,i=1,2,n,n0数据关系:R1=|ai-1,aiD,i=2,n基本操作:InitStack(&S)操作结果:构造一个空栈S。DestroyStack(&初始条件:

5、栈S已存在。销毁栈S。ClearStack(&将S清为空栈。StackLength(&返回栈S的长度。StackEmpty(&若S为空栈,则返回TRUE,否则返回FALSE。GetTop(S,&e)若栈S不空,则以e返回栈顶元素。Push(&S,e)在栈S的栈顶插入新的栈顶元素e。Pop(&S,&删除S的栈顶元素,并以e返回其值。StackTraverse(S,visit( )从栈底到栈顶依次对S中的每个元素调用函数visit( ).ADT stack2设定迷宫的抽象数据类型为:ADT mazeD=ai,j|ai,j 、#、*,0im+1,0jn+1,m,n10R=ROW,COLROW=|ai

6、-1,j,ai,jD,i=1,,m+1,j=0,,n+1COL=|ai,j-1,ai,jD,i=0,,m+1,j=1,,n+1InitMaze(&M,a,row,col)二维数组arow+2col+2已存在,其中自第1行至第row+1行、每行中自第1列至第col+1列的元素已有值,并且以值0表示通路,以值1表示障碍。构成迷宫的字符型数组,以空白字符表示通路,以字符#表示障碍,并在迷宫四周加上一圈障碍。MazePath(&M)迷宫M已被赋值。若迷宫M中存在一条通路,则按如下规定改变迷宫M的状态:以字符“*”表示路径上的位置,字符“”表示“死胡同”;否则迷宫的状态不变。PrintMaze(M)迷宫

7、M已存在。以字符形式输出迷宫。ADT maze;3.本程序包含三个模块1)主程序模块void main( ) 初始化do接受命令;处理命令;while(命令!=“退出”);2)栈模块-实现栈抽象数据类型3)迷宫模块-实现迷宫抽象数据类型各模块之间的调用关系如下:主程序模块 迷宫模块栈模块4求解迷宫中一条通路的伪码算法:设定当前位置的初值为入口位置;若当前位置可通,则 将当前位置插入栈顶; /纳入路径 若该位置是出口位置,则结束; /求得路径存放在栈中 否则切换当前位置的东邻方块为新的当前位置;否则若栈不空且栈位置尚有其他方向未被探索,则设定新的当前位置为沿顺时针方向旋转找到的栈顶位置的下一相邻

8、块;若栈不空但栈顶位置的四周均不可通,则删去栈顶位置; /后退一步,从路径中删去该通道块, 若栈不空,则重新测试新的栈顶位置, 直到找到一个可通的相邻块或出栈至栈空;while(栈不空);栈空说明没有路径存在详细设计示例如下:1坐标位置类型typedef structint r,c; /迷宫中行、列的范围PosType;2迷宫类型 int m,n; char arrRANGERANGE; /各位置取值 ,#,或*MazeType;void InitMaze(MazeType &maze,int a,int row,int col)/按照用户输入的row行和col列的二维数组(元素值为0或1)/

9、设置迷宫的初值,包括加上边缘一圈的值bool MazePath(MazeType &maze,PosType start,PosType end)/求解迷宫maze中,从入口start到出口end的一条路径/若存在,则返回TRUE;否则返回FALSEvoid PrintMaze(MazeType maze)/将迷宫以字符型方阵的形式输出到标准输出文件上3栈类型int step; /当前位置在路径上的“序号”PosType seat; /当前的坐标位置directiveType di; /往下一坐标位置的方向ElemType; /栈的元素类型typedef struct NodeTypeElem

10、Type data;NodeType *next;NodeType,*LinkType; /结点类型,指针类型LinkType top;int size;Stack; /栈类型栈的基本操作设置如下:void InitStack(Stack &/初始化,设S为空栈(S.top=NULL)void DestroyStack(stack &/销毁栈S,并释放所占空间void ClearStack(Stack &/将S清为空栈int stackLength(Stack S)/返回栈S的长度S.sizeStatus StackEmpty(Stack S)/若S为空栈(S.top=NULL),则返回TRU

11、E;Status GetTop(Stack s,ElemType e)/若栈S不空,则以e带回栈顶元素并返回TRUE,否则返回FALSE;Status Push(Stack &S,ElemType e) /若分配空间成功,则在S的栈顶插入新的栈顶元素e,并返回TRUE,/否则栈不变,并返回FALSEStatus Pop(Stack &S,ElemType &/若栈不空,则删除S的栈顶元素并以e带回其值,且返回TRUE /否则返回FALSEvoid StackTraverse(Stack s,Status(*visit)(ElemType e)/从栈底到栈顶依次对S中的每个结点调用函数visit

12、其中部分操作的算法:S,ElemType e)/若分配空间成功,则在S的栈顶插入新的栈顶元素e,并返回TRUE;/否则栈不变,并返回FALSEif (MakeNode(p,e)p-next=s.top; s.top=p;s.size+; return TRUE;else return FALSE;/若栈不空,则删除S的栈顶元素并以e带回其值,且返回TRUE,/否则返回FALSE,且e无意义if(StackEmpty(S) return FALSE;elsep=S.top; S.top=S.top-next;e=p-date; S.size-; 4.求迷宫路径的伪码算法:Status MazeP

13、ath(MazeType maze,PosType start,PosType end)/若迷宫中存在从入口start到出口end的通道,则求得一条存入在栈中/(从栈底到栈顶为从入口到出口的路径),并返回TRUE;InitStack(S); curpos=start; /设定“当前位置”为“入口位置”curstep=1; found=FALSE; /探索第一步if (Pass(maze,curpos) /当前位置可以通过,即是未曾走到过的通道块留下足迹FootPrint(maze,curpos);e=(curstep,curpos,1);Push(S,e); /加入路径if(Same(curp

14、os,end) found=TRUE; /到达终点(出口) curpos=NextPos(curpos,1); /下一位置是当前位置的东邻 curstep+; /探索下一步 /else/ifelse /当前位置不能通过if(!StackEmpty(S) Pop(S,e); while(e.di=4&!MarkPrint(maze,e,seat); curstep-; /留下不能通过的标记,并退回一步/whileif(e.di4) e.di+; Push(S.e); /换下一个方向探索 curpos=NextPos(e.seat,e.di); /设定当前位置是该新方向上的相邻块 /ifwhile

15、(!StackEmpty(S)&found); return found;/MazePath5主函数和其他函数的伪码算法void main( ) /主程序 Initialization(); /初始化 do ReadCommand(cmd);/读入一个操作命令符 Interpret(cmd); /解释执行操作命令符 while(cmd!=q&cmd!=Q);/mainvoid Initialization() /系统初始化 clrscr();/清屏在屏幕上方显示操作命令清单: CreatMazec MazePathm PrintMazep Quitq;在屏幕下方显示操作命令提示框:/Initi

16、alizationvoid ReadCommand(char &cmd) /读入操作命令符显示键入操作命令符的提示信息; cmd=getche()while(cmdc,C,m,M,p,P,q,Q);/ReadCommandvoid Interpret(char cmd)/解释执行操作命令switch(cmd) case c,C:提示用户输入“迷宫数据的文件名filename”;从文件读入数据分别存储在rnum,cnum和二维数组a2中; InitMaze(ma,a2,rnum,cnum); / 创建迷宫 输出迷宫建立完毕的信息 break;casem,M:提示用户输入迷宫的入口from和出口

17、term的坐标位置; if(MazePath(ma,from,term)/存在路径提示用户察看迷宫;else 输出该迷宫没有从给定的入口到出口的路径的信息;break;casep,P:PrintMaze(ma): /将标记路径信息的迷宫输出到终端/switch/InterPret6函数的调用关系图反映了演示程序的层次结构:主程序Initialization ReadCommand InterPretInitMaze MazePath PrintMazeInitStack Push Pop StackEmpty StackTraverseFootPrint MarkPrint Pass Next

18、Pos Same源程序文件名清单:base.H /公用的常量和类型stkpas.H /栈类型maze.H /迷宫类型testmaze.C /主程序【实例测试及运行结果】迷宫的测试数据如下:左上角(1,1)为入口,右下角(9,8)为出口。1当入口位置为(1,1),出口位置为(9,8)时,输出数据应为:*#测试结果示例:三组测试数据和输出结果分别如下:1输入文件名为:m1.dat,其中迷宫数据为:3 20 0入口位置:1 1出口位置:求解路径后输出的迷宫:2输入文件名:m2.dat,其中迷宫数据为:3 40 0 0 0 0 0 1 1 0 0 0 03输入文件名:m3.dat,其中迷宫数据同题目中

19、的测试数据。9 8求解路径后输出的迷宫正确,并和需求分析中所列相同。4输入文件名:m4.dat,其中迷宫数据为:4 90 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 00 0 1 1 1 0 0 1 10 0 1 1 1 0 1 0 0输出信息为:此迷宫从入口到出口没有路径。【实现提示】计算机解迷宫通常用的是“穷举求解”方法,即从入口出发,顺着某一个方向进行探索,若能走通,则继续往前走;否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。假如所有可能的通路都探索到而未能到达出口,则所设定的迷宫没有通路。可以二维数组存储迷宫数据,通常设定入口点的下标为(1,1)

20、,出口点的下标为(m,n)。为处理方便起见,可在迷宫的四周加一圈障碍。对于迷宫中任一位置,均可约定有东、南、西、北四个方向可通。用户手册:(1)本程序的运行环境为DOS操作系统,执行文件为:TestMaze.exe(2)进入演示程序后,即显示文本方式的用户界面:(3)进入“产生迷宫(CreatMaze)”的命令后,即提示键入迷宫数据的文件名,结束符为“回车符”,该命令执行之后输出“迷宫已建成”。(4)进入“求迷宫路径(MazePath)” 的命令后,即提示键入入口位置(行号和列号,中间用空格分开,结束符为“回车符”)和出口位置(行号和列号,中间用空格分开,结束符为“回车符”),该命令执行之后输

21、出相应信息。若迷宫中存在路径,则执行此命令后,迷宫状态已改变,若要重复执行此命令,无论是否改变出口和入口的位置,均需重新输入迷宫数据。(5)输入“显示迷宫”的命令后,随即输出当前的迷宫,即迷宫的初始状态或求出路径之后的状态。心得体会:1本次作业比较简单,只有一个核心算法,即求迷宫的路径,所以总的调试比较顺利,只在调试MazePath算法时,遇到两个问题:其一是,起初输出的迷宫中没有加上的记号,后发现是因为在MarkPrint函数中的迷宫参数丢失“变参”的原因;其二是,由于回退时没有将curpos随之减一,致使栈中路径上的序号有错。2栈的元素中的step域没有太多用处,可以省略。3StackTr

22、averse在调试过程中很有用,它可以插入在MazePath算法中多处,以察看解迷宫过程中走的路径是否正确,但对最后的执行版本没有用。4本题中三个主要算法:InitMaze,MazePath和PrintMaze的时间复杂度均为0(m*n),本题的空间复杂度亦为0(m*n)(栈所占最大空间)5经验体会:借助DEBUG调试器和数据观察窗口,可以加快找到程序中疵点。【选作内容】(1) 编写递归形式的算法,求得迷宫中所有可能的通路;(2) 以方阵形式输出迷宫及其通路。三设计题目1 文本文件单词的检索与计数1.1【问题描述】串是非数值处理中的主要对象,如在信息检索、文本编辑、符号处理等许多领域,得到越来越广

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

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