現有撲克牌52張,其花色記錄爲:char suit[4][5];其牌面記錄爲: char face[];請用C語言編寫程序實現以下功能。

題目要求:

現有撲克牌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");
            }
        }
    }
}

運行效果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章