C程序 52张扑克牌每个花色4张,每个人随机四张,比较手中最大的牌,如果数字相同比花色,很紧急

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C程序 52张扑克牌每个花色4张,每个人随机四张,比较手中最大的牌,如果数字相同比花色,很紧急相关的知识,希望对你有一定的参考价值。

详细要求:
有三个人(A,B,C)玩一副扑克牌,该扑克牌一共52张,黑桃梅花红心方片各13张,每个人随机发4张牌,牌发完后比较大小,决定输赢顺序。比较方式:将各自手中最大的牌先进行比较,大者为赢家;如果最大的牌点数相同,则看花色,大小顺序为:黑桃>红桃>梅花>方片,大者为赢家.
其中:
点数大小:A<2~9<?<J<Q<K

用子函数sub1发牌
用sub2判定大小
在主函数中显示每个人的牌和比较出来的大小顺序

求给力 谢谢程序员大虾给力哈~

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

typedef struct card

int num;//A 1~10 J Q K
int clr;//0黑桃,1.红桃,2.梅花3.方块
Crd;

static int count=0;//申明一个全局静态变量,当一副牌发完4次以后,重新洗牌。
char clr[4][5]="黑桃","红桃","梅花","方块";
char person[3][3]="甲","乙","丙";
void sub1(int a[4][13],Crd array[3][4])


int i,j;
if(count%4==0)

for(i=0;i<4;i++)//重新洗牌,一副牌玩完了(enum card::color)

for(j=0;j<13;j++)
a[i][j]=0;



srand((unsigned int)time(NULL));
//发牌
for(i=0;i<3;i++)

for(j=0;j<4;j++)

int m,n;
while(a[m=rand()%4][n=rand()%13]);
a[m][n]=1;
array[i][j].num =n+1;
array[i][j].clr =m;



system("cls");

for(i=0;i<3;i++)

printf("%s : ",person[i]);
for(j=0;j<4;j++)

char temp[3]=0;
if(array[i][j].num==1)
temp[0]='A';
else if(array[i][j].num==11)
temp[0]='J';
else if(array[i][j].num==12)
temp[0]='Q';
else if(array[i][j].num==13)
temp[0]='K';
else if(array[i][j].num==10)

temp[0]='1';
temp[1]='0';

else
temp[0]=array[i][j].num +'0';
printf("%s %2s ",clr[array[i][j].clr],temp);

printf("\n");


printf("\n随机生成牌点成功完成!");
count++;

system("pause");



//比较大小,因为是一副牌,不会出现相等的情况
void sub2(Crd array[3][4])

int i,j,k;
Crd t;
for(i=0;i<3;i++)

for(j=0;j<3;j++)

for(k=j+1;k<4;k++)

if(array[i][j].num<array[i][k].num ||
array[i][j].num==array[i][k].num &&
array[i][j].clr>array[i][k].clr)

t = array[i][j];
array[i][j] = array[i][k];
array[i][k] = t;





/*
for(i=0;i<3;i++)

printf("%s : ",person[i]);
for(j=0;j<4;j++)

char temp[3]=0;
if(array[i][j].num==1)
temp[0]='A';
else if(array[i][j].num==11)
temp[0]='J';
else if(array[i][j].num==12)
temp[0]='Q';
else if(array[i][j].num==13)
temp[0]='K';
else if(array[i][j].num==10)

temp[0]='1';
temp[1]='0';

else
temp[0]=array[i][j].num +'0';
printf("%s %2s ",clr[array[i][j].clr],temp);

printf("\n");

*/
if(array[0][0].num>array[1][0].num || array[0][0].num==array[1][0].num&&
array[1][0].clr < array[1][0].clr)

if(array[0][0].num>array[2][0].num || array[0][0].num==array[2][0].num&&
array[0][0].clr < array[2][0].clr)

if(array[1][0].num>array[2][0].num || array[1][0].num==array[2][0].num&&
array[1][0].clr < array[2][0].clr)

printf("\n第一:甲\n第二:乙\n第三:丙");

else
printf("\n第一:甲\n第二:丙\n第三:乙");

else

printf("\n第一:丙\n第二:甲\n第三:乙");


else

if(array[1][0].num>array[2][0].num || array[1][0].num==array[2][0].num&&
array[1][0].clr < array[2][0].clr)

if(array[0][0].num>array[2][0].num || array[0][0].num==array[2][0].num&&
array[0][0].clr < array[2][0].clr)

printf("\n第一:乙\n第二:甲\n第三:丙");

else
printf("\n第一:乙\n第二:丙\n第三:甲");

else

printf("\n第一:丙\n第二:乙\n第三:甲");



printf("\n赢家排序完成!(按#号字符退出游戏,按其他任意键继续游戏!)\n");



void main()

int a[4][13]=0;
Crd array[3][4];
do

sub1(a,array);
sub2(array);
while(getchar()!='#');
参考技术A 最近复习考试,没时间啊 参考技术B 好,我帮你编,现在开始编,等我,追问

好的,咱们一起编

追答

好了,可是字数限制发不了,,,, 我发你qq吧

C/C++程序内存的分配

原文:C/C++程序内存的分配

一、一个C/C++编译的程序占用内存分为以下几个部分:

栈区(stack):由编译器自动分配与释放,存放为运行时函数分配的局部变量、函数参数、返回数据、返回地址等。其操作类似于数据结构中的栈。
堆区(heap):一般由程序员自动分配,如果程序员没有释放,程序结束时可能有OS回收。其分配类似于链表。
全局区(静态区static):存放全局变量、静态数据、常量。程序结束后由系统释放。全局区分为已初始化全局区(data)和未初始化全局区(bss)。
常量区(文字常量区):存放常量字符串,程序结束后有系统释放。
代码区:存放函数体(类成员函数和全局区)的二进制代码。

二、三种内存分配方式

1. 从静态存储区分配:内存在程序编译的时候已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。

2. 在栈上创建:在执行函数时,函数内局部变量的存储单元可以在栈上创建,函数执行结束时,这些内存单元会自动被释放。栈内存分配运算内置于处理器的指令集,效率高,但是分配的内存容量有限。

3. 从堆上分配:亦称为动态内存分配。程序在运行的时候使用malloc或者new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生命周期有程序员决定,使用非常灵活,但如果在堆上分配了空间,既有责任回收它,否则运行的程序会出现内存泄漏,频繁的分配和释放不同大小的堆空间将会产生内存碎片。

在 C 语言中,全局变量又分为初始化的和未初始化的(未被初始化的对象存储区可以通过 void* 来访问和操纵,程序结束后由系统自行释放),在 C++ 里面没有这个区分了,他们共同占用同一块内存区。

三、堆和栈的区别

1. 管理方式不同: 栈是由编译器自动申请和释放空间,堆是需要程序员手动申请和释放;
2. 空间大小不同: 栈的空间是有限的,在32位平台下,VC6下默认为1M,堆最大可以到4G;
3. 能否产生碎片: 栈和数据结构中的栈原理相同,在弹出一个元素之前,上一个已经弹出了,不会产生碎片,如果不停地调用malloc、free对造成内存碎片很多;
4. 生长方向不同: 堆生长方向是向上的,也就是向着内存地址增加的方向,栈刚好相反,向着内存减小的方向生长。
5. 分配方式不同: 堆都是动态分配的,没有静态分配的堆。栈有静态分配和动态分配。静态分配是编译器完成的,比如局部变量的分配。动态分配由 malloc 函数进行分配,但是栈的动态分配和堆是不同的,它的动态分配是由编译器进行释放,无需我们手工实现。
6. 分配效率不同: 栈的效率比堆高很多。栈是机器系统提供的数据结构,计算机在底层提供栈的支持,分配专门的寄存器来存放栈的地址,压栈出栈都有相应的指令,因此比较快。堆是由库函数提供的,机制很复杂,库函数会按照一定的算法进行搜索内存,因此比较慢。

以上是关于C程序 52张扑克牌每个花色4张,每个人随机四张,比较手中最大的牌,如果数字相同比花色,很紧急的主要内容,如果未能解决你的问题,请参考以下文章

推断5张扑克牌的组成

理解面向对象编程---C#控制台实现52张扑克牌的分法

LQ0013 牌型种数DFS

LQ0013 牌型种数DFS

4月6日--关于算法数的练习题--扑克洗牌

蓝桥杯历届试题:牌型种数