第1个回答 2007-07-19
/*在vc6下面编译通过,运行正常*/
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <string.h>
#include <time.h>
struct card
{
char face[4];
int suit ;
int score;
};/*定义完之后要加一个分号*/
typedef struct card Card ;
void a (Card * , char *[] , int [], int []);
void b (Card *);
void c (Card *);
main()
{
Card deck [52] ;
char *face[] ={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
int suit[] ={259,260,261,262};
int score[] = {11,2,3,4,5,6,7,8,9,10,10,10,10}; //A算11分,JQK算10分;可以自己改
srand (time(NULL));
a(deck,face,suit,score);
b(deck);
c(deck);
return 0;
}
void a (Card *wDeck, char *wFace[], int wSuit[], int score[])
{
int i;
for (i=0 ; i<52 ; i++ )
{
strcpy(wDeck[i].face, wFace[i%13]);
wDeck[i].suit = wSuit[i/13];
wDeck[i].score = score[i%13] ;
}
}
void b (Card * wDeck)
{
int i , j ;
Card temp ;
for (i=0 ; i <52 ; i++)
{
j = rand()%52;
memcpy(&temp, &wDeck[i],sizeof(Card));
memcpy(&wDeck[i], &wDeck[j],sizeof(Card));
memcpy(&wDeck[j],&temp,sizeof(Card));
}
}
void c (Card *wDeck)
{
int i,a,b,c,d,sum;
for (i=0 ; i<52; i++)
{
printf("%c%s%c",wDeck[i].suit ,wDeck[i].face, (i+1)%4?'\t':'\n');
}
a = 0+(rand()%13)*4;
b = 1+(rand()%13)*4;
c = 2+(rand()%13)*4;
d = 3+(rand()%13)*4;
sum = wDeck[a].score +wDeck[b].score +wDeck[c].score +wDeck[d].score;
printf ("1st:%c%s\n", wDeck[a].suit ,wDeck[a].face);
printf ("2nd:%c%s\n", wDeck[b].suit ,wDeck[b].face);
printf ("3rd:%c%s\n", wDeck[c].suit ,wDeck[c].face);
printf ("4th:%c%s\n", wDeck[d].suit ,wDeck[d].face);
printf ("sum:%d\n",sum);
}本回答被提问者采纳
第2个回答 2007-07-19
//已经修改
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
struct card {
char face;
char suit;
};/*定义完之后要加一个分号*/
typedef struct card Card ;
void a (Card *wDeck);
void b (Card *);
void c (Card *,char face[13][4],char suit[4][4]);
main()
{ Card deck [52] ;
char face[13][4] ={"A" ,"2" ,"3","4","5","6","7","8","9","10","J","Q","K"};
char suit[4][4] ={"1","2","3","4"};
srand (time(NULL));
a(deck);
b(deck);
c(deck,face,suit);
return 0;
}
void a (Card *wDeck)
{ int i;
for (i=0 ; i<52 ; i++ ) {
wDeck[i].face = i%13;
wDeck[i].suit = i/13;
}
}
void b (Card * wDeck)
{
int i , j ;
Card temp ;
for (i=0 ; i <52 ; i++) {
j = rand()%52;
temp = wDeck[i];
wDeck[i] = wDeck[j];
wDeck[j] = temp;
}
}
void c (Card *wDeck,char face[13][4],char suit[4][4])
{
int i=0 ;
printf (" 1\t 2\t 3\t 4\n");
for (i=0 ; i<52; i++)
printf ("%s,%s%c",suit[wDeck[i].suit] ,face[wDeck[i].face] ,(i+1)%4?'\t' :'\n');
printf("\r\n");
//抽出四张牌
int nSum=0;
int nIndex[4];
for(i=0;i<4;i++)
{
nIndex[i]=(rand()%13)*4+i;
printf ("%s,%s%c",suit[wDeck[nIndex[i]].suit] ,face[wDeck[nIndex[i]].face] ,(i+1)%4?'\t' :'\n');
// if(wDeck[nIndex[i]].face<10)
nSum+=(wDeck[nIndex[i]].face+1);//这里A-10按1-10分计算
// else
// nSum+=1;//其它的牌按1分计算
}
printf("nSum=%d\r\n",nSum);
}