Problem E: 编写函数:扑克牌比大小 (Append Code)

Description

Tom和Jack正在玩一副扑克牌(不含大小王),每人每次只能出1张牌,胜负规则如下:

  1. 牌面数值大的人赢。

  2. 如果牌面数值一样,那么按照花色比较大小。红桃大于黑桃,黑桃大于梅花,梅花大于方片。

  3. 如果花色、牌面数值都相同,则平局。(实际上,由于只有一副牌,是不会出现平局的)。


编写两个函数get_card()和card_cmp()完成程序:

原型:int get_card(Poker *pk);

功能:按格式完成Poker型(结构体)变量的输入。

原型:int card_cmp(Poker p1, Poker p2);

功能:按题意,p1大于p2返回1,p1小于p2返回-1,相等返回0。

函数的调用格式见“Append Code”。


“Append Code”中用到如下类型的定义:

typedef enum
{
diamond, // 方块
club, // 梅花
spade, // 黑桃
heart // 红桃
} Cards; // 扑克牌的四种花色

typedef struct
{
Cards type; // 花色
int point; // 点数
} Poker;

Input

输入有4个,前2个分别是Tom所出牌的花色和牌面,后2个分别是Jack所出牌的花色和牌面。

方便起见,红桃、黑桃、梅花、方片分别用D、C、B、A四个英文字母表示;A、2、3、4、5、6、7、8、9、10、J、Q、K分别用1~13表示。

Output

输出Tom和Jack的胜负结果:

  1. 如果Tom胜出,则输出:Tom wins.

  2. 如果Jack胜出,则输出:Jack wins.

  3. 如果平局,则输出:Tie.

Sample Input

A 10 B 12

Sample Output

Jack wins.

HINT
Append Code

append.c,

int main()
{
    Poker tom, jack;
    get_card(&tom);
    get_card(&jack);
 
    int result = card_cmp(tom, jack);
    if(result > 0)
        puts("Tom wins.");
    if(result < 0)
        puts("Jack wins.");
    if(result == 0)
        puts("Tie.");
}

涉及了枚举类型的使用,这里简单介绍一下
1.枚举类型无法从控制台赋值,常数赋值也需要强制转化
2.本质为int型常量
3.枚举常量之间用逗号隔开,最后一个枚举常量之后不需要逗号
4.声明:类似于结构体(enum Signal { GREEN, YELLOW, RED } ,或typedef enum{diamond,club,spade,heart /} Cards;),使用时同理

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <ctype.h>
typedef enum
{
    diamond, // 方块
    club, // 梅花
    spade, // 黑桃
    heart // 红桃
} Cards; // 扑克牌的四种花色

typedef struct
{
    Cards type; // 花色
    int point; // 点数
} Poker;
int get_card(Poker *pk)
{
    char c;
    scanf("%c %d",&c,&pk->point);
    getchar();
    switch (c)
    {
    case 'A':
        pk->type=diamond;
        break;
    case 'B':
        pk->type=club;
        break;
    case 'C':
        pk->type=spade;
        break;
    case 'D':
        pk->type=heart;
        break;
    default:
        break;
    }
}
int card_cmp(Poker p1, Poker p2)
{
    if(p1.point>p2.point)
        return 1;
    if(p1.point<p2.point)
        return -1;
    if(p1.point==p2.point)
    {
        if(p1.type>p2.type)
            return 1;
        if(p1.type<p2.type)
            return -1;
        if(p1.type==p2.type)
            return 0;

    }
}
int main()
{
    Poker tom, jack;
    get_card(&tom);
    get_card(&jack);

    int result = card_cmp(tom, jack);
    if(result > 0)
        puts("Tom wins.");
    if(result < 0)
        puts("Jack wins.");
    if(result == 0)
        puts("Tie.");
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值