现有扑克牌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");
            }
        }
    }
}

运行效果:
在这里插入图片描述

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