27.现有扑克牌 52 张,其花色记录为:char suit4 = {"红心", "方块",
"梅花", "黑桃"};其牌面记录为:char face[] = {'A', '2', '3', '4', '5',
'6', '7', '8', '9', 'X', 'J', 'Q', 'K'};请用 C 语言编写程序实现以下功
能。
(1)自定义结构体数组,按照同一花色牌面从小到大顺序记录全部 52 张扑克牌。
(2)以时间为参数设置随机序列种子,实现洗牌:即遍历扑克牌数组,依次交换
当前牌与数组中随机位置的牌。
(3)输出打乱顺序后的全部扑克牌,牌与牌间使用 Tab 分隔。
include <stdio.h>
include <stdlib.h>
include <time.h>
typedef struct card {
int type;/代表花色下标/
int point;/代表点数下标/
} Card;
void main() {
int i, j, k, index;
Card c[52], t;
char suit4 = {"红心", "方块", "梅花", "黑桃"};
char face[] = {'A', '2', '3', '4', '5', '6', '7', '8', '9',
'X', 'J', 'Q', 'K'};
/初始化 52 张牌,由 k 控制这是第几张牌/
k = 0;
for (i = 0; i < 4; i++) {
for (j = 0; j < 13; j++) {
c[k].type = i;
c[k].point = j;
k++;
}
}
/循环这 52 张牌,使用随机数进行洗牌/
srand(time(NULL));
for (i = 0; i < 52; i++) {
/产生 0~51 的随机数/
index = rand() % 52;
/交换两张牌的位置/
t = c[i];
c[i] = c[index];
c[index] = t;
}
/输出这 52 张牌,由 k 控制这是第几张牌/
k = 0;
for (i = 0; i < 4; i++) {
for (j = 0; j < 13; j++) {
printf("%s%c\t", suit[c[k].type], face[c[k].point]);
k++;
if (k % 13 == 0) {
printf("\n");
}
}
}
}