题目:
1)模拟桥牌的发牌程序(随机产生0~51的数),分四行不排序显示四手牌。
2)在9×9的方格中,随机布上10个“地雷”,按9行9列输出各格子的数(有雷为9,无雷为0)。
(以上两题能做多少做多少,调试正确后粘贴在下框内,提交作业)
2题再进一步标出各个格子与相邻的地雷数;1题再进一步四手各排序后,显示对应的牌色)
--------------------------------------------------------------------------------
提交作业时间:2004-3-17 11:37:07
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void L6_1()
{ int i,j,k,i2,iNum,iLast=52,iTemp=52,a[52],b[52];
char ch;
srand((unsigned)time(NULL)); // 产生随机数种
for (i=0;i<iLast;i++) b[i]=i;
for (i=0;i<iLast;i++)
{ iNum=rand()%iTemp;
a[i]=b[iNum];
iTemp--;
b[iNum]=b[iTemp];
}
for (i=0;i<iLast;i++) // 随机的四手牌数字
{ if (i%13==0) printf("/n");
printf("%4d",a[i]);
}
printf("/n");
for (k=0;k<iLast;k=k+13) // 四手牌循环
{ for (i=k;i<=k+11;i++) // 各自排序
{ for (j=i+1;j<=k+12;j++)
if (a[i]>a[j])
{
iNum=a[i];
a[i]=a[j];
a[j]=iNum;
}
}
iTemp=0; printf("/n%c ",6); // 输出黑桃牌符
i2=iTemp*13;
for (i=k;i<=k+12;i++) // 四手牌各13张输出
Ch1:{ if (a[i]>=i2 && a[i]<i2+13)
{ switch (a[i]-i2+1)
{ case 9: ch='T'; break;
case 10: ch='J'; break;
case 11: ch='Q'; break;
case 12: ch='K'; break;
case 13: ch='A'; break;
default: ch='0'+a[i]-i2+2;
}
printf("%3c",ch);
}
else
{ iTemp++; printf("/n%c ",iTemp+2); // 输出红桃、方片、草花牌符
i2=iTemp*13; goto Ch1;
}
}
printf("/n");
}
}
void L6_2()
{
int i,j,k,iNum,iLast=10,iTemp=81, //iLast地雷数,iTemp中间量
a[10],b[81],m[11][11]={0}; //初始化数组
srand((unsigned)time(NULL)); //随机数初始化
for (i=0;i<81;i++) b[i]=i; //定义b[0]到b[81]的初始值
//产生地雷序列
for (i=0;i<iLast;i++)
{ iNum=rand()%iTemp; //产生0至80的随机数
a[i]=b[iNum]; //随机地雷序列
iTemp--;
b[iNum]=b[iTemp]; //用最后的b[]替换产生的地雷序列
}
//地雷序列号变换为行列排布
for (k=0;k<iLast;k++)
{
iNum=a[k];
i=iNum/9;
j=iNum%9;
m[i+1][j+1]=9;
}
//地雷周围的地雷数计算
for (i=1;i<10;i++)
{ for (j=1;j<10;j++)
if (m[i][j]>8)
{ m[i-1][j-1]++;
m[i-1][j]++;
m[i-1][j+1]++;
m[i][j-1]++;
m[i][j+1]++;
m[i+1][j-1]++;
m[i+1][j]++;
m[i+1][j+1]++;
}
}
//打印9*9表
for (i=1;i<10;i++)
{ for (j=1;j<10;j++)
{
iNum=m[i][j];
printf("%2c", (iNum>8) ? '*' : '0'+iNum);
}
printf("/n");
}
}
void main()
{
L6_1();
L6_2();
}
得分:8 点评:iNum=rand()%iTemp;
1)模拟桥牌的发牌程序(随机产生0~51的数),分四行不排序显示四手牌。
2)在9×9的方格中,随机布上10个“地雷”,按9行9列输出各格子的数(有雷为9,无雷为0)。
(以上两题能做多少做多少,调试正确后粘贴在下框内,提交作业)
2题再进一步标出各个格子与相邻的地雷数;1题再进一步四手各排序后,显示对应的牌色)
--------------------------------------------------------------------------------
提交作业时间:2004-3-17 11:37:07
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void L6_1()
{ int i,j,k,i2,iNum,iLast=52,iTemp=52,a[52],b[52];
char ch;
srand((unsigned)time(NULL)); // 产生随机数种
for (i=0;i<iLast;i++) b[i]=i;
for (i=0;i<iLast;i++)
{ iNum=rand()%iTemp;
a[i]=b[iNum];
iTemp--;
b[iNum]=b[iTemp];
}
for (i=0;i<iLast;i++) // 随机的四手牌数字
{ if (i%13==0) printf("/n");
printf("%4d",a[i]);
}
printf("/n");
for (k=0;k<iLast;k=k+13) // 四手牌循环
{ for (i=k;i<=k+11;i++) // 各自排序
{ for (j=i+1;j<=k+12;j++)
if (a[i]>a[j])
{
iNum=a[i];
a[i]=a[j];
a[j]=iNum;
}
}
iTemp=0; printf("/n%c ",6); // 输出黑桃牌符
i2=iTemp*13;
for (i=k;i<=k+12;i++) // 四手牌各13张输出
Ch1:{ if (a[i]>=i2 && a[i]<i2+13)
{ switch (a[i]-i2+1)
{ case 9: ch='T'; break;
case 10: ch='J'; break;
case 11: ch='Q'; break;
case 12: ch='K'; break;
case 13: ch='A'; break;
default: ch='0'+a[i]-i2+2;
}
printf("%3c",ch);
}
else
{ iTemp++; printf("/n%c ",iTemp+2); // 输出红桃、方片、草花牌符
i2=iTemp*13; goto Ch1;
}
}
printf("/n");
}
}
void L6_2()
{
int i,j,k,iNum,iLast=10,iTemp=81, //iLast地雷数,iTemp中间量
a[10],b[81],m[11][11]={0}; //初始化数组
srand((unsigned)time(NULL)); //随机数初始化
for (i=0;i<81;i++) b[i]=i; //定义b[0]到b[81]的初始值
//产生地雷序列
for (i=0;i<iLast;i++)
{ iNum=rand()%iTemp; //产生0至80的随机数
a[i]=b[iNum]; //随机地雷序列
iTemp--;
b[iNum]=b[iTemp]; //用最后的b[]替换产生的地雷序列
}
//地雷序列号变换为行列排布
for (k=0;k<iLast;k++)
{
iNum=a[k];
i=iNum/9;
j=iNum%9;
m[i+1][j+1]=9;
}
//地雷周围的地雷数计算
for (i=1;i<10;i++)
{ for (j=1;j<10;j++)
if (m[i][j]>8)
{ m[i-1][j-1]++;
m[i-1][j]++;
m[i-1][j+1]++;
m[i][j-1]++;
m[i][j+1]++;
m[i+1][j-1]++;
m[i+1][j]++;
m[i+1][j+1]++;
}
}
//打印9*9表
for (i=1;i<10;i++)
{ for (j=1;j<10;j++)
{
iNum=m[i][j];
printf("%2c", (iNum>8) ? '*' : '0'+iNum);
}
printf("/n");
}
}
void main()
{
L6_1();
L6_2();
}
得分:8 点评:iNum=rand()%iTemp;