数据结构课程设计报告纸牌游戏_第1页
数据结构课程设计报告纸牌游戏_第2页
数据结构课程设计报告纸牌游戏_第3页
数据结构课程设计报告纸牌游戏_第4页
数据结构课程设计报告纸牌游戏_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

-.z.学院学生课程设计〔论文〕题目:纸牌游戏学生:00000学号:0所在院(系):数学与计算机学院专业:网络工程班级:2012级1班指导教师:世文职称:教授2014年01月03日学院教务处制-.z.学院本科学生课程设计任务书题目纸牌游戏1、课程设计的目的通过本课程设计教学所要到达的目的是:培养学生用学到的书本知识解决实际问题的能力;培养实际工作所需要的动手能力;培养学生以科学理论和工程上能力的技术,规地开发大型、复杂、高质量的应用软件和系统软件具有关键性作用;通过课程设计的实践,学生可以在程序设计方法、上机操作等根本技能和科学作风方面受到比拟系统和严格的训练。2、课程设计的容和要求〔包括原始数据、技术要求、工作要求等〕任务:编号为1-52牌,正面向上,从第2开场,以2为基数,是2的倍数的牌翻一次,直到最后一牌;然后,从第3开场,以3为基数,是3的倍数的牌翻一次,直到最后一牌;然后…从第4开场,以4为基数,是4的倍数的牌翻一次,直到最后一牌;...再依次5的倍数的牌翻一次,6的,7的直到以52为基数的翻过,输出:这时正面向上的牌有哪些?3、主要参考文献[1]"数据构造"〔C语言版〕,严蔚敏,清华大学,2003.[2]"数据构造题集",严蔚敏,清华大学,2005.[3]"数据构造"〔C语言版〕,大有,高等教育,2004.[4]"DataStructurewithC++",WilliamFord.WilliamTopp,清华大学,2003.4、课程设计工作进度方案序号时间〔天〕容安排备注11分析设计准备周一22编程调试阶段周二至周三31编写课程设计报告周四41考核周五总计5〔天〕指导教师〔签字〕日期年月日教研室意见:年月日学生〔签字〕:承受任务时间:年月日注:任务书由指导教师填写。课程设计〔论文〕指导教师成绩评定表题目名称纸牌游戏评分工程分值得分评价涵工作表现20%01学习态度6遵守各项纪律,工作刻苦努力,具有良好的科学工作态度。02科学实践、调研7通过实验、试验、查阅文献、深入生产实践等渠道获取与课程设计有关的材料。03课题工作量7按期圆满完成规定的任务,工作量饱满。能力水平35%04综合运用知识的能力10能运用所学知识和技能去发现与解决实际问题,能正确处理实验数据,能对课题进展理论分析,得出有价值的结论。05应用文献的能力5能独立查阅相关文献和从事其他调研;能提出并较好地论述课题的实施方案;有收集、加工各种信息及获取新知识的能力。06设计〔实验〕能力,方案的设计能力5能正确设计实验方案,独立进展装置安装、调试、操作等实验工作,数据正确、可靠;研究思路清晰、完整。07计算及计算机应用能力5具有较强的数据运算与处理能力;能运用计算机进展资料搜集、加工、处理和辅助设计等。08对计算或实验结果的分析能力〔综合分析能力、技术经济分析能力〕10具有较强的数据收集、分析、处理、综合的能力。成果质量45%09插图〔或图纸〕质量、篇幅、设计〔论文〕规化程度5符合本专业相关规或规定要求;规化符合本文件第五条要求。10设计说明书〔论文〕质量30综述简练完整,有见解;立论正确,论述充分,结论严谨合理;实验正确,分析处理科学。11创新10对前人工作有改良或突破,或有独特见解。成绩指导教师评语指导教师签名:年月日-.z.摘要数据构造课程是计算机专业中必修的核心课程之一,也是一门理论性很强的一门课程,同时也是一门锻炼程序涉及能力的实践课程,"数据构造〞成为计算机程序设计的重要理论技术根底,它不仅是计算机学科的核心课程,而且已成为其它理工专业的热门选修课。主要包括线性表、树和二叉树以及图等根本类型的数据构造。数据构造是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和运算等的学科,包括数据的逻辑构造、数据的存储构造和数据的运算这三个方面的容,其中逻辑构造可分为线性构造和非线性构造;存储构造可分为顺序存储和链式存储两类,图那么属于逻辑构造中的非线性构造。广度优先搜索(BFS)用的队列一步一步完成的,从而找到的是最短路径。纸牌游戏课程设计包括纸牌信息的建立、了解其翻拍的原理、并简明阐述翻牌的具体步骤与流程、最后输出与打印翻牌结果,整个过程使学生进一步理解和掌握课堂上所学各种根本抽象数据类型的逻辑构造、存储构造和操作实现算法,以及它们在程序中的使用方法。掌握一般软件设计的根本容和设计方法,培养学生进展规化软件设计的能力。而且使学生掌握使用各种计算机资料和有关参考资料的方法,提高学生进展程序设计的根本能力。关键词:数据构造,纸牌游戏,BFS,遍历AbstractDatastructurecourseisoneofrequiredcorecurriculuminputermajor,courseisaverypractical,isalsoanexerciseprograminvolvestheabilitytopracticecurriculum,"hasbeeanimportanttheoreticalandtechnicalfoundationofputerprogramdesigndatastructure",itisnotonlythecorecourseofputerscience,andhasbeeahotelectivecourseforothersciencemajors.Mainlyincludesthebasicdatastructuretypelineartable,treeandbinarytreeandgraphoftwo.Datastructureisaresearchofnonputerprogramofnumericalcalculationdesignproblemsinoperatingtheobjectsandtheirrelationshipsandoperationsandotherdisciplines,includinglogicstructure,storagestructureanddataoperationdataofthethreeaspectsofcontent,thelogicalstructurecanbedividedintolinearandnonlinearstructures;storagestructurecanbedividedintosequentialstorageandchainstoretwo,graphbelongstononlinearstructureinthelogicalstructure.Breadthfirstsearch(BFS)withcohortpletedstepbystep,soastofindtheshortestpath.AcardgameSolitaire,curriculumdesignincludesinformationaboutitsprinciple,andexpoundstheflopremakeoftheconcretestepsandprocesses,thefinaloutputandprintflopresults,thewholeprocesstoenablestudentstounderstandandmasterthevariousbasicabstractdatatypescienceclasslogicalstructure,storagestructureandoperationoftherealizationofalgorithm,andtheirintheprocessofusingthemethod.Tomasterthebasiccontentandthegeneraldesignmethodofsoftwaredesign,trainingstudents'abilityofdesignsoftwarespecification.Andtomakethestudentsmastertheuseofvariousputerdataandmethodsforreference,toimprovethestudents'basicabilityofprogramdesign.Keywords:datastructure,cardgames,BFS,traversal-.z.目录TOC\o"1-3"\h\u30664摘要 I17123Abstract II155651前言 248801.1课题背景 28151.2课程设计目的 2238842相关技术分析 315252.1概要设计 334222.2设计原始数据的输入及输出格式 4271142.3算法流程图 684083设计与实现 7107633.1数据构造 724143.2详细设计和编码 7111413.2.1定义全局变量:7125263.2.1主要程序代码与分析如下:762313.3上机调试过程 1028505测试结果及其分析 11183986用户使用说明 18250277源代码 1813690结论 1924849参考文献 202370附录 211前言"数据构造"是软件工程专业的必修课之一,是一门综合性的专业根底课。本课程较系统地介绍了软件设计中常用的数据构造以及相应的实现算法,如线性表、栈、队列、树和二叉树,图、检索和排序等,并对性能进展分析和比拟,容非常丰富。1.1课题背景"数据构造〞旨在使学生学会分析研究数据对象的特性,学会数据的组织方法,以便选择适宜的数据逻辑构造和存储构造,以及相应的运算,把现实世界中的问题转化为计算机部的表示和处理,这是一个良好的程序设计技能训练的过程。"数据构造〞课程设计不仅可以帮助学生充分理解、稳固所学的根本概念、原理和方法,更重要的是能够针对实际问题来选择数据构造,设计相应的存储构造并加以实现,从而最终解决问题。结合数据构造所学知识,要求学生用C语言编程实现一个简单的纸牌游戏设计。1.2课程设计目的〔1〕使学生进一步理解和掌握课堂上所学各种根本抽象数据类型的逻辑构造、存储构造和操作实现算法,以及它们在程序中的使用方法。〔2〕使学生掌握软件设计的根本容和设计方法,并培养学生进展规化软件设计的能力。〔3〕使学生掌握使用各种计算机资料和有关参考资料,提高学生进展程序设计的根本能力。2相关技术分析2.1概要设计按照题目的要求,首先,应对52牌进展编号并且保存它们的编号信息,编号的类型为整型,而对于这样固定的数据,使用整型数组是最好的,因此,我们需要在程序的开场定义一共整型的数组,同时,为了方便对翻转过程的记录,在定义记录编号信息的同时,定义一个与之相对应的标记数组,数组类型为整型。该程序的核心为一个嵌套的循环,所以定义两个变量i,j作为循环条件。接着开场对变量进展初始化,首先是编号信息数组,使用for循环对数组进展1到52的赋值,代表52纸牌,然后对标记数组赋值,将数组的所有的值初始化为零,方便在接下来的循环中统计每牌的翻牌数。数据初始化完毕后,开场按照要求对纸牌进展翻转,在嵌套循环中,定义了一个全局变量Flag,值为-1,负数定义为向下,正数定义为向上,这样,翻转一次,即乘以Flag,同时,符合翻转条件时,标记数组相应的编号的纸牌翻牌次数+1。…它都要来回的翻。如果它在屡次的翻牌后,正面还向上了,那么它就是要输出的结果之一。循环完毕后,编号数组中的数据已经更新,因此对数组进展扫描,大于零的即为正面向上的纸牌,输出其编号即可,同时,输出标记数组中的值,显示每牌的翻牌记录,方便观察或者寻找规律。到此,整个题目完毕。2.2设计原始数据的输入及输出格式原始数据要求输入纸牌的根底编号,编号的输入为整型。输出的是经过规律翻转后正面向上的纸牌的编号。输入的数据信息如下:纸牌:1、2、3……、51、52。问题直观分析表:123456789101112……12√√√√√√3√√√√4√√√5√√6√√7√8√9√10√11√12√………………〔注:图中"√〞表示翻转一次。〕2.3算法流程图2.1:算法设计图开场2.1:算法设计图开场设一个一维数组card[52],并将所有变量赋初值为0,表示牌正面朝上2=>jj≤52j=>kk≤52k%j=0翻牌,如果card[k-1]为0,那么变为1;如果为1,那么变为0k++输出card数组中正面朝上的牌的序号完毕j++3设计与实现3.1数据构造按照题目要求,整个主体包括一个嵌套的循环,外循环控制从2开场每纸牌都作为基数进展翻牌,循环控制对所有纸牌进展判断,如果是当前循环中基数的倍数,那么对其进展翻转操作。具体代码如下:for(i=2;i<=52;i++) { for(j=1;j<=52;j++) { if(j%i==0) data[j-1]=data[j-1]*Flag; } }3.2详细设计和编码3.2.1定义全局变量:作为判断纸牌是否向上的依据,我们需要定义一个全局变量Flag=-1,在循环中对所有纸牌进展操作。主要程序代码与分析如下:#defineFlag-1〔考虑到最后要判断哪些纸牌是正面向上的,所以必须要有一共判断条件,因此定义一个全局变量作为正反面的判断条件。〕voidmain(){inti,j,data[52],flag[52];charm;〔在程序开场,建立了两个数组,一个存放52牌的编号,另外一个存放相应编号的纸牌的翻牌记录,便于后面对翻牌次数的输出。〕for(i=1;i<=52;i++){data[i-1]=i;〔通过for循环,向数组中录入1-52个数,作为52牌的编号,以便进展接下来的操作〕flag[i-1]=0;〔将flag数组中的相应编号纸牌的翻牌数初始化为0,在接下来的循环中,需要对翻牌次数进展统计。〕}for(i=2;i<=52;i++)〔嵌套循环的外循环,保证基数的循环。〕{for(j=1;j<=52;j++)〔嵌套循环的循环,对每纸牌进展基数的倍数条件判断〕{if(j%i==0){data[j-1]=data[j-1]*Flag;flag[j-1]++;〔翻牌一次,那么相应的标记数组中该编号的位置数值+1,即将翻牌次数记入flag数组中。〕}}}printf("最后所有正面向上的牌有:");for(i=0;i<52;i++){if(data[i]>0)〔该题目中将大于零的编号定义为正面向上的纸牌的编号〕printf("第%d牌",i+1);}printf("\n");}以上为程序主要代码的分析。在程序中,主要还包括功能界面,如下:printf("\t\n"); printf("\t\n"); printf("\t欢送进入纸牌游戏\n"); printf("\t1.查看题目\n"); printf("\t2.查看所有纸牌的翻牌次数\n"); printf("\t3.查看指定编号纸牌翻牌记录\n"); printf("\t4.查看最终正面向上的纸牌编号\n"); printf("\t5.制作人信息\n"); printf("\t0.按0键完毕\n"); printf("\t\n"); printf("\t\n");同时,整个功能实现由do-while语句和switch语句组合而成,do-while语句可以保证界面最少运行一次,switch语句保证每个功能独立实现,通过choice的输入来进入不同的功能,同时在每个小的独立功能,我都添加了独立判断是否回到主菜单的语句,如下:printf("是否回到主菜单?(Y/N):"); n=getchar(); n=getchar(); if(n=='Y')break; elseif(n=='N') choice=0; elseprintf("***********(提示:输入错误,默认为继续。)******\n");整个do-while语句的完毕条件为:choice=0,所以如果用户输入为N,那么直接将0赋值给choice,那么符合循环完毕的条件,那么直接完毕程序,如果输入为Y,那么break,继续循环,输入错误,没有对choice任何的赋值操作,即不能满足完毕条件,那么无论输入什么都默认为继续,break后继续循环。由于程序默认的将回车操作通过getchar()赋值给n,导致不能正常的实现下面的判断,而直接显示为输入错误,所以参加两个n=getchar()语句,保证第二句能够正确的实现功能,让用户自行输入条件,进展下一步的操作。在整个程序中,存在着大量的输入判断条件,如下:if(num<1&&num>52) printf("\t输入错误!\n");这两句代码就是对输入的num值进展判断,由于纸牌序号为1-52,所以不在这个围的值都为错误值,需要有一个错误信息的反应,所以需要对输入的信息进展判断,然后通过不同的值对数据进展相应的操作,这对于程序的正确运行,有着至关重要的作用。3.3上机调试过程该程序任务相比照拟简单,思路较明确。在一开场编写代码的时候,在嵌套循环中,外循环for的条件(i=2;i<=52;i++),写成〔i=1;i<=52;i++〕,导致对每个纸牌的翻转都多判断了一次,按照一开场定义的大于零的编号数为正面向上的条件,最后输出的结果正好相反,经过修改调试后,问题解决。在每个case中参加独立的判断是否回到主菜单的语句,一开场getchar〔〕总是不能正确录入,没有输入就直接运行下一个语句,在参加控制语句后经过调试发现,程序把上一个输入的回车直接默认赋值给getchar(),导致没有输入,直接进展下一个语句,后来使用了两个连续的getchar()语句,第一个getchar()语句默认为回车,但是后面一个getchar()语句可以正确的重新输入判断值,经过重新的调试,运行正常,问题解决,但是希望能找到更完善的答案。在判断是否继续输入纸牌编码的功能中,同样遇到了这个问题,按照一样的解决方法解决。整个程序由一个大的do-while语句和switch语句组合实现界面的不同功能,do-while语句通过choice=0作为完毕的条件,在case3中,有一个小的do-while语句实现纸牌编号的重复输入,在整个程序中有很多信息的输入,需要根据输入的信息正确与否来反应信息,否那么会导致程序出错,所以在调试的过程中参加了很多判断条件,可以解决信息输入错误的情况,但是仍然存在输入非整型值程序出错的问题,所以在输入条件中参加提示信息,以保证信息类型输入正确。5测试结果及其分析1.测试结果如下列图5.1-5.11;2结果分析以注释的形式写在图的下方;图5.1:MessageBox制作的一个欢送提示5.2:纸牌游戏程序的主功能界面5.3:纸牌游戏程序功能1:查看题目5.4:纸牌游戏程序功能2:查看所有纸牌的翻牌次数5.4.1:续5.4第一章题目与要求5.4.2:续5.45.5:纸牌游戏程序功能3:查看指定编号纸牌翻牌记录5.6:纸牌游戏程序功能4:查看最终正面向上的纸牌编号5.7:纸牌游戏程序完毕画面5.8:主界面输入错误提示5.9:功能3输入错误提示以及判断是否需要继续查询纸牌编码5.10:回主菜单判断以及输入错误提示5.11:功能5输出制作人信息6用户使用说明用户运行程序,按操作提示进展操作。程序运行环境VC++6.0。7源代码见附录结论这个学期是我第一次接触"数据构造",在完成设计的过程中,我遇到了一系列的问题,能明显感觉到自己在很多方面的缺乏,但另一方面,问题是要分析解决的,找出问题以便为完善学习方案,改变学习容与方法提供实践依据。所以在整个过程中,我不断加深了对数据构造的理解与一些程序写书时要注意的事项,体会了"数据构造"这门课程在解决现实生活问题上的可行性,也更进一步地激发了我的学习热情。做一个课程设计要注意很多方面,无论是格式,还是书写的容和要表达的思想都得严格要求自己,所以做起来真的不算容易。本次课程设计涉及了很多知识,由于往日没有学得很扎实,对某些问题仍然比拟疑惑,所以要进展充足的补习。期间,我翻阅了很多书籍,知识总是联系很严密的,解决完这个问题又发现了新的问题,之后,为了解决新问题又发现了更多的问题,就这样,我得等到一个一个把问题处理完。问题越多,明白的也就会越来越多,做一次课程设计就像从头到尾做了一次系统的复习,从根底到难点,从轮廓到每个知识点,数据构造的研究容在我的脑海里就再也不像以前那么模糊了。设计程序来解决现在存在的问题,把理论知识付诸于实践,对于我们这些计算机专业的本科生来说,实际能力的培养至关重要,而这种实际能力的培养单靠课堂教学是远远不够的,必须从课堂走向实践,这也是我们学习的目的。做完设计,我已深刻体会到了学习这门课程的重要性与必要性了,同时,它留给我很多思考:学习是思考一个的过程,我们应该主动去想学习一门知识后怎么去运用,而不是一味地被动地承受。数据构造及其算法在解决现实生活中的常见问题和书写软件设计方面上都有着重要的意义,我们应该好好掌握它的相关知识,在以后的学习过程中,更多的去学会如何运用知识。参考文献[1].王昆仑、红"数据构造与算法":中国铁道[2].宁国正"数据构造〔C语言版〕":东南大学[3].严尉敏"数据构造〔C语言版〕":清华大学[4].吴乃陵"C++程序设计":高等教育[5]谭浩强,基温,唐永炎编著.C语言程序设计教程.:高等教育,1992[6]谭浩强编著.C语言程序设计.:清华大学,2007[7]严蔚敏,吴伟民编著.数据构造(C语言版).:清华大学,2008[8]严蔚敏,吴伟民,米宁编著.数据构造题集〔C语言版〕:清华大学,2008[9]爱民编著.离散数学.;邮电大学,2008附录程序源代码:#include<stdio.h>#include<windows.h>#defineFlag-1//定义一个全局变量作为正反面的判断条件。voidmain(){ inti,j,data[52],flag[52],choice,num;//建立两个数组,一个存放52牌的编号,另外一个存放相应编号的纸牌的翻牌记录。 charm,n; MessageBox(NULL,"欢送进入纸牌游戏程序!","温馨提示",MB_ICONASTERISK);//添加了一个MessageBox欢送对话框 for(i=1;i<=52;i++) { data[i-1]=i;//录入52牌的编号。 flag[i-1]=0;//将相应编号纸牌的翻牌数初始化为0。 } for(i=2;i<=52;i++)//外循环,基数循环。 { for(j=1;j<=52;j++)//循环,基数倍数条件判断。 { if(j%i==0) { data[j-1]=data[j-1]*Flag;//将翻转后的结果更新data中的数据。 flag[j-1]++;//翻牌一次,即记入flag数组中。 } } } do{ printf("\t\n"); printf("\t\n"); printf("\t欢送进入纸牌游戏\n"); printf("\t1.查看题目\n"); printf("\t2.查看所有纸牌的翻牌次数\n"); printf("\t3.查看指定编号纸牌翻牌记录\n"); printf("\t4.查看最终正面向上的纸牌编号\n"); printf("\t5.制作人信息\n"); printf("\t0.按0键完毕\n"); printf("\t\n"); printf("\t\n"); printf("请输入您的选择〔数字0-5〕:");//主界面 scanf("%d",&choice); switch(choice)//通过switch语句进展功能的选择 { case1:{ printf("题目\n"); printf("**************************************************************\n"); printf("编号为1-52牌,正面向上,从第2开场,以2为基数,是2的倍数的牌翻一次,"); printf("直到最后一牌;然后,从第3开场,以3为基数,是3的倍数的牌翻一次,"); printf("直到最后一牌;直到以52为基数的翻过,输出:这时输出正面向上的牌有哪些?\n"); printf("****************************************************************"); printf("\n"); printf("\n"); printf("是否回到主菜单?(Y/N):");//在每个独立功能后添加了独立的判断语句,从而可以选择性的回到主菜单。 n=getchar(); n=getchar(); if(n=='Y')break; elseif(n=='N') choice=0;//0作为整个界面的循环完毕条件,所以直接将choice=0,即可完毕循环。 elseprintf("**********(提示:输入错误,默认为继续。)***********\n"); }break; case2:{ printf("以下为翻牌记录:\n"); printf("\t第1牌翻过0次。\t"); printf("\n"); printf("\n"); for(i=1;i<52;i++) { printf("\t第%d牌翻过%d次。\t",i+1,flag[i]); if(i%2==0) printf("\n"); } printf("\n"); printf("是否回到主菜单?(Y/N):"); n=getchar(); n=getchar(); if(n=='Y')break; elseif(n=='N') choice=0; elseprintf("**********(提示:输入错误,默认为继续。)*************\n"); }break; case3:{ do{ printf("\

温馨提示

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

评论

0/150

提交评论