Aqui les dejo un programa que reparte la baraja inglesa de forma aleatoria en C hecho para compilar con gcc en linux.
#include<stdio.h>
#include<time.h>
main()
{
int a,b,j,i=0,numn,v,n,d,k=1,u,q,carta=0,x;
srand(time(NULL));
int compara[4][13];
srand(time(NULL));
int comparan[52];
for(a=0;a<4;a++)
for(b=0;b<13;b++)
compara[a][b]=0;
struct carta{
char *figura[4];
char *numero[13];
char *(reparte[2])[52];
}*baraja,ap;
ap.figura[0]="corazon";
ap.figura[1]="diamante";
ap.figura[2]="trebol";
ap.figura[3]="pica";
ap.numero[0]="As";
ap.numero[1]="dos";
ap.numero[2]="tres";
ap.numero[3]="cuatro";
ap.numero[4]="cinco";
ap.numero[5]="seis";
ap.numero[6]="siete";
ap.numero[7]="ocho";
ap.numero[8]="nueve";
ap.numero[9]="diez";
ap.numero[10]="J";
ap.numero[11]="Q";
ap.numero[12]="K";
baraja= & ap;
for(u=0,x=1;u<4;u++)
for(q=0;q<13;q++)
ap.reparte[x][carta++]= ap.numero[q];
carta=0;
for(b=0,x=0;b<13;b++)
for(q=0;q<4;q++)
ap.reparte[x][carta++]=ap.figura[q];
for(d=0;d<52;d++)
comparan[d]=90;
for(j=0;j<52;j++ )
{
numn=rand()%52;
n=0;
for(v=0;v<52;v++)
{
if(comparan[v] != numn)
continue;
n++;
}
if(n == 0)
{
printf("%d %s %s\n",k++,(*baraja).reparte[0][numn],baraja->reparte[1][numn]);
comparan[i++]=numn;
}
else {
numn=rand()%52;
j--;
}
}
}