数据结构课程设计报告模板_第1页
数据结构课程设计报告模板_第2页
数据结构课程设计报告模板_第3页
数据结构课程设计报告模板_第4页
数据结构课程设计报告模板_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据结构课程设计报告模板用心整理的精品 word文档,下载即可编辑! !课程设计报告课程名称:专业:班级:姓名:学号:成绩:完成日期:年 月 日任务书题目:黑白棋系统设计内容及要求:1 .课程设计任务内容通过玩家与电脑双方的交替下棋,在一个 8行8列的方格中,进行棋子的相互交 替翻转。反复循环下棋,最后让双方的棋子填满整个方格。再根据循环遍历方格程 序,判断玩家与电脑双方的棋子数。进行大小判断,最红给出胜负的一方。并根据 y/n选项,判断是否要进行下一局的游戏。2 .课程设计要求实现黑白两色棋子的对峙开发环境:vc+6.0实现目标:(1)熟悉的运用c语言程序编写代码。(2)能够理清整个程序的运

2、行过程并绘画流程图(3) 了解如何定义局部变量和整体变量;(4)学会上机调试程序,发现问题,并解决(5)学习使用C+程序来了解游戏原理。(6)学习用文档书写程序说明精心整理,用心做精品 9摘要本文的研究工作在于利用计算机模拟人脑进行下黑白棋,计算机下棋 是人工智能领域中的一个研究热点,多年以来,随着计算机技术和人工智 能技术的不断发展,计算机下棋的水平得到了长足的进步该程序的最终胜负是由棋盘上岗双方的棋子的个数来判断的,多的一 方为胜,少的一方为负。所以该程序主要运用的战术有削弱对手行动战 术、四角优先战术、在游戏开局和中局时,程序采用削弱对手行动力战 术,即尽量减少对手能够落子的位置;在游戏

3、终局时则采用最大贪吃战 术,即尽可能多的吃掉对手的棋子;而四角优先战术则是贯穿游戏的始 终,棋盘的四角围稳定角,不会被对手吃掉,所以这里是兵家的必争之 地,在阻止对手进角的同时,自己却又要努力的进角。关键词:黑白棋编程设计1 .弓I言32 .课题分析73 .具体设计过程83.1 设计思路83.2 程序设计流程图93.3 .函数实现说明 134 .程序运行结果155 .软件使用说明196 .结论22参考文献251 .引言数据结构在计算机科学界至今没有标准的定义。个人根据各自的理解的不同而有不同的表述方法:Sartaj Sahni在他的数据结构、算法与应用一书中称:数据结构是数据对象,以及存在于该

4、对象的实例和组成实例的数据元素之间的各种联系。这些联系可以 通过定义相关的函数来给出。”他将数据对象(data object)定义为个数据对象是实 例或值的集合。Clifford A.Shaffer 在数据结构与算法分析一书中的定义是: 数 据结构是ADT (抽象数据类型Abstract Data Type)的物理实现。”Lobert L.Kruse 在数据结构与程序设计一书中,将一个数据结构的设计过程 分成抽象层、数据结构层和实现层。其中,抽象层是指抽象数据类型层,它讨论数据 的逻辑结构及其运算,数据结构层和实现层讨论一个数据结构的表示和在计算机内的 存储细节以及运算的实现。数据结构具体指同

5、一类数据元素中,各元素之间的相互关 系,包括三个组成成分,数据的逻辑结构,数据的存储结构和数据运算结构。1.1. 重要意义一般认为,一个数据结构是由数据元素依据某种逻辑联系组织起来的。对数据元 素间逻辑关系的描述称为数据的逻辑结构;数据必须在计算机内存储,数据的存储结 构是数据结构的实现形式,是其在计算机内的表示;此外讨论一个数据结构必须同时 讨论在该类数据上执行的运算才有意义。在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。许多 大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是 否选择了最优的数据结构。许多时候,确定了数据结构后,算法就容易得到了。

6、有些 时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。不论哪种情况, 选择合适的数据结构都是非常重要的。选择了数据结构,算法也随之确定,是数据而不是算法是系统构造的关键因素。 这种洞见导致了许多种软件设计方法和程序设计语言的出现,面向对象的程序设计语 言就是其中之一。1.2. 研究内容在计算机科学中,数据结构是一门研究非数值计算的程序设计问题中计算机的操作 对象(数据元素)以及它们之间的关系和运算等的学科,而且确保经过这些运算后所 得到的新结构仍然是原来的结构类型。数据结构”作为一门独立的课程在国外是从1968年才开始设立的。196孙美国 唐欧克努特教授开创了数据结构的最初体系,他

7、所著的计算机程序设计技巧第 一卷基本算法是第一本较系统地阐述数据的逻辑结构和存储结构及其操作的著 作。数据结构”在计算机科学中是一门综合性的专业基础课。数据结构是介于数学、 计算机硬件和计算机软件三者之间的一门核心课程。数据结构这一门课的内容不仅是 一般程序设计(特别是非数值性程序设计)的基础,而且是设计和实现编译程序、操 作系统、数据库系统及其他系统程序的重要基础。计算机是一门研究用计算机进行信息表示和处理的科学。这里面涉及到两个问题: 信息的表示,信息的处理。而信息的表示和组织又直接关系到处理信息的程序的效 率。随着计算机的普及,信息量的增加,信息范围的拓宽,使许多系统程序和应用程 序的规

8、模很大,结构又相当复杂。因此,为了编写出一个好”的程序,必须分析待处理的对象的特征及各对象之间存在的关系,这就是数据结构这门课所要研究的问题。 众所周知,计算机的程序是对信息进行加工处理。在大多数情况下,这些信息并不是 没有组织,信息(数据)之间往往具有重要的结构关系,这就是数据结构的内容。数 据的结构,直接影响算法的选择和效率。计算机解决一个具体问题时,大致需要经过下列几个步骤:首先要从具体问题中抽 象出一个适当的数学模型,然后设计一个解此数学模型的算法(Algorithm),最后编出程序、进行测试、调整直至得到最终解答。寻求数学模型的实质是分析问题,从中 提取操作的对象,并找出这些操作对象

9、之间含有的关系,然后用数学的语言加以描 述。计算机算法与数据的结构密切相关,算法无不依附于具体的数据结构,数据结构 直接关系到算法的选择和效率。运算是由计算机来完成,这就要设计相应的插入、删 除和修改的算法。也就是说,数据结构还需要给出每种结构类型所定义的各种运算的 算法。数据是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并由计 算机程序处理的符号的总称。数据元素是数据的基本单位,在计算机程序中通常作为 一个整体考虑。一个数据元素由若干个数据项组成。数据项是数据的不可分割的最小 单位。有两类数据元素:一类是不可分割的原子型数据元素,如:整数 5,字符N 等;另一类是由多个款项构

10、成的数据元素,其中每个款项被称为一个数据项。例如描 述一个学生的信息的数据元素可由下列6个数据项组成。其中的出生日期又可以由三个 数据项:年、月和日组成,则称“出生日期”为组合项,而其它不可分割的数据项 为原子项。关键字指的是能识别一个或多个数据元素的数据项。若能起唯一识别作 用,则称之为“主关键字,否则称之为次关键字。数据对象是性质相同的数据元素 的集合,是数据的一个子集。数据对象可以是有限的,也可以是无限的。数据处理是指对数据进行查找、插入、删除、合并、排序、统计以及简单计算等的 操作过程。在早期,计算机主要用于科学和工程计算,进入八十年代以后,计算机主 要用于数据处理。据有关统计资料表明

11、,现在计算机用于数据处理的时间比例达到 80%以上,随着时间的推移和计算机应用的进一步普及,计算机用于数据处理的时间 比例必将进一步增大。2 .课题分析编写一个黑白棋游戏的c程序,包括以下功能:初始状态:在一个8*8的棋盘中央交叉排放黑白棋子各两枚,白棋先走。(1)每个棋手下棋时,摆子的位置必须是以自己的棋子能包围住对方一个或多个棋子,被包围住的对方棋子将成为自己的棋子。包围的方向可以是上下左右以及斜线8个方向,只要能连成一线即可。(2)当轮到某一个棋手下子,但是他没有可以包围对方棋子的位置时,他必须停步,让对方走棋,直到他可以走为止。(3)当棋盘上一方的棋子为0或者下满64格,游戏结束,棋子

12、少者输。(4)当一局结束后,可以选择 y/n选择是否继续下一局游戏3 .具体设计过程3.1 设计思路程序界面应是一个二维平面图,所以数据的表示用二维数组,数组两个下标可以 表示棋盘上的位置,数组元素的值代表棋格中的状态,共有三种情况,分别是空格、 黑棋和白棋。这样给数组元素的取值设定为 0、1、2,其中0代表空格,*代表白色棋 子,0代表黑色棋子。这样程序的主要工作是接收棋手按键操作,一旦接收到回车键, 说明棋手摆子,先判断是不是有效位置,也就是能不能包围住对方棋子,如果能,便 为棋子所在的位置往上下、左右、左上、左下、右上、右下 8个方向寻找被包围住的所 有棋子(必须是连续的,中间不能有空格

13、),将这些被包围住的对方棋子都变成自己的棋子,然后对当前棋盘中的黑白棋个数进行统计并输出结果。如果没有这样的位置 可以落子,则停步,让对方走棋,重复上述步骤,直到游戏结束。3.2 程序设计流程图系统功能流程图,首先我们先初始化系统功能,定义各项函数,并初始化一些参 数变量。然后绘制棋盘。然后按 enter键进行游戏,当我们输入一个横纵坐标时,系 统会判断此坐标是否合法,若合法则落子,并翻转相应的棋子。最终判断双方的胜负 情况。如图3.1所示:图3.1程序整体流程图用心整理的精品 word文档,下载即可编辑! !图3.2为下棋流程图。首先我们进入游戏,然后由玩家先落子。先判断落子位置是否已经有棋

14、子了,若有则重新输入。若没有,再判断是否能够引起棋子的翻转,若可以则落子,将对方的棋子变成自己的棋子,反之换由对方下子。当一方走完之后,换另一方走。如下图所示:图3.2人机对战模块流程图图3.3为成绩运行流程图,当棋盘上的每一个格子都有棋子的时候,系统将遍历棋盘,然后根据棋盘上棋子的花色分别代表的是哪一方,在哪一方的成绩上+1.遍历完后,判断双方分数的大小,并输出结果。如下图所示:用心整理的精品 word文档,下载即可编辑! !3.3 .函数实现说明(1)void main()主函数功能:在主函数中,首先定义使用到的常数、全局变量、函数原型说明。盘状态用数组a88,初值为0,表示空格。函数的实

15、体部分,开始初始化图形系统,然后通过调用函数display。先画出棋盘,调用 make_move(刑computer_move()进行人机对战函数开始游戏,一旦游戏结束后,关闭图形系统,程序结束。(2)void display ()棋盘绘制函数功能:函数display。通过for循环,对棋盘界面进行了绘制用法:此函数调用方式为 void display(char boardSIZE);说明:参数是一个二维数组,size为定义的长度。值为8返回值:无int valid_moves ()有效步骤函数功能:通过此函数来判断电脑或玩家下的棋子是否是有效的。用法:此函数调用方式为 int valid_m

16、oves(char boardSIZE,intmovesSIZE,char player);说明:char boardSIZE为棋盘,int movesSIZE为玩家输入的横纵坐标,charplayer为判断的玩家为电脑还是人返回值:int(4)void make_move ()下棋函数功能:定义坐标,控制变量并通过for循环来判断翻转棋子。达到同一方向上将对方 的棋子翻转为自己的棋子。用法:此函数调用方式为 void make_move(char boardSIZE,int row,int col,charplayer)说明:int row,int col分别代表其中的横纵坐标返回值:无(5

17、)void computer_move()电脑下棋函数功能:主函数通过调用该函数,获取电脑的下棋位置。该函数分别又调用make_move();valid_moves();new_score=best_move(); 函数,以获取最佳的下棋位置用法:此函数调用方式为 void computer_move(char boardSIZE,int movesSIZE,char player);说明:int movesSIZE为玩家输入的横纵坐标,char player为判断的玩家为电脑还是人返回值:无(6)int get_score()分数获取函数的声明功能:用此函数来获取电脑和玩家的分数,以便判断最

18、终的胜负用法:此函数调用方式为(char boardSIZE,char player);说明:char boardSIZE是一个二维数组,来控制棋盘变量。char player 是代表玩家的一个参数返回值:int(7)int best_move ()功能:best_move是电脑下子最佳位置判断的一个函数,通过不断地比较,用了两次for 循环,并遍历棋盘上*的个数,来获取最佳位置。用法:此函数调用方式为 int best_move(char boardSIZE,int movesSIZE,char player);说明: 同 void computer_move()返回值:int4 .程序运行

19、结果图4.1为初始界面,当我们选择运行程序时,便会出现如下图的界面。根据上面文字的内容,我们可以了解游戏的规则。并按 enter1,进行游戏。如下图所示:F应用勒牢山e ibaiqiD? DiigheibaiqLexe玩法说明.舜筋局益持黑子,加入者持白子口psi* r、&下的位置, I邛子时,必须在稹r直、斜人方向中.至少 小了每一般白型轼本杀的时有较多子的一方获胜。,而该干与刚下的棋子间全力施,损俞方下子.如左材黑子没有地方可下,或双方皆无子可下口用你好运!请按匕nt4键,进行游戏.图4.1初始界面图图4.2为进入游戏后的首界面,下图是按ente例之后进入的游戏界面。第一局游戏时,玩家的棋

20、子用0代替,电脑的棋子用*代替。初始界面中,棋盘上便已有了在棋盘正中央的相互交叉的棋子。这是初始界面的一种情况。如下图所示:寺黑子,加入者持白子,,之后轮黄.R左键点拔兔下的 直 斜人方向中,矍督致我方照楣篇薪,而该子与刚下的棋子间全,黑子没有地方可下.)工.庖64个空格走密或双方皆无子可除 胜负拥有较多子的一方照怛请按ent”键,进行游戏.图4.2游戏首界面图图4.3为运行过程中,双方对峙的截图。在游戏过程中,轮到玩家下棋的时候,系 统会出现:输入坐标 行列 的提示,此时,我们的输入方式是第一个为数字,代表棋 盘的横坐标,第二个为字母,代表棋盘的纵坐标,中间无空格。如下图所示:e !* 一一

21、 ii9vB- 4一 输入坐标(行列;,3:0 I : I Esi r : a r a : 0 I 3 : e I精心整理,用心做精品 2971+t+i十+b+-十+i1i十 :图4.4双方对峙结果图5 .软件使用说明黑白棋是一款娱乐型的游戏,在与锻炼人的脑力和反应能力的。在本程序 中,先切换到相应的界面下,然后根据提示来完成下一步操作。在本程序中纵坐标是数字,横坐标是字母。根据坐标轴的性质来确定每一步棋 的位置。并根据与之相对应的提示来完成结果。例如:电脑无棋可走,这是一 步无效操作等。图5.1为程序进入游戏后的初始界面玩法逸明一、J嘘韩醯持卷 加入者持白子至哼2 8-.,患晶褊至余左喙矗下

22、的位置,町轮痛下二 彳嘉在必须在遂直. 斜八方向中,至少有妆我方的棋 蕊霸子版我方饵子夹杀也对方棋兀将全变为我方颜色 穗子解魂醯藕基醒下子。4胜负:拥. 祝你好运9有较多子的一方决胜.请按enter键,进行游戏.a bc d e f 9 h1: !11111Hli1H11H112:11HI1HI1ItIIi1I3:!1111H111111V114:!: 0 1 * 11 I IJ_I_|L.I|,5:1-g.-_I11uIQ1H11i#*IWiiiii6::1111II1111111117:!1111l1111I1H11JJiI IE_|_8:!11I1H111t11II1IJ|1IL1L输入

23、坐标6列3 一 .图5.1程序初始界面图下图为图5.2,是程序运行过程中的截图。当我们输入 1a是,提示我们无效,请重新输入,当输入3f是,亦是如此。此程序过程是输入不合法的过程。在做了相应的操作后,再继续操作。玩家一定要根据提示来进行下一步操作,所 以上图的正确坐标是6e。图5.2无效运行的过程 图图5.3是玩家要尽可能的使盘上的的子来变成己方的,避免不必要的损失。有是电脑会没有棋可走,你可以在继续走!且厂工、罢白笆,蜀建文件箕,把皿名计算机。8如02班 陈为国一里U.JL输巫词8gTa bc d egha1 : 0 : D 我5 x! o1 1H-f|r1-4-T-+-4-2 : 0 :

24、K:O 1 ; *;M| M1 0i i_ .JL-3 ; o ; o1*1*1*| *| 安i 0十1 1_ _j_gl4 ! 0 i D11kb,! c ! * 1 o_|_| 菱_ 1| 弟_ _|_I 0T1 1_ A5 1 o : o1 o ! * 1 o*升 TT1 1_ x6 ! o ! o1 O 1 o 1 o | M|注1 #T1 I .士?: Q : oI o o ! oI Di 1at1 14IF=fr11 1=一.,+-j-+S ! o ! o! o 1 o 1 o_ . i Oi O| w1 |tn卜睛沿棋可走.玩家走。a bc d. egh4Hr-1-/一一一一/

25、一一广,*-+1 : 0 : D:*!1*l晨1 01 1|_2 : o : *:Q ; * ; *:0-I-1 i111-J-4-4-T-4-3 : o : o!*!*i W| I 0i 1!+. -+ , -+4 ; 口 :。I O 1 * 1 o*:Q11.j-5 ! o : o! a ! * o M | 开1 注:弄T1 II_占F丁 图5.3无棋可走情况图6.结论课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实 践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程 .随着科学技术发 展的日新月异,当今计算机应用在生活中可以说得是无处不在。因此作为二十

26、一世纪 的大学来说掌握程序开发技术是十分重要的,而 C语言又是最常见,功能最强大的一 种高级语言,因此做好C语言课程设计是十分必要的。回顾起此次课程设计,至今我 们仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整半个月 的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且 学到了很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是 远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真 正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇 到问题,可以说得是困难重

27、重,这毕竟第一次做的,难免会遇到过各种各样的问题, 同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深 刻,掌握得不够牢固,比如说结构体,指针,链表通过这次课程设计之后,我们把 前面所学过的知识又重新温故了一遍。我做的是黑白棋的课程设计,虽然是很简单的一个小的程序,但对我一个初学者 来说却是一个很大的困难。更加是第一次做课程设计,所以第一天下午在机房做了一 个下午却丝毫没有进展,最主要是不知从何开始,这个时候才知道上课老师们不厌其 烦的教导是多么的宝贵,这个时候才后悔上课的时候没有认真的听讲。可是现在一切 都晚了,还好时间还算是充裕,只好拿出书本重新复习一下。特别是结构体,绘制棋盘的部分,几乎是一片空白,不知从何着手。不过经过几 大的努力,大体上把课本上的知识点看了一遍,知识点也都基本是撑握了,所以一下 一步就是开始正式的编程序了。不过毕

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论