求一个c语言的洗牌发牌程序

C语言洗牌发牌程序,要用到函数调用,但是不用太复杂,各位学霸帮帮忙... C语言洗牌发牌程序,要用到函数调用,但是不用太复杂,各位学霸帮帮忙 展开
 我来答
濮方雅BX
2012-12-16 · TA获得超过4042个赞
知道大有可为答主
回答量:2482
采纳率:60%
帮助的人:2459万
展开全部
要求不是很明确,给你个演示程序,供你参考:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void main(){
int aim,i;
int poker[52]={0};
/*已发的牌在数组中,初始状态为0,表示没发过,置为1表示已发过,避免重复发放*/

srand((unsigned)time(NULL)); /*随机数初始化*/
/*产生一个随机数0-51,并保存到aim变量中*/
aim = rand()%52;
/*模拟发不含大小王牌的扑克牌,
将生成的随机数映射为每张扑克牌。
按照花色(梅花、方块、红桃、黑桃)和大小(2~10、J、Q、K、A)顺序进行映射。
映射规则如下:
梅花:0-12
方块:13-25
红桃:26-38
黑桃:39-51
*/

/*以下模拟发52张牌,可以根据需要修改循环次数发任意张*/
for(i=1;i <= 52; i++)
{
aim = rand()%52;
/*已发的牌在数组中置为1,避免重复发放*/
while(poker[aim] == 1)
{
aim = rand()%52;
}
poker[aim] = 1;

printf("\n第 %2d张牌:",i);
switch(aim/13)
{
case 0:
printf("梅花 ");
break;
case 1:
printf("方块 ");
break;
case 2:
printf("红桃 ");
break;
case 3:
printf("黑桃 ");
break;
default:break;
}
switch(aim%13+1)
{
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
printf("%2d",aim%13+1);
break;
case 1:
printf(" A");
break;
case 11:
printf(" J");
break;
case 12:
printf(" Q");
break;
case 13:
printf(" K");
break;
default:break;
}
}
}
追问
呃、能不能解释一下怎么把牌号打出来的那段呢?另外如果要用参数,怎么改动呢?
追答
牌号打出来是这样的,根据事先的约定:
映射规则如下:
梅花:0-12
方块:13-25
红桃:26-38
黑桃:39-51
将产生的随机数映射到牌号上:
先对除以13,根据结果(0,1,2,3)打出花色
再对13求余,根据余数对应到点数上。
你如果要参数返回的话,就把这 aim/13 和 aim%13 这两个数返回好了,或者你要字符串形式的可以直接返回形如 “梅花”,“K“这样的字符串参数
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式