如何用c语言编写纸牌发牌程序

一付扑克牌52张共4种花色,用户可选择“1---发牌”将这52张牌随机发成4敦;或选择“0----退出”退出程序。提示:用一个具有52个元素的数组(如char p[52][5])存放这52张牌的内容,如P_i表示黑桃、H_i表示红桃、C_i表示梅花、D-i表示方块;程序中可以首先初始化该数组,然后显示菜单等待用户选择输入,用户选择“发牌”,程序调用“发牌”函数;在发牌函数中,可使用C 中的产生随机数的函数(参看rand(),srand(),random()等函数的使用说明)一个随机数m,选取一张牌{p[m]},将其与最前面的牌交换位置,即将选取的牌放在最前面;然后对数组p余下的牌重复选取操作,直到所有牌均重排列;最后按13行*4列输出发牌结果
2026年09月22日 03:23
有2个网友回答
网友(1):

发牌原程序见我的空间(http://hi.baidu.com/crazycola/blog/item/52402bd4b3f68705a08bb746.html),可选是否包含大小王,可选发牌列数。

以下为改过的版本,不包含大小王(即总数52张),只能发4堆。

另外附加了用户菜单,原程序中不含菜单部分。

代码如下:

---------------------------------------
#include
#include
#include

int menu()
{
int choice;
printf("1 发牌/0 退出:");
scanf("%d",&choice);
return choice;
}

void main( void )
{
int i1, j, total;
int *iArr;
int tag = 0;
char* pok_C[] = { "黑桃", "红桃", "梅花", "方块" };
char* pok_N[] = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };

if(!menu()) exit(0);

total = 52;
srand( (unsigned)time( NULL ) );
iArr = (int*)malloc(total*sizeof(int));

for( i1=0; i1 {
iArr[i1]=rand()%total;
if( i1==0 ) continue;
do {
tag = 0;
for( j=0; j if( iArr[j] == iArr[i1] )
{
iArr[i1]=rand()%total;
tag = 1;
}
} while( tag==1 );
}

for( i1=0; i1 {
printf("%s%s\t",pok_C[iArr[i1]%4],pok_N[iArr[i1]%13]);
if(i1%4==3) printf("\n");
}

free(iArr);

}

网友(2):

#include
#include
#include

using namespace std;

void DealCards();

int main()
{
// step 1: input state.
printf("please input 1 for deal cards, 0---exit.");
int i = 0;
scanf("%i", &i);
printf("\n");

if (i == 0)
{
return 0;
}
else
{
// step 2: deal cards
DealCards();

}
return 0;
}

void DealCards()
{
// step 1: initial cards
char p[52][5];
vector vip;
int i, j;
for (i = 1; i <= 13; i++)
{
for (j = 0; j < 4; j++)
{
switch (j)
{
case 0:
sprintf(p[j * 13 + i - 1], "%s_%2i", "P", i);
break;
case 1:
sprintf(p[j * 13 + i - 1], "%s_%2i", "H", i);
break;
case 2:
sprintf(p[j * 13 + i - 1], "%s_%2i", "C", i);
break;
case 3:
sprintf(p[j * 13 + i - 1], "%s_%2i", "D", i);
break;
default:
break;
}
}
}

// step 2: generate random number
for (i = 0; i < 52; i++)
{
vip.push_back(i);
}
random_shuffle(vip.begin(), vip.end());

// step 3: output cards
for (i = 1; i <= 13; i++)
{
for (j = 0; j < 4; j++)
{
printf(p[vip[j * 13 + i - 1]]);
printf(" ");
}
printf("\n");
}

}