纸牌游戏--课程设计.doc_第1页
纸牌游戏--课程设计.doc_第2页
纸牌游戏--课程设计.doc_第3页
纸牌游戏--课程设计.doc_第4页
纸牌游戏--课程设计.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

数据结构课程设计题目:纸牌游戏5课程设计报告1需求分析题目:纸牌游戏任务:编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后从第4张开始,以4为基数,是4的倍数的牌翻一次, 直到最后一张牌;.再依次5的倍数的牌翻一次,6的,7的 直到 以52为基数的 翻过,输出:这时正面向上的牌有哪些?2概要设计首先必须确定实现这个课程设计的主算法是使用链式存储结构还是栈又或是数组和广义表。根据题目要求需要实现的功能有:1、 数据录入:输入各种数据;此处即创建链表的过程,调用一个成员函数负值。在此处还有一个方法实现,即先输入数据,然后再调用构造实现。2、数据统计:存储方式的选择,是使用链式存储结构还是栈又或是数组和广义表;遵守先定义后调用的原则;数组定义时注意下标的起始值和上限;链表定义时注意结点中的项;准确运用结点。3、 数据输出:按要求的格式打印 调用do循环和for循环,通过遍历链表实现输出,用cout函数出。4、 查找,修改,删除:这三个功能的核心是寻找成员,先遍历链表,然后寻找对应的ID号来找到结点,然后再对结点实行删除,修改操作。3详细设计一、算法思想将表中最后一个结点的指针域指向头结点,整个链表形成一个环,构造循环链表 *L。由此,从表中任意一个结点开始,都可以遍历全表。再用一个for循环来实现从第1开始数,第数到第N个,该牌就要向上。如果链表不空的话,用a指向开始结点,往后数到第N个结点,就把第N-1个结点与第N+1个结点链在一起,即实现了删除第N个结点。如此反复,二、概要设计 1)、纸牌的存放采用链式存储结构,利用循环链表来实现建立的,其表示方法是递归定义的: typedef struct Mnode int data; struct Mnode *next;Mnode; 根据题目要求,要让这52张牌顺序堆放,那就得用循环链表,只须将单循环链表的尾指针的NEXT域指向头指针。它的判空条件是L=L-next =NULL; (非空表) (空表) 单循环链表2)、函数status Electe_King()读取数据M、N后,然后就根据N的值,用for循环数纸牌结点用a指向开始结点,往后数到第N个结点,就把第N-1个结点与第N+1个结点链在一起,即实现了删除第N个结点。如此反复,直到L的后继结点是它自己, for(int j=1;jnext;if(L-data!=L-next-data) a=L-next;L-next=L-next-next; L=L-next-next; delete a;三源代码:#include#includetypedef struct char *wz;int length;int listsize;sqlise;typedef struct need/纸牌游戏int data;int tag;need;void node() need park52;int i,j;for(i=1;i=52;i+)parki-1.data=i;parki-1.tag=1;for(i=2;i=52;i+)for(j=i;j=52;j+)if(parkj-1.data%i=0)parkj-1.tag=parkj-1.tag*(-1);cout 纸牌游戏结束时正面向上的牌有 ;coutendl;for(i=0;i52;i+)if(parki.tag=1)cout第;coutparki.data张牌endl;void main()zcd: coutnnnnendl; couttt*ttendl;coutnendl;couttt 想进行纸牌游戏, 请按1 ttendl;coutnendl;couttt*ttm; if(m=1)node(); cout提醒:想返回主菜单请按2k;while(k=2) goto zcd;4运行结果4.3 程序调试过程中遇到的问题(1)、语法错误:语法错误相对来说要好调试一些的,但有两点需要特别指出:一是应该用规范化的格式输入源程序,我推荐的格式是:函数体内、循环体内等都应该缩进一个TAB位,相应的块语句的两个大括号都应保持在同一列上,函数体之间、模块之间都应用空行隔开,这就解决了各种匹配的问题,更重要的是它极大的增强的程序的可读性。二是应该注意函数的实参与形参的传递问题,要尽量保持两者类型的匹配,(当不匹配又可通过编译时会发生数据类型的隐式转换,这样会产生很多不安全且又很难找到的错误)当不需要改变形参时,只需传入变量,如果你想在函数体内改变函数的外部变量,则传入指针:()指针问题:如:char *name;再将name做为一个指针传到函数中,你的本意可能是想通过函数改变你的字符串,但这里你忽略了一个问题,你没有初始化你的指针却用了它,这样很不安全,虽然你有时可以运行,却有了不安定的因素。你可以这样定义:char name20;这里的name是一个常量地址,也是一个数组名,因此不用担心它没有被初始化。字符数组与字符串的区别是前者不用在最末位加一个0,但你如果把它当做字符串用时系统会自动给你加上

温馨提示

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

评论

0/150

提交评论