数据结构课程设计纸牌游戏

合集下载

纸牌游戏—数据结构实训代码

纸牌游戏—数据结构实训代码

纸牌游戏——数据结构实训代码实训要求:基本要求:一副没有花牌(J、Q、K、A、大小王)的扑克牌,两个人进行纸牌游戏,其中一个人为用户,另一个人为计算机;每轮每人各发 5 张牌,各自以这 5 张牌建立二叉排序树;由用户先出,轮流出牌,每次只能出一张并且要比别人出的大,如:用户出3,计算机则要出比 3 大的牌,没有则选择不出;最先出完的人获胜。

#include <iostream>#include<stdlib.h> // 产生随机数#include<time.h>#include <Windows.h>#include <iomanip>using namespace std;class PlayingCards{private:int card1[10][4];//标记发牌int card2[5][2];//标记出牌public:int b[5];char bhuase[5];int c[5];char chuase[5];PlayingCards(){};void yxsm(); //游戏说明void fp();//随机发牌void cp();//按顺序出牌,并显示void xswj();//显示获得的牌void xsdn();//显示获得的牌void qk();//清空标记数组的记录};PlayingCards a;typedef struct node{int data;struct node * LChild;struct node * RChild;}node;class tree{private:int data;struct node * LChild;struct node * RChild;public:void chushihua(node *t);node * charu(node *t , int key);node * jianlib(node *t);node * jianlic(node *t);void paixu1(node * t);void paixu2(node * t,int *p);void paixu3(node * t,int *p);};tree tr;void PlayingCards::yxsm(){cout<<" "<<"每轮每人各发5 张牌,各自以五张牌建立二叉树,由用户先出,轮流出牌,"<<endl;cout<<" cout<<" cout<<" } "<<"每次只能出一张并且要比别人出的大,"<<endl;"<<"如:用户出3,计算机则要出比3 大的牌,没有则选择不出;"<<endl; "<<"最先出完的人获胜。

纸牌游戏实验报告

纸牌游戏实验报告

纸牌游戏实验报告篇一:纸牌游戏Go Fish实验报告纸片游戏Go Fish课程设计一目的通过对GO FISH的课程设计,明白数据结构设计理念,理解并掌握链表的操作,进一步的了解数据结构的含义。

二需求分析决定玩家的数量,先简单化,建立两个玩家,完成设计;1、确定数据结构模版;2、建立数据结构类型;3、完成数据操作;4、确立算法设计。

三概要设计1、数据结构设计该课程设计采用链表和类相结合模式,建立牌堆和牌操作的链表结构:class Card{public:};牌堆类:采用整型数组建立牌堆,并用随机数打乱牌序。

class Node{public:Node(); Node(int value,Node *next);//初始化节点构造函数 int ListLength(Node* L); //链表的计数 int Search(Node* L , int num); //链表的查找Node* head_Insert(Node* head , int num);//从表头插入节点Node* Delete(Node* head , int num); //删除节点 void Print(Node *head);//链表输出 int card_num; char clore; Node *Link; void NewCard();//新建牌 void Shuffle();//洗牌int Licensing(int n);//发牌int CARD_A[52]; private: private:采用链表结构方式,来构造玩家手牌。

用链式结构进行操作进行删除和插入。

2、算法函数int Scoring(NodePtr &player,int score)//计分;int Players_operations(NodePtr &player1,NodePtr &player2,int Choose,int i,Card CardBign)//玩家操作;两个函数分别用来计算与进行牌的操作。

数据结构课程设计——纸牌游戏

数据结构课程设计——纸牌游戏

题目:纸牌游戏目录一、需求分析 (3)二、概要设计 (3)三、详细设计 (4)四、调试分析和测试结果 (7)五、总结 (8)六、参考文献 (8)七、致谢 (8)八、附录 (9)一、需求分析按以下规则进行翻牌:编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后…从第4张开始,以4为基数,是4的倍数的牌翻一次,直到最后一张牌;...再依次5的倍数的牌翻一次,6的,7的直到以52为基数的翻过,最后输出正面向上的牌有哪些?用函数obv1 、obv2按照题目要求的规则,用for循环来实现.二、概要设计1.当从第二个编号开始的每张牌每次遇到是其倍数时,都会相应的翻一次,这样,每张牌会翻的次数就各不一样,可能很多次,也可能只有一两次,而结果只是要输出在经过各个不同次数的翻牌后,正面向上的牌都有哪几张。

比如24,第一次它是2的倍数时要从正面翻到背面,当进行到3时,就又要从背面翻回来,而到4时还要在翻,同理呢,到6.8.12…它都要来回的翻。

如果它在多次的翻牌后,正面还向上了,那么它就是要输出的结果之一。

2.建立代表52张牌的线性表——调用翻牌算法按照规则翻牌——输出翻牌算法的结果最为主要的翻牌算法的实现:void obv2 (SqList L,int n) {for (int i=2;i<=n;i++)for (int j=i;j<=L.length;j++)if (j%i==0){if (L.data[j]==1)L.data[j]=0;else if (L.data[j]==0)L.data[j]=1;}}以上是通过for循环对是当前基数倍数的牌进行翻牌3、根据算法思想,流程图如下:1、预处理#include<iostream.h>#include<stdlib.h>#define SIZE 100 //线性表存储空间的初始分配量2、数据类型定义定义一个结构体类型SqList,结构体中数组指针elem指示线性表的基地址,length指示线性表的当前长度。

数据结构与算法课设-纸牌游戏21点

数据结构与算法课设-纸牌游戏21点

目录备注: (2)一、游戏简介 (2)二、设计要求 (2)2.1 问题描述 (2)2.2 要求分析 (2)三、程序功能 (3)3.1 程序的主要功能描述 (3)3.2序流程图 (3)3.3主界面 (4)3.4功能测试 (4)四、源程序 (6)五、课设心得 (14)备注:由于这次课设开始时以为可以做其他题目,知道周四才知道不行。

但我的21点一几个基本成型,因此没有继续改动,希望老师能够理解。

一、游戏简介又名黑杰克,起源于法国,现已流传到世界各地。

现在在世界各地的赌场中都可以看到二十一点,随着互联网的发展,二十一点开始走向网络时代,比如菲律宾的博彩公司就有该游戏。

该游戏由 2 到 6 个人玩,使用除大小王之外的52 张牌,游戏者的目标是使手中的牌的点数之和不超过 21 点且尽量大。

有着悠久的历史。

1700年左右法国赌场就有这种21点的纸牌游戏。

1931年,当美国内华达州宣布赌博为合法活动时,21点游戏第一次公开出现在内华达州的赌场俱乐部,15年内,它取代掷骰子游戏,而一举成为非常流行的赌场庄家参与的赌博游戏。

二、设计要求编写程序实现游戏,该程序是模拟古老的“21点纸牌游戏”,实现一对一的人机大战。

要求游戏过程中任意一方牌的点数之和超过 21 点,则自动出局;在不超过 21 点的情况下,玩家下注由电脑随机发牌与庄家比累积牌的点数的大小,大者为赢家。

2.1 问题描述本次C++课程设计题目是“21点纸牌游戏”,系统的主要功能是娱乐游戏,有电脑和玩家一起玩这个游戏,玩家设法使自己的牌达到总分21并要比电脑开的点数大而且不超过这个数值。

扑克牌的分值取它们的面值。

J,Q,K分别是11, 12和13分。

2.2 要求分析编写程序实现游戏,该程序是模拟古老的“21点纸牌游戏”,实现1对1的人机大战。

要求游戏过程中任意一方牌的点数之和超过21点,则自动出局;在不超过21点的情况下,玩家下注由电脑随机发牌与庄家比累积牌的点数的大小,大者为赢家。

数据结构课程设计报告—纸牌游戏

数据结构课程设计报告—纸牌游戏

课题设计2:扑克牌游戏1、问题描述编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后…从第4张开始,以4为基数,是4的倍数的牌翻一次,直到最后一张牌;...再依次5的倍数的牌翻一次,6的,7的直到以52为基数的翻过,输出:这时正面向上的牌有哪些?存储结构:源程序:#include <stdio.h>void main(){int i,j,a[52];for(i=2;i<=52;i++)for(j=i-1;j<52;j+=i)a[j]=!a[j];printf("正面向上的牌有:");for(i=0;i<52;i++)if(a[i])printf("%4d",i+1);}测试结果:正面向上的牌有:1 4 9 16 25 36 49算法的时间复杂度:T(n)=O(n2)课题设计3:joseph环一. 需求分析:利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号。

首先创建一个空链表,初始化链表,构造出一个只有头结点的空链表,建立好一个约瑟夫环。

1. 输入的形式和输入值的范围本程序中,输入报数上限值m和人数上限l,密码,均限定为正整数,输入的形式为一个以“回车符”为结束标志的正整数。

2. 输出的形式从屏幕显示出列顺序。

3. 程序功能提供用户从键盘输入,Joseph约瑟夫环的必要数据,并显示出列顺序。

二、概要设计以单向循环链表实现该结构。

1. 抽象数据类型的定义为:ADT LNode{数据对象:D={ai | ai∈CharSet,i= 1,2,…,n,n≥0}数据关系:R1={&lt; ai-1 ,ai &gt; | ai ∈D,I=2,…,n} 三.源程序:#include<stdio.h>#include<stdlib.h>typedef struct Node{int key;//每个人持有的密码int num;//这个人的编号struct Node *next;//指向下一个节点}Node,*Link;void InitList(Link &L) //创建一个空的链表{L=(Node *)malloc(sizeof(Node));if(!L) exit(1);L->key=0;L->num=0;L->next=L;}void Creater(int n,Link &L) //初始化链表{Link p,q;q=L;for(int i=1;i<=n;i++){p=(Node *)malloc(sizeof(Node));if(!p) exit(1);printf("the key_%d is:",i);scanf("%d",&p->key);p->num=i;L->next=p;L=p;}L->next=q->next;free(q);}void main(){Link L,p,q;int n,x;L=NULL;InitList(L);//构造出一个只有头结点的空链表printf("please input the totle number of people:"); scanf("%d",&n);//总共的人数nprintf("the start key is:");scanf("%d",&x);//初始密码为xCreater(n,L);//建立好一个约瑟夫环p=L;for(int i=1;i<=n;i++){for(int j=1;j<x;j++)p=p->next;q=p->next;x=q->key;printf("%d ",q->num);p->next=q->next;free(q);}}四、测试数据:m的初值为20,n=7 ,7个人的密码依次为3,1,7,2,4,7,4输出:6 7 4 1 5 3 2课题设计4:商品货架管理1、需求分析:设计一个算法,每一次上货后始终保持生产日期越近的商品越靠近栈底。

纸牌游戏课程设计

纸牌游戏课程设计

攀枝花学院课程设计题目:纸牌游戏的设计与实现院(系):年级专业:姓名:学号:指导教师:二〇〇九年十二月十四日攀枝花学院教务处制攀枝花学院本科学生课程设计任务书注:任务书由指导教师填写。

摘要纸牌游戏是数据结构大作业中比较经典的一个大作业,通过此课程设计能够启发我们的思维,对数据结构中的函数有更加清楚的认识,建立我们对数据结构的兴趣,通过此课程设计设同时也能够使我们对各方面的知识有了更加全面的认识与了解,丰富了我们的知识面,扩展了我们的思维。

通过课程设计的实践,我们可以在程序设计方法、上机操作等基本技能和科学作风方面受到比较系统和严格的训练。

当前计算机软件技术和网络技术正飞速发展,软件系统日趋大型化、复杂化,软件对于一个计算机系统是至关重要的。

因此社会对软件开发者提出了比以往更高的要求,相应的系统要求也有了很大的提高。

本系统用C++作为程序语言,设计出的系统功能强大,操作方便灵活。

关键词纸牌游戏,数据结构,软件,系统-Ⅰ-目录摘要 (Ⅰ)1需求分析 (1)1.1需求来源 (1)1.2设计目的 (1)1.3设计要求 (1)2 功能需求描述 (1)3 总体设计 (1)3.1设计思想 (1)3.2系统模块结构 (2)3.3 系统总设计流程图 (2)4 概要设计 (4)4.1抽象数据类型定义 (4)4.2本程序所包含模块 (5)4.3系统功能的实现 (5)5 模块设计 (6)5.1洗牌模块 (6)5.2翻牌模块 (6)6 运行与分析 (6)6.1运行结果 (6)6.2结果分析 (7)致谢 (8)参考文献 (9)源程序 (10)1 需求分析1.1需求来源在本系统的需求分析环节中,会对软件开发的意图、开发的目标、作用范围和有关该软件开的背景材料进行详细的分析。

纸牌游戏作为一个用来娱乐的应用软件,在对其进行需求分析的过程中,需用要充分考虑系统的可用性和简单易用性,联系实际娱乐需要,从而得到合理的需求分析结论。

1.2设计目的该软件为用户提供一个在Windows系统上运行的纸牌游戏小系统。

数据结构课程设计纸牌游戏

数据结构课程设计纸牌游戏

数据结构课程设计纸牌游戏(共27页)-本页仅作为预览文档封面,使用时请删除本页-攀枝花学院学生课程设计(论文)题目:纸牌游戏学生姓名: 00000 学号:0000所在院(系):数学与计算机学院专业:网络工程班级: 2012级1班指导教师:李世文职称:教授2014年 01月 03日攀枝花学院教务处制攀枝花学院本科学生课程设计任务书注:任务书由指导教师填写。

课程设计(论文)指导教师成绩评定表摘要数据结构课程是计算机专业中必修的核心课程之一,也是一门理论性很强的一门课程,同时也是一门锻炼程序涉及能力的实践课程,“数据结构”成为计算机程序设计的重要理论技术基础,它不仅是计算机学科的核心课程,而且已成为其它理工专业的热门选修课。

主要包括线性表、树和二叉树以及图等基本类型的数据结构。

数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和运算等的学科,包括数据的逻辑结构、数据的存储结构和数据的运算这三个方面的内容,其中逻辑结构可分为线性结构和非线性结构;存储结构可分为顺序存储和链式存储两类,图则属于逻辑结构中的非线性结构。

广度优先搜索(BFS)用的队列一步一步完成的,从而找到的是最短路径。

纸牌游戏课程设计包括纸牌信息的建立、了解其翻拍的原理、并简明阐述翻牌的具体步骤与流程、最后输出与打印翻牌结果,整个过程使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法。

掌握一般软件设计的基本内容和设计方法,培养学生进行规范化软件设计的能力。

而且使学生掌握使用各种计算机资料和有关参考资料的方法,提高学生进行程序设计的基本能力。

关键词:数据结构,纸牌游戏,BFS,遍历AbstractData structure course is one of required core curriculum in computer major, course is a very practical, is also an exercise program involves the ability to practice curriculum, "has become an important theoretical and technical foundation of computer program design data structure", it is not only the core course of computer science, and has become a hot elective course for other science majors. Mainly includes the basic data structure type linear table, tree and binary tree and graph of two. Data structure is a research of non computer program of numerical calculation design problems in operating the objects and their relationships and operations and other disciplines, including logic structure, storage structure and data operation data of the three aspects of content, the logical structure can be divided into linear and nonlinear structures; storage structure can be divided into sequential storage and chain store two, graph belongs to nonlinear structure in the logical structure. Breadth first search (BFS) with cohort completed step by step, so as to find the shortest path.A card game Solitaire, curriculum design includes information about its principle, and expounds the flop remake of the concrete steps and processes, the final output and print flop results, the whole process to enable students to understand and master the various basic abstract data type science class logical structure, storage structure and operation of the realization of algorithm, and their in the process of using the method. To master the basic content and the general design method of software design, training students' ability of design software specification. And to make the students master the use of various computer data and methods for reference, to improve the students' basic ability of program design.Key words:data structure, card games, BFS, traversal目录摘要 ......................................................................................................................... Abstract .. (I)1 前言 (1)课题背景 (1)课程设计目的 (1)2 相关技术分析 (2)概要设计 (2)设计原始数据的输入及输出格式 (3)算法流程图 (5)3 设计与实现 (7)数据结构 (7)详细设计和编码 (7)定义全局变量: (7)主要程序代码与分析如下: (7)上机调试过程 (10)5 测试结果及其分析 (11)6 用户使用说明 (18)7 源代码 (18)结论 (19)参考文献 (20)附录 (21)1 前言《数据结构》是软件工程专业的必修课之一,是一门综合性的专业基础课。

纸牌游戏—数据结构实训报告

纸牌游戏—数据结构实训报告

纸牌游戏—数据结构实训报告纸牌游戏—数据结构实训报告1. 项目背景和介绍1.1 项目背景在现代社会中,人们经常通过玩各种纸牌游戏来娱乐和消遣。

纸牌游戏可以帮助人们放松身心、提高思维能力和判断力。

为了更好地理解纸牌游戏的规则和操作方法,并掌握数据结构的应用,我们决定开展这个纸牌游戏的数据结构实训项目。

1.2 项目目标本项目的目标是设计并实现一个纸牌游戏系统,包括纸牌的洗牌、发牌和玩家的操作等。

通过这个项目,我们将学习和提高对数据结构的应用能力,同时也能够提高我们团队合作和项目管理的能力。

2. 需求分析2.1 功能需求2.1.1 纸牌洗牌功能实现纸牌的洗牌功能,确保每次发牌的牌都是随机的,避免出现重复或排序的情况。

2.1.2 纸牌发牌功能实现纸牌的发牌功能,能够按照规则将纸牌发给玩家,并保持每位玩家手中的牌都是不同的。

2.1.3 玩家操作功能实现玩家在游戏中的各种操作,如出牌、抽牌、跳过等,并能够根据规则进行相应的判断和处理。

2.1.4 游戏结束功能实现游戏的结束判断功能,当有玩家出完所有手牌时,游戏结束。

2.2 性能需求2.2.1 系统响应速度系统应能够在合理的时间内响应用户的操作,确保用户能够顺畅地进行游戏。

2.2.2 系统可扩展性系统应具备良好的可扩展性,方便后续的功能迭代和升级。

3. 系统设计3.1 数据结构设计3.1.1 纸牌数据结构设计设计一种合适的数据结构来表示一副纸牌,包括牌的花色、点数等信息,并能够支持洗牌、发牌和玩家操作等功能。

3.1.2 玩家数据结构设计设计一种合适的数据结构来表示玩家的手牌、出牌等信息,并能够支持玩家操作功能。

3.2 算法设计3.2.1 洗牌算法设计设计一种高效的洗牌算法,确保洗牌后每张牌的位置都是随机的。

3.2.2 发牌算法设计设计一种合理的发牌算法,保证每位玩家获得的牌都是不同的。

3.2.3 玩家操作算法设计设计一种算法来判断玩家的操作是否合法,并根据规则进行相应的处理。

数据结构设计报告纸牌游戏

数据结构设计报告纸牌游戏

纸牌游戏一.需求分析1.编号为1-52张牌,正面向上2. 从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后从第4张开始,以4为基数,是4的倍数的牌翻一次,直到最后一张牌;...再依次5的倍数的牌翻一次,6的,7的直到以52为基数的翻过3. 输出:这时正面向上的牌;4.测试数据52张牌二.概要设计1.数组抽象数据类型定义:ADT SqList{数据对象:ji=0,…,bi-1,i=1,2,…,n,D= {aj1j2…jn|n(>0)称为数组的维数,bi是数组第i维的长度, ji是数组第i 维的下标, aj1j2…jn∈ElemSet}数据关系:R={R1,R2,…,Rn}Ri={<aj1…ji…jn,aj1,…ji+1,…jn>|0≤jk≤bk-1,1≤k≤n且k≠I, 0≤ji≤bk-2, aj1…ji…jn,aj1,…ji+1,…jn∈D,i=2,…,n}基本操作:faceringt(L):操作结果:对纸牌进行翻转}ADT SqList2.本程序包含两个模块:(1)主程序模块void main(){定义一个二叉树;for(i=1;i<=52;i++){ L.r[i].num=i;L.r[i].visit=0;//用0来记正面}}(2)纸牌翻转模块——翻转纸牌各模块之间的调用关系如下:主程序模块纸牌翻转模块三.详细设计1.根据题目要求的数组存储结构#define MAXSIZE 100//给数组定义一个空间typedef struct{int num; //牌号int visit; //牌的正反面}RedType; //纸牌的信息typedef struct{RedType r[MAXSIZE+1]; //纸牌数组int length;}SqList;2.对纸牌进行翻转void faceringt(SqList L){for(i=2;i<=52;i++) //从第二张开始往后{for(j=i;j<=52;j++)if(L.r[j].num%i==0) //当是i的倍数时翻转{if(L.r[j].visit==0) //正面翻反面L.r[j].visit=1;elseL.r[j].visit=0;}}for(i=1;i<=52;i++) //显示正面号{if(L.r[i].visit==0)cout<<L.r[i].num<<" ";}cout<<endl;}3. 主函数void main(){for(i=1;i<=52;i++){L.r[i].num=i;L.r[i].visit=0;//用0来记正面}cout<<"这时是正面的编号为:"<<endl;faceringt(L);}4. 函数的调用关系反映了演示程序的层次结构主程序faceringt四. 调试分析1.用一个数组来存储52张牌2. 定义数组时由于每张牌要记录两个东西,就让每个数据包括两个数据项----纸牌号和记录纸牌正反面五.测试结果六. 附录(源代码)#include<iostream>#include<string>using namespace std;#define MAXSIZE 100//给数组定义一个空间typedef struct{int num; //牌号int visit; //牌的正反面}RedType; //纸牌的信息typedef struct{RedType r[MAXSIZE+1]; //纸牌数组int length;}SqList;//对纸牌进行翻转void faceringt(SqList L){int i,j;for(i=2;i<=52;i++) //从第二张开始往后{for(j=i;j<=52;j++)if(L.r[j].num%i==0) //当是i的倍数时翻转{if(L.r[j].visit==0) //正面翻反面L.r[j].visit=1;elseL.r[j].visit=0;}}for(i=1;i<=52;i++) //显示正面号{if(L.r[i].visit==0)cout<<L.r[i].num<<" ";}cout<<endl;}void main(){int i;SqList L;for(i=1;i<=52;i++){L.r[i].num=i;L.r[i].visit=0;//用0来记正面}cout<<"这时是正面的编号为:"<<endl; faceringt(L);}七. 心得体会。

纸牌游戏Go-Fish实验报告

纸牌游戏Go-Fish实验报告

CARD_A[i]=i;
}
洗牌操作,用随机数实现对数组的打乱操作:
void Card::Shuffle()
{ 中南民族大学计算机科学学院
专业 :软件工程 学 8
号:2012213660 姓名 :唐洁
int F_num,L_num; srand((int)time(NULL)); for(int i=0;i<52;i++) {
int Licensing(int n);//发牌
private:
int CARD_A[52];
};
class Node
{
public:
Node();
Node(int value,Node *next);//初始化节点构造函数
int ListLength(Node* L); //链表的计数
int Search(Node* L , int num); //链表的查找
专业 :软件工程 学 1
号:2012213660 姓名 :唐洁
牌堆类:采用整型数组建立牌堆,并用随机数打乱牌序。 class Node { public:
Node(); Node(int value,Node *next);//初始化节点构造函数 int ListLength(Node* L); //链表的计数 int Search(Node* L , int num); //链表的查找 Node* head_Insert(Node* head , int num);//从表头插入节点 Node* Delete(Node* head , int num); //删除节点 void Print(Node *head);//链表输出 private: int card_num; char clore; Node *Link; }; 采用链表结构方式,来构造玩家手牌。用链式结构进行操作进行 删除和插入。

数据结构课程设计-扑克牌的排序

数据结构课程设计-扑克牌的排序

课程设计报告课程设计名称:数据结构课程设计课程设计题目:扑克牌的排序目录1 课程设计介绍 (1)1.1课程设计内容 (1)1.2课程设计要求 (1)2 课程设计原理 (2)2.1课设题目粗略分析 (2)2.2原理图介绍 (2)2.2.1 功能模块图 (2)2.2.2 流程图分析 (3)3 数据结构分析 (6)3.1存储结构 (6)3.2算法描述 (6)4 调试与分析 (12)4.1调试过程 (12)4.2程序执行过程 (12)参考文献 (15)附录(关键部分程序清单) (16)1 课程设计介绍1.1 课程设计内容编写算法能够用基数排序算法对扑克牌进行排序。

应能够选择按花色优先或按面值优先,初始扑克牌牌序要求能自动生成(随机生成)。

1.2课程设计要求1.花色的符号可自定,输出要求给出初始牌序和结果牌序。

2.参考相应资料,独立完成课程设计任务。

3.交规范课程设计报告和软件代码。

2 课程设计原理2.1 课设题目粗略分析根据课设题目要求,拟将整体程序分为三大模块。

此三个模块相互独立,没有嵌套调用的情况,以下是三个模块的大体分析:1.建立一个结构体数组存放整副扑克。

2.根据要求的扑克数及生成的随机数建立一个结构体数组存放需要排序的扑克。

3.用基数排序的方法对随机生成的扑克进行相应要求的排序2.2 原理图介绍2.2.1 功能模块图图2. 1 功能模块图2.2.2 流程图分析1图2.2生成随机扑克的流程图利用一个for循环及随机函数rand(),利用每次循环生成的随机数对应的数值num建立初始的无序扑克,同时将huase、value分别赋给关键字key[0]、key[1]以对其进行排序2. 对扑克进行花色优先排序的函数流程图,如图2.3所示:图2.3对扑克进行花色优先排序的流程图对长为n的数组R,利用next域建立为静态链表,进行关键字先key[1](面值)后key[0](花色)的基数排序,排序后的数组按关键字key[0](花色)优先的顺序存放,利用静态链表依次将其输出。

数据结构课程设计纸牌游戏

数据结构课程设计纸牌游戏

数据结构课程设计纸牌游戏一、课程目标知识目标:1. 学生能理解数据结构中栈和队列的基本概念及其在实际问题中的应用。

2. 学生能运用所学知识,设计并实现一个基于栈和队列的纸牌游戏。

3. 学生掌握栈和队列的操作原理,如入栈、出栈、入队、出队等基本操作。

技能目标:1. 培养学生运用数据结构解决实际问题的能力,提高编程技能。

2. 培养学生团队协作能力,通过小组合作完成纸牌游戏的设计与实现。

情感态度价值观目标:1. 学生能积极主动参与课程学习,培养对数据结构的兴趣和热情。

2. 学生在合作过程中,学会相互尊重、沟通与协作,培养良好的团队精神。

3. 学生通过解决实际问题,体会数据结构在实际应用中的价值,提高对计算机科学的认识。

课程性质:本课程为信息技术课程,以实践操作为主,结合理论讲解,帮助学生掌握数据结构的基本知识。

学生特点:学生为高中生,具备一定的编程基础和逻辑思维能力,对实际操作有较高的兴趣。

教学要求:教师需引导学生将所学知识应用于实际问题的解决,注重培养学生的动手能力和团队协作能力,使学生在实践中掌握数据结构的应用。

通过本课程的学习,学生应能够达到上述课程目标,实现具体的学习成果。

二、教学内容本课程教学内容主要包括以下几部分:1. 栈和队列的基本概念与性质- 栈的定义、特点及应用场景- 队列的定义、特点及应用场景- 栈与队列的异同点分析2. 栈和队列的操作原理- 栈的入栈、出栈操作- 队列的入队、出队操作- 栈与队列在实际问题中的应用案例分析3. 纸牌游戏设计与实现- 纸牌游戏规则设计- 使用栈和队列实现纸牌游戏的核心功能- 游戏界面设计及交互操作4. 编程实践- 使用教材指定的编程语言(如C++、Java等)进行编程实践- 学生分组合作,完成纸牌游戏的设计与实现- 教师指导与反馈,帮助学生优化代码和解决问题教学内容根据课程目标制定,注重科学性和系统性。

教学进度安排如下:1. 第1课时:栈和队列的基本概念与性质2. 第2课时:栈和队列的操作原理3. 第3课时:纸牌游戏规则设计4. 第4-6课时:编程实践,分组完成纸牌游戏设计与实现5. 第7课时:成果展示与评价,教师反馈与总结教学内容与教材关联紧密,旨在帮助学生将所学知识应用于实际问题解决,提高编程实践能力。

数据结构 纸牌游戏课程设计报告

数据结构 纸牌游戏课程设计报告

桂林航天工业高等专科学校课程设计题目:纸牌游戏系别:计算机系专业:计算机应用技术姓名:***学号:************指导老师:**2010-12-28目录一.课程设计目的~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~第3页二.课程设计目标~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~第3页三.需求分析~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~第3页四.程序实现思想~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~第3页五.设计说明~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~第4页六.源代码~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~第6页七.运行后的菜单展示~~~~~~~~~~~~~~~~~~~~~~~~~~~~第7页八.调试分析~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~第7页九.课设总结~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~第8页一.课程设计目的:熟练掌握数据结构这门课程,掌握经性表、栈、队列、串、数组、广义表、树和二叉树以及图等基本类型的数据结构及其应用。

进一步熟悉抽象数据类型的定义和实现、如何利用数组的动态分酚实现顺序结构、继承的实现方式。

学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择适当的逻辑结构、想念结构及基相应的算法并初步掌握算法的时间分析和空间分析的技术。

基本掌握程序设计的基本思路和方法。

利用所学的基本知识和技能,解决简单的程序设计问题各算法描述培养我们的数据抽象能力。

二.设计目标:题目:纸牌游戏任务:编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后…从第4张开始,以4为基数,是4的倍数的牌翻一次,直到最后一张牌;...再依次5的倍数的牌翻一次,6的,7的直到以52为基数的翻过,输出:这时正面向上的牌有哪些?三.需求分析:用函数node()按照题目要求的规则,用几个循环体来实现.四.程序实现思想:首先必须确定实现这个课程设计的主算法是使用链式存储结构还是栈又或是数组和广义表。

C++课程设计21点扑克牌游戏

C++课程设计21点扑克牌游戏

此程序为21点扑克牌游戏, 玩家一共可以要五张牌, 但假如牌的点数超过21, 则自动出局;在不超过21点的情况下, 玩家与庄家比牌的点数大小, 大者为赢, 相同则为平局。

程序说明:1)将所有的函数与相应的数据封装到类中, 并改写主程序。

使程序简化。

2)程序中一共有13张扑克牌可以随时抽取, 大于10的点数为0.5。

3)超级玩家永远不会输掉, 即超级玩家可以查看下一张牌, 若大于21点, 则可以拒绝, 当然游戏规则上不能泄露这点秘密。

4)超级玩家可以查看下一张牌, 即输入指定的字符串或字符, 然后按规定输入对的密码后才干看自己的和计算机的牌, 并指定下一级牌的点数。

5)每次要牌后可以设定赔率, 即假如开始下的是10元钱的注, 假如牌好, 你可以规定继续下注, 当然不能超过你所有的总钱数。

6)将界面的提醒说明改成中文界面, 界面的解释具体和谐, 可以吸引更多的玩家。

类的封装设计一个类, 将出牌, 下注等的操作包含进去, 玩家和计算机。

均为这个类的对象。

这样, 在玩牌及判断输赢时, 函数只需要用这两个对象的引用做参数即可, 大大简化了函数。

具体的参考的数据结构如下;class CCard{private:int naPip[5]; //一共五张牌int nNumber; //实际发了多少牌int nDollar; //有多少钱int nGamble; //赌注int nWin; //赢局数int nLost; //输局数int nDraw; //平局数public:CCard(); //构造函数, 初始化void FirstPlayTwo(); // 最初两张牌int GetNumber(); //返回牌的张数double GetPip(); //返回点数void DidplayPip(); //依次显示牌面的点数void DidplayPip(int); //除了第一张牌, 依次所有显示牌面点数(针对计算机牌的显示) void TurnPlay(); //出一张牌void Win(); //赢了计算赌注void Lose(); //输了void Draw(); //平局int SetGamblec(int); //设立赌注, 赌本不够返回-1int GetMoney(); //返回钱数void DisplayInfo(); //显示必要的信息char * GetCurrentCard(); //返回当前牌点void DeleteCard(void); //删除当前牌点, 作弊用void ModifyCard(double); //修改当前牌, 作弊用int Addgamble(int); //加赌注};主程序#include<iostream.h>#include<stdlib.h>//fuctionsvoid replay(char &ans); //询问玩家是否再玩一局void hit(int &total); //要一张牌void deal(int &player,int &cpu,int &playerturns,int &cputurns); //为计算机和玩家各发两张牌void BET(int &bet,int &money); //下注void print(int wins,int lose,int draw,int money); //输出最后结果void rules(); //输出游戏规则void results(int player,int cpu,int bet,int &money,int &draw,int &win,int &lose); //判断一局的结果/*diyige*///wait.h begin#include <time.h>#include <stdio.h>void wait(int milli) //暂停, milli 毫秒{clock_t start;start=clock();while( ( clock()-start ) < milli );}//wait.h end#include<iostream.h>#include<stdlib.h>#include<conio.h>#include<time.h>//========================================================= void pause()//暂停, 任按一键继续{cout<<"任按一键继续"<<endl;getch();}//========================================================= int GetInt(int L=0,int H=100){int ent;cout<<"Please Enter A Number Between "<<L<<" and "<<H<<endl;cin>>ent;while((ent<L)||(ent>H)){cout<<"Error"<<endl;cout<<"Value must be between "<<L<< " and "<<H<<endl;cin>>ent;}return(ent);}//========================================================== void sign()//Displays ISAAC SHAFFER{cout<<"This Program Was Written By Isaac Shaffer"<<endl;}//============================================================= int random(long hi,long lo)//This Program Finds A Random Number Between Hi and Low{int ran;srand((unsigned)time(NULL));ran=rand()%(hi-(lo-1))+lo;return(ran);}//utility.h endint main(){int player=0,cpu=0,win=0,lose=0,draw=0,playerturns=0,cputurns=0,money=0,bet; char ans;system("cls"); //执行系统命令, 清屏rules();cout<<"\t\t\t请问是否玩牌:";cin>>ans;if((ans == 'y')||(ans=='Y')) // 检查输入是否为Yes{cout<<"\t\t\t您的赌本为100美元"<<endl;//起始的赌本money=100;cout<<"\t\t\t";pause(); //暂停, 任按一键继续}else{return(0);}do{system("cls");if(money<0) //看看有无赌本{cout<<"对不起, 您没赌本了"<<endl; //若赌本输光, 结束程序return(0);}BET(bet,money); //下注的程序deal(player,cpu,playerturns,cputurns); //给玩家和计算机各发两张牌do{cout<<"\t\t\tWould You Like To Hit or Stay :"; //询问是否要牌cin>>ans;if((ans=='h')||(ans=='H')) //假如玩家要牌{playerturns++; //玩家手中的牌数增长一张if(playerturns>5) //判断玩家手中的牌数是否超过5张{cout<<"\t\t\t你手中的牌不能超过5张牌"; //若超过5张不能继续要牌 }}if((playerturns<6)&&(ans=='h')) //判断是否符合玩家要牌的条件{cout<<endl;hit(player); //调用发牌程序}}while((ans=='h')||(ans=='H')); //继续询问玩家是否要牌for(;(cpu<16)&&(cputurns<6);cputurns++) //计算机开始要牌的条件{cout<<endl;cout<<"\t\t\t计算机要了一张牌"<<endl;hit(cpu); //调用发牌程序}cout<<endl;cout<<endl;cout<<"\t\t\t计算机的牌面为:"<<cpu<<endl; //输出计算机的牌面的总点数cout<<"\t\t\t您的牌面为:"<<player<<endl; //输出玩家的牌面的总点数cout<<endl;results(player,cpu,bet,money,draw,win,lose); //判断输赢replay(ans); //询问是否继续玩牌}while((ans=='y')||(ans=='Y'));print(win,lose,draw,money); //游戏结束, 输出结果cout<<endl;cout<<"\t\t\t\t";return(0);}//---------------------------------------------------------------------------------------void rules() //游戏规则{cout<<"\t\t WELCOME TO ISAAC SHAFFER'S BLACK JACK GAME"<<endl;cout<<"\t\t\t HERE ARE SOME SIMPLE RULES"<<endl;cout<<"\t\t\t1:You Can only have a max of 5 cards."<<endl;cout<<"\t\t\t2:If you bust you automatically lose."<<endl;cout<<"\t\t\t3:If you win you win double what you bet."<<endl;cout<<"\t\t\t4:The Dealer stops at or after 16."<<endl;cout<<"\t\t\t\t";pause();}//---------------------------------------------------------------------------------------- void BET(int &bet,int &money) //接受玩家下注{system("cls");cout<<"\t\t\t您现有的 :$"<<money<<endl;cout<<"\t\t\t您要下的赌注是: ";cin>>bet;if(bet<0){bet=bet*-1;}money=money-bet;}//---------------------------------------------------------------------------------------- void deal(int &player,int &cpu,int &playerturns,int &cputurns)//为计算机和玩家各发两张牌{int playercard1,playercard2,cpucard1,cpucard2;playerturns=2;cputurns=2;playercard1=random(13,1); //取得13与1之间的随机数cout<<"\n\t\t\tDEALING HAND"<<endl;wait(350); //等待350msplayercard2=random(13,1);wait(150);cpucard1=random(13,1);wait(350);cpucard2=random(13,1);if(playercard1>=10) //若牌面的点数大于10,按10来计点数{playercard1=10;}if(playercard2>=10){playercard2=10;}if(cpucard1>=10){cpucard1=10;}if(cpucard2>=10){cpucard2=10;}player=playercard1+playercard2; //玩家两张牌的总点数cpu=cpucard1+cpucard2; //计算机两张牌的总点数cout<<"\t\t\t现有您的牌面总数是 :"<<player<<endl;cout<<"["<<playercard1<<"]";cout<<"["<<playercard2<<"]";cout<<endl;cout<<"\t\t\t计算机有一张"<<cpucard1<<" 显示"<<endl; cout<<endl;cout<<"[*] "<<" ["<<cpucard1<<"]"; //计算机隐藏一张牌面}//---------------------------------------------------------------------------------------- void hit(int &total) //要一张牌//This fuction is to deal a card and add it to the total{int card;card=random(13,1);if(card>=10){card=10;}total=total+card; //牌点总数cout<<"\t\t\t牌面是 :"<<card<<endl; //输出牌面cout<<"\t\t\t总的牌面是:"<<total<<endl; //输出总点数}//-----------------------------------------------------------------void results(int player,int cpu,int bet,int &money,int &draw,int &win,int &lose) //判断一局的结果{if(cpu==player) //平局{cout<<"\t\t\t平局"<<endl;draw++;}if(player>21) //玩家超过了21点{cout<<"\t\t\t很遗憾,你输了"<<endl; lose++;}else{if(cpu<player) //玩家赢了{cout<<"\n\t\t\t恭喜你,你赢了"; money=money+(bet*2);win++;}}if(cpu>21) //计算机超过了21点 {cout<<"\t\t\t计算机输了"<<endl; if(player<21){cout<<"\n\t\t\t恭喜你,你赢了";win++;money=money+(bet*2);}}else{if(cpu>player){cout<<"\t\t\t很遗憾,你输了"<<endl;lose++;}}}//----------------------------------------------------------------- void replay(char &ans) //询问玩家是否再玩一局{cout<<"\n\t\t\t您是否想再玩一局:";cin>>ans;}//----------------------------------------------------------------- void print(int wins,int lose,int draw,int money){cout<<"\t\t\t\t赢的次数 :"<<wins<<endl;cout<<"\t\t\t\t输的次数 :"<<lose<<endl;cout<<"\t\t\t\t平的次数 :"<<draw<<endl;cout<<"\t\t\t\t您的赌本 :"<<money<<endl;}尚有。

数据结构课程设计报告-纸牌游戏

数据结构课程设计报告-纸牌游戏

3.2错误分析在初次编写完成后出了一些语法和拼写上的小错误,导致运行结果不正确。

例如翻牌子程序中的用到了for循环:for(int i=2;i<k;i++) ,编译时没有错误,经验证,编号第52的牌应为反面朝上,因此上述运行结果并不正确。

于是我开始一句句研究代码,发现是循环条件出错了,应该为for(int i=2;i<=k;i++)。

出现这个错误是自己很大意,仿造上面的创建链表时的循环条件没有添加等于号而出错了。

这也警示我在编写代码时要边写边思考,防止出现大的错误。

3.3运行程序进入主界面后,用户可以根据窗口提示得到想要的结果。

即输入Y则运行该程序,得到所有正面朝上的牌的编号,输入Q则不运行该程序,退出运行窗口。

程序开始运行,进入界面,如图3所示。

图3程序开始界面用户想要执行程序,选择Y,进入下一界面,如图4所示。

图4执行程序界面用户不想要执行程序,选择Q,进入的界面,如图5所示。

图5不执行程序界面4设计体会设计一个程序需要按一个完整的步骤来进行。

首先必须弄懂程序要解决的是什么问题。

在弄懂之后大脑中就要开始构思要用是什么方法来解决问题,在此期间需要“不择手段”,就是可以问同学、老师或者查阅相关资料通过网络等等,动用一切渠道把握别人的精髓来解决问题。

完成后就要把方法赋之于行动,主要是画出流程图和结构图,依照图设计出解决问题的各种算法随后编写出程序。

最后完成调试和纠错。

这方,都觉得挺高兴的,只有经过这个过程才会提高自己的发现问题、分析问题、解决问题的能力,使得思维更加严谨。

虽然这次课程设计不是很难,不是做一个比较大的系统,代码不算多,但是我认为要成功地完成一个程序,包括完整的实验报告都要投入必要的时间和精力,认真对待,这样我们可以收获不少东西。

在这次程序设计中,遇到了许多的问题,深知自己学习的知识还远远不够。

这是一种全面综合训练,是与课堂听讲,自学和练习相辅相成的,必不可少的一个教学环节。

数据结构纸牌游戏课程设计报告

数据结构纸牌游戏课程设计报告
count
图1单链表结点数据类型
故可创建以单链表为存储结构的结构体,如下:
//自定义单链表结点数据类型
typedef struct node
{int number; //纸牌的编号
int times; //翻牌的次数
struct node *next; //指向下一个结点的指针
}LinkList;
2、概要设计
}LinkList;
2、子函数1:尾插法创建带有头结点的单链表LinkList *creat ()
首先建立一个只有头结点的空单链表,然后重复读入数据,,并将新结点总是插入到当前链表的表尾。建立的过程大致如下:一开始定义LinkList类型的三个指针变量*L、*R、*S:LinkList *L,*R,*S;L是头指针,R是尾指针。
定义了单链表中结点的数据类型后,接下来就要创建单链表。
(1)我选用的是尾插法创建带有头结点的单链表,首先建立一个只有头结点的空单链表,然后重复读入数据,,并将新结点总是插入到当前链表的表尾,在本实验中,读入52个数据则结束读入,该子函数的实现书上有源代码,比较简单。
(2)然后设计翻牌程序,本实验本来是要求输出翻牌51次之后所有正面向上的牌的编号,我自己加了另外的功能,即可以选择翻牌K(1<=K<=51)次之后输出所有正面向上的牌的编号。第一次从第二张牌开始,直到最后一张,是2的倍数的牌的翻牌次数加1;第二次从第三张开始,直到最后一张,是3的倍数的牌的翻牌次数加1;直到第K次,从第K+1张开始,直到最后一张,是K+1的倍数的牌的翻牌次数加1。
合肥学院
计算机科学与技术系
课程设计报告
2009~2010学年第二学期
课程
数据结构与算法
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学院学生课程设计(论文)题目:纸牌游戏学生:00000 学号:0所在院(系):数学与计算机学院专业:网络工程班级:2012级1班指导教师:世文职称:教授2014年01月03日学院教务处制学院本科学生课程设计任务书课程设计(论文)指导教师成绩评定表摘要数据结构课程是计算机专业中必修的核心课程之一,也是一门理论性很强的一门课程,同时也是一门锻炼程序涉及能力的实践课程,“数据结构”成为计算机程序设计的重要理论技术基础,它不仅是计算机学科的核心课程,而且已成为其它理工专业的热门选修课。

主要包括线性表、树和二叉树以及图等基本类型的数据结构。

数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和运算等的学科,包括数据的逻辑结构、数据的存储结构和数据的运算这三个方面的容,其中逻辑结构可分为线性结构和非线性结构;存储结构可分为顺序存储和链式存储两类,图则属于逻辑结构中的非线性结构。

广度优先搜索(BFS)用的队列一步一步完成的,从而找到的是最短路径。

纸牌游戏课程设计包括纸牌信息的建立、了解其翻拍的原理、并简明阐述翻牌的具体步骤与流程、最后输出与打印翻牌结果,整个过程使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法。

掌握一般软件设计的基本容和设计方法,培养学生进行规化软件设计的能力。

而且使学生掌握使用各种计算机资料和有关参考资料的方法,提高学生进行程序设计的基本能力。

关键词:数据结构,纸牌游戏,BFS,遍历AbstractData structure course is one of required core curriculum in computer major, course is a very practical, is also an exercise program involves the ability to practice curriculum, "has become an important theoretical and technical foundation of computer program design data structure", it is not only the core course of computer science, and has become a hot elective course for other science majors. Mainly includes the basic data structure type linear table, tree and binary tree and graph of two. Data structure is a research of non computer program of numerical calculation design problems in operating the objects and their relationships and operations and other disciplines, including logic structure, storage structure and data operation data of the three aspects of content, the logical structure can be divided into linear and nonlinear structures; storage structure can be divided into sequential storage and chain store two, graph belongs to nonlinear structure in the logical structure. Breadth first search (BFS) with cohort completed step by step, so as to find the shortest path.A card game Solitaire, curriculum design includes information about its principle, and expounds the flop remake of the concrete steps and processes, the final output and print flop results, the whole process to enable students to understand and master the various basic abstract data type science class logical structure, storage structure and operation of the realization of algorithm, and their in the process of using the method. To master the basic content and the general design method of software design, training students' ability of design software specification. And to make the students master the use of various computer data and methods for reference, to improve the students' basic ability of program design.Key words: data structure, card games, BFS, traversal目录摘要 (I)Abstract (II)1 前言 (2)1.1 课题背景 (2)1.2 课程设计目的 (3)2 相关技术分析 (3)2.1概要设计 (3)2.2设计原始数据的输入及输出格式 (4)2.3算法流程图 (6)3 设计与实现 (8)3.1 数据结构 (8)3.2详细设计和编码 (8)3.2.1 定义全局变量: (8)3.2.1主要程序代码与分析如下: (8)3.3 上机调试过程 (11)5 测试结果及其分析 (12)6 用户使用说明 (19)7 源代码 (19)结论 (20)参考文献 (21)附录 (22)1 前言《数据结构》是软件工程专业的必修课之一,是一门综合性的专业基础课。

本课程较系统地介绍了软件设计中常用的数据结构以及相应的实现算法,如线性表、栈、队列、树和二叉树,图、检索和排序等,并对性能进行分析和比较,容非常丰富。

1.1 课题背景“数据结构”旨在使学生学会分析研究数据对象的特性,学会数据的组织方法,以便选择合适的数据逻辑结构和存储结构,以及相应的运算,把现实世界中的问题转化为计算机部的表示和处理,这是一个良好的程序设计技能训练的过程。

“数据结构”课程设计不仅可以帮助学生充分理解、巩固所学的基本概念、原理和方法,更重要的是能够针对实际问题来选择数据结构,设计相应的存储结构并加以实现,从而最终解决问题。

结合数据结构所学知识,要求学生用C语言编程实现一个简单的纸牌游戏设计。

1.2 课程设计目的(1)使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法。

(2)使学生掌握软件设计的基本容和设计方法,并培养学生进行规化软件设计的能力。

(3)使学生掌握使用各种计算机资料和有关参考资料,提高学生进行程序设计的基本能力。

2 相关技术分析2.1概要设计按照题目的要求,首先,应对52牌进行编号并且保存它们的编号信息,编号的类型为整型,而对于这样固定的数据,使用整型数组是最好的,因此,我们需要在程序的开始定义一共整型的数组,同时,为了方便对翻转过程的记录,在定义记录编号信息的同时,定义一个与之相对应的标记数组,数组类型为整型。

该程序的核心为一个嵌套的循环,所以定义两个变量i,j作为循环条件。

接着开始对变量进行初始化,首先是编号信息数组,使用for循环对数组进行1到52的赋值,代表52纸牌,然后对标记数组赋值,将数组的所有的值初始化为零,方便在接下来的循环中统计每牌的翻牌数。

数据初始化结束后,开始按照要求对纸牌进行翻转,在嵌套循环中,定义了一个全局变量Flag,值为-1,负数定义为向下,正数定义为向上,这样,翻转一次,即乘以Flag,同时,符合翻转条件时,标记数组相应的编号的纸牌翻牌次数+1。

当每个每次遇到是某个数的倍数时,都会相应的翻一次,这样,每牌会翻的次数就各不一样,可能很多次,也可能只有一两次,结果就只是要输出在经过各个不同次数的翻牌后,正面向上的牌都有哪几个。

举例说明一下,比如24,第一次它是2的倍数时要从正面翻到背面,当进行到3时,就又要从背面翻回来,而到4时还要在翻,同理呢,到6.8.12…它都要来回的翻。

如果它在多次的翻牌后,正面还向上了,那么它就是要输出的结果之一。

循环结束后,编号数组中的数据已经更新,因此对数组进行扫描,大于零的即为正面向上的纸牌,输出其编号即可,同时,输出标记数组中的值,显示每牌的翻牌记录,方便观察或者寻找规律。

到此,整个题目结束。

2.2设计原始数据的输入及输出格式原始数据要求输入纸牌的基础编号,编号的输入为整型。

输出的是经过规律翻转后正面向上的纸牌的编号。

输入的数据信息如下:纸牌:1、2、3……、51、52。

问题直观分析表:(注:图中“√”表示翻转一次。

)2.3算法流程图2.1:算法设计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,在循环中对所有纸牌进行操作。

3.2.1主要程序代码与分析如下:#define Flag -1(考虑到最后要判断哪些纸牌是正面向上的,所以必须要有一共判断条件,因此定义一个全局变量作为正反面的判断条件。

相关文档
最新文档