3. 对习题6的题目3 (扑克牌程序)进行修改扩充,为其添加查找功能,要求从键盘输入一张扑克牌的花色和面值,查找该张扑克牌是在哪个组中或底牌中。
时间: 2024-03-23 15:36:29 浏览: 102
Java基础高级综合练习题扑克牌的创建
为扑克牌程序添加查找功能,我们需要先确定扑克牌的存储方式。可以使用一个二维数组来表示各个组和底牌中的扑克牌,例如:
```
int poker[8][5];
```
其中,poker[0]表示底牌,poker[1]-poker[7]表示7个组。每个元素表示一张扑克牌,由花色和面值组成,可以用一个结构体来表示:
```
struct Card {
int suit; //花色,0-红桃,1-黑桃,2-梅花,3-方块
int rank; //面值,2-10表示2-10,1表示A,11表示J,12表示Q,13表示K
};
```
接下来,我们可以编写一个函数来查找指定的扑克牌,返回其所在的组或底牌编号。可以使用一个简单的线性查找算法,逐个遍历每个组和底牌中的扑克牌,查找与目标扑克牌相同的牌。
以下是C语言的示例代码:
```
#include <stdio.h>
struct Card {
int suit; //花色,0-红桃,1-黑桃,2-梅花,3-方块
int rank; //面值,2-10表示2-10,1表示A,11表示J,12表示Q,13表示K
};
int poker[8][5]; //扑克牌数组
int numPoker = 0; //扑克牌数目
//查找扑克牌,返回其所在的组或底牌编号
int searchCard(struct Card c) {
for(int i = 0; i < 8; i++) {
for(int j = 0; j < 5; j++) {
if(poker[i][j].suit == c.suit && poker[i][j].rank == c.rank) {
return i;
}
}
}
return -1; //未找到
}
//打印扑克牌
void printPoker() {
printf("底牌:");
for(int i = 0; i < 3; i++) {
printf("%c%d ", poker[0][i].suit == 0 || poker[0][i].suit == 3 ? 'R' : 'B', poker[0][i].rank);
}
printf("\n");
for(int i = 1; i < 8; i++) {
printf("组%d:", i);
for(int j = 0; j < 5; j++) {
if(poker[i][j].suit == -1) {
printf(" -- ");
} else {
printf("%c%d ", poker[i][j].suit == 0 || poker[i][j].suit == 3 ? 'R' : 'B', poker[i][j].rank);
}
}
printf("\n");
}
}
int main() {
//初始化扑克牌
for(int i = 0; i < 8; i++) {
for(int j = 0; j < 5; j++) {
poker[i][j].suit = -1;
poker[i][j].rank = -1;
}
}
//从键盘读入扑克牌
printf("请输入扑克牌的花色和面值(0-红桃,1-黑桃,2-梅花,3-方块;2-10表示2-10,1表示A,11表示J,12表示Q,13表示K):\n");
struct Card c;
scanf("%d%d", &c.suit, &c.rank);
//查找扑克牌
int pos = searchCard(c);
if(pos == -1) {
printf("未找到该扑克牌!\n");
} else if(pos == 0) {
printf("该扑克牌在底牌中!\n");
} else {
printf("该扑克牌在第%d组中!\n", pos);
}
return 0;
}
```
在上面的代码中,我们首先定义了一个二维数组poker来表示各个组和底牌中的扑克牌,以及一个变量numPoker来记录当前扑克牌的数目。然后定义了一个结构体Card来表示一张扑克牌,包括花色和面值。接着编写了一个函数searchCard来查找指定的扑克牌,采用线性查找算法,逐个遍历每个组和底牌中的扑克牌,查找与目标扑克牌相同的牌,找到后返回其所在的组或底牌编号,如果未找到则返回-1。最后,在main函数中,首先从键盘读入要查找的扑克牌,然后调用searchCard函数查找该扑克牌。如果未找到,则提示未找到;如果找到了,则根据返回值判断该扑克牌在哪个组或底牌中。
需要注意的是,在打印扑克牌时,我们将红桃和方块的牌面标记为R,黑桃和梅花的牌面标记为B。
阅读全文