⑴ c语言程序设计扑克牌游戏
定义一个结构类型表示一张牌,结构包含3个成员,第一个成员char:取值2,3~K,A表示牌名字,第二个成员int:取值2~14表示牌真实大小。第三个成员:结构链表指针。
写一个初始化函数,定义52大小的结构数组,成员值初值分别和牌对应,遍历数组并将每个元素的链表指针依次指向下一个元素地址。这样得到一个初始链表。(相当于一盒新牌)
所有涉及随机数都用rand函数,洗牌分四份就是循环取随机数m=1~n,n是随循环自减,初值52,直到n变成0。每随一次循环就从初始链表中遍历取出对应第m个节点,并从初始链表中将这个节点断开(既前一个节点指针直接指向后一个节点指针)。每取13张就组成一个新的链表。这样获得4个新链表分别表示4个玩家。
最后出牌就是分别遍历自己的链表,利用循环取牌比较结构数值大小。(取出的牌要从链表断开和上面一样,你把取出节点写成独立函数就能反复使用)。
⑵ 如何用c语言编写纸牌发牌程序
发牌原程序见我的空间(http://hi..com/crazycola/blog/item/52402bd4b3f68705a08bb746.html),可选是否包含大小王,可选发牌列数。
以下为改过的版本,不包含大小王(即总数52张),只能发4堆。
另外附加了用户菜单,原程序中不含菜单部分。
代码如下:
---------------------------------------
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
int menu()
{
int choice;
printf("1 发牌/0 退出:");
scanf("%d",&choice);
return choice;
}
void main( void )
{
int i1, j, total;
int *iArr;
int tag = 0;
char* pok_C[] = { "黑桃", "红桃", "梅花", "方块" };
char* pok_N[] = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };
if(!menu()) exit(0);
total = 52;
srand( (unsigned)time( NULL ) );
iArr = (int*)malloc(total*sizeof(int));
for( i1=0; i1<total; i1++ )
{
iArr[i1]=rand()%total;
if( i1==0 ) continue;
do {
tag = 0;
for( j=0; j<i1; j++ )
if( iArr[j] == iArr[i1] )
{
iArr[i1]=rand()%total;
tag = 1;
}
} while( tag==1 );
}
for( i1=0; i1<total; i1++ )
{
printf("%s%s\t",pok_C[iArr[i1]%4],pok_N[iArr[i1]%13]);
if(i1%4==3) printf("\n");
}
free(iArr);
}
⑶ 用简单c语言,随机输出17张扑克牌,包括花色。大小王也要随机。
1、C语言提供了一些库函数来实现随机数的产生。C语言中有三个通用的随机数发生器,分别为 rand函数, random函数, randomize 函数
但是rand函数产生的并不是真意正义上的随机数,是一个伪随机数,是根据一个数,称之为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非破坏了系统,为了改变这个种子的值,C提供了srand()函数,它的原形是void srand( int a)。
在调用rand函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。一般用for语句来设置种子的个数。
2、例程:
#include"stdio.h"
#include<stdlib.h>
#include<math.h>
intmain()
{
charstr[13][5]={{"A"},{"2"},{"3"},{"4"},{"5"},{"6"},{"7"},{"8"},{"9"},{"10"},{"J"},{"Q"},{"K"}};
intb[]={1,2,3,4};//1红桃2黑桃3放片4梅花
charstr1[5][10]={{"红桃"},{"黑桃"},{"方块"},{"梅花"},{}};
srand(NULL);
inta,c,i;
intarr[17][2]={0};//记录17个数字a[i][0]表示数字a[i][1]表示颜色一共54张牌,4张A--K1大王1小王1-4=>A5-8=>253=>小王54大王,产生不重复的17个数字
intk=0;
while(k<17)
{
a=rand()%54+1;//a<53时候a=(a-1)/4;//1-4=>05-8==>1
//printf("%3d",a);
if(a<53)
{
a=(a-1)/4;
c=rand()%4;
for(i=0;i<17;i++)
{
if(a==arr[i][0]&&c==arr[i][1])
break;
}
if(i<17)
{
arr[k][0]=a;
arr[k][1]=c;
k++;
}
}
if(a==53||a==54)
{
for(i=0;i<17;i++)
{
if(a==arr[i][0])
break;
}
if(i<17)
{
arr[k][0]=a;
arr[k][1]=4;
k++;
}
}
}
for(i=0;i<17;i++)
{
//printf("%s%s ",str1[arr[i][1]],str[arr[i][0]]);
printf("%d",arr[i][0]);
}
}
⑷ c语言扑克牌
定义个字符数组,存放A-K牌面的字母 char ch[][3]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
牌的大小从A-K分别为 0-12
在输出牌的牌面字符时,输出ch数据中牌面值下标的字符串。如某牌数值是9,输出时如下:
printf("%s", ch[9]);
“%d\%c”是格式输出字符串,表示要输出一个整数(%d)一个字符(%c) ,后面的两个参数分别是整数,字符,和格式化字符串相对应。是转义符,对于要输出特殊字符时,需要在前面加上,比如输出时,就写成\;再如 " ,应写成";输出换行写成 ,输出回车写成 等。在这个题目中,和后面的%构不成特殊字符转义,所以不输出,删掉它也是一样的。
⑸ 如何在C语言中输出扑克牌的黑桃,梅花,方块,红心
#include"stdio.h"
#include"conio.h"
#include"math.h"
main()
{intx1=3,x2=4,x3=5,x4=6;
printf("%c%c%c%c",x1,x2,x3,x4);
getch();
}
或者
#include"stdio.h"
#include"conio.h"
#include"math.h"
main()
{charx1,x2,x3,x4;
x1=3;x2=4;x3=5;x4=6;
printf("%c%c%c%c",x1,x2,x3,x4);
getch();
}
⑹ c语言 扑克牌问题 请解答
(这表明A --- K卡的顺序)
(1)首先创建一个数组str1的诠释[13] / /使用每张卡中的原始位置相反的顺序。
(2)建立一个字符数组str_card [13];保存降扑克位置
(2)建立一个单独的列表内容从头尾int数据值为1 --- 13头浇节点,* next指针到下一个节点,最后一个点为NULL;(
(3)(i_str计数器阵列,i_card_order = 0(链标识符,0为A,B(AB是下面的步骤)),还一个特殊的指向尾节点的指针,然后移动节点在同一时间结束时)
(4)操作:A:第一点,转变到最后i_card_order的值= 1
B:成为第一个节点的下一个节点,把数据保存到str1的[i_str]; i_str + +;
i_card_order = 0。
删除当前节点。
( 5)重复步骤3和4,最后是A ---- K为0 --- 12(两个数组),结果就出来了。
⑺ 扑克牌问题(C语言)
其实这是典型的利用链表求解的问题,但是此题用链表的话还需要应用一个长度为13的数组做辅助,所以我直接用数组来进行演示,将在手中的牌进行标记,将放到桌子上的牌进行赋值。
我在很小的时候我的姥爷就曾给我表演过这个魔术,当时我自己用扑克牌弄了将近两个小时才终于知道了这13张牌的顺序是什么,有兴趣的话你可以自己试一试,很有意思。
下面的代码你可以进行调试来帮助理解整个过程
#include <stdio.h>
void main()
{
int poker[13];//十三张扑克牌
for(int i = 0;i<13;i++)//初始化
poker[i] = 0;//0代表牌还在手中,不为0代表放到了桌子上
int remain = 13;//手中剩余的扑克数
int j = 12;//从最下边开始抽牌
int order = 1;//当order为2时,将此时的牌放到桌子上
int number = 1;//从A开始
while(remain != 0)
{
if(j == -1)
{
j = 12;//返回最后一张牌
continue;
}
if(poker[j] != 0)//如果牌已不在手中,则到下一张牌
{
j--;
continue;
}
if(order == 2)
{
poker[j]= number++;//将扑克赋值
remain--;//手中剩余的牌数减1
order = 1;
continue;
}
order++;
j--;
}
//输出一开始小明手中扑克牌的顺序
for(i = 0; i < 13;i++)
printf("%d ",poker[i]);
}
想要写出一个程序重点在于理解这个过程,只有对这个过程熟悉了才有可能把它用代码来演示出来。
⑻ 求C语言大神解答,扑克牌
根号n下取整为答案
对于第k张牌,k的约数为奇数个为翻转状态,约数为偶数个为原状态。
对于k而言他有约数x,则有约数k/x。因此当x²≠k,都是成对出现的。也就是说只有完全平方数是有奇数个约数,我们只要找有几个完全平方数即可。
⑼ 大学初学c语言,作业,c程序编写出扑克牌黑桃A的图案
#include<stdio.h>
int main()
{
printf("%c\n",6);
return 0;
}
把ASCII码对应的字符显示出来,其中,6为黑桃,5为草花,4为方片,3为红桃。