纸牌游戏--课程设计纸牌游戏--课程设计
《数据结构》课程设计
题目:纸牌游戏
课程设计报告
1(需求分析
题目:纸牌游戏
任务:编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后…从第4张开始,以4为基数,是4的倍数的牌翻一次, 直到最后一张牌;...再依次5的倍数的牌翻一次,6的,7的 直到 以52为基数的 翻过,输出:这时正面向上的牌有哪些,
2(概要设计
首先必须确定实现这个课程设计的主算法是使用链式存储结...
纸牌游戏--课程设计
《数据结构》课程设计
题目:纸牌游戏
课程设计
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
二、概要设计
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;j<=N;j++)
{ L=L->next;
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;
}sqlise;
typedef struct need{//纸牌游戏
int data;
int tag;
}need;
void node(){
need park[52];
int i,j;
2
for(i=1;i<=52;i++){
park[i-1].data=i;
park[i-1].tag=1;
}
for(i=2;i<=52;i++)
{
for(j=i;j<=52;j++){
if(park[j-1].data%i==0)
park[j-1].tag=park[j-1].tag*(-1);
}
}
cout<<" 纸牌游戏结束时正面向上的牌有
";
cout<>m;
if(m==1)node();
cout<<"提醒:想返回主菜单请按2"<>k;
while(k==2) goto zcd;
}
4(运行结果
3
4.3 程序调试过程中遇到的问题
(1)、语法错误:
语法错误相对来说要好调试一些的,但有两点需要特别指出:一是应该用规范化的格式输入源程序,我推荐的格式是:函数体内、循环体内等都应该缩进一个TAB位,相应的块语句的两个大括号都应保持在同一列上,函数体之间、模块之间都应用空行隔开,这就解决了各种匹配的问题,更重要的是它极大的增强的程序的可读性。二是应该注意函数的实参与形参的传递问题,要尽量保持两者类型的匹配,(当不匹配又可通过编译时会发生数据类型的隐式转换,这样会产生很多不安全且又很难找到的错误)当不需要改变形参时,只需传入变量,如果你想在函数体内改变函数的外部变量,则传入指针:
(,)指针问题:
如:char *name;再将name做为一个指针传到函数中,你的本意可能是想通过函数改变你的字符串,但这里你忽略了一个问题,你没有初始化你的指针却用了它,这样很不安全,虽然你有时可以运行,却有了不安定的因素。你可以这样定义:char name[20];这里的name是一个常量地址,也是一个数组名,因此不用担心它没有被初始化。字符数组与字符串的区别是前者不用在最末位加一个’\0’,但你如果把它当做字符串用时系统会自动给你加上的,因此在定义字符数组时尽量多定义一位)
4
(,)注意中英文符号
如:中文的分号和英文的分号是不一样的,这是我在调试中最大的体会,害的我用了半个多小时呢~
4(4心得体会
实践能力薄弱,整个开发过程在参考他人资料下进行。编程语言有待熟练。
5
本文档为【纸牌游戏--课程设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。