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