題目要求:
現有撲克牌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");
}
}
}
}
運行效果: