题目要求:
现有扑克牌52张,其花色记录为:char suit[4][5] = {“红心”, “方块”, “梅花”, “黑桃”};其牌面记录为: char face[] = {‘A’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’, ‘10’, ‘J’, ‘Q’, ‘K’};请用C语言编写程序实现以下功能。
(1)、自定义结构体数组,按照同一花色牌面从小到大的顺序记录全部52张扑克牌。
(2)、以时间为参数设置随机序列种子,实现洗牌,即遍历扑克牌数组,依次交换当前牌与数组中随机位置的牌。
(3)、输出打乱顺序后的全部扑克牌,牌与牌间使用Tab分隔,每13张牌进行一次换行。
实现代码:
#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 cards[52], t;
char suit[4][5] = {"红心", "方块", "梅花", "黑桃"};
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++) {
cards[k].type = i;
cards[k].point = j;
k++;
}
}
/*循环这52张牌,使用随机数进行洗牌*/
srand(time(NULL));
for (i = 0; i < 52; i++) {
/*产生0~51的随机数*/
index = rand() % 52;
/*交换两张牌的位置*/
t = cards[i];
cards[i] = cards[index];
cards[index] = t;
}
/*输出这52张牌,由k控制这是第几张牌*/
k = 0;
for (i = 0; i < 4; i++) {
for (j = 0; j < 13; j++) {
printf("%s%c\t", suit[cards[k].type], face[cards[k].point]);
k++;
if (k % 13 == 0) {
printf("\n");
}
}
}
}
运行效果: