2024年3月3日发(作者:)
教案
序号 23 周 次 16 授课形式
数组程序举例
新 授
授课章节名称
教学目的
掌握数组程序
教学重点
数组程序
教学难点
使用教具
课外作业
课后体会
数组程序
机房
授课主要内容
1.1 5.5 程序设计举例
例5.15 用计算机洗扑克牌。
基本思路是:将54张扑克牌统一编号为0,1,2,……52,53,然后随机地从中一一抽取一张牌,并依次放起,形成新的序列。具体要解决两个问题:如何存储54张扑克牌;在此基础上如何一一抽取。
(1)用一维数组存放54张扑克牌:
int pk[54]={501,502,
101,102,103,104,105,106,107,108,109,110,111,112,113,
201,202,203,204,205,206,207,208,209,210,211,212,213,
1
301,302,303,304,305,306,307,308,309,310,311,312,313,
401,402,403,404,405,406,407,408,409,410,411,412,413}
(2)随机抽牌算法
产生随机抽牌的算法如图所示:
数组pk初始化后的情形如图5.10(a)所示。
进行抽取操作首先在0至53之间产生一个随机数r(=rand()%53),将pk[0]与pk[r]交换,如图5.10(b)所示。
接着在1至53之间产生一个随机数r(=rand()%(53-1)+1),将pk[1]与pk[r]交换,如图5.10(c)所示。
一般来说,是在i至53之间产生一个随机数r(=rand()%(53-i)+i), 将pk[i]与pk[r]交换。
……,直到前53张牌被全部交换。
这里,rand()%53的随机数空间如图5.11(a)所示;rand()%(53-i)中的i是将随机数的空间减小一个i大小,如图5.11(b)所示;而rand()%(53-i)+i中的后一个i是将减小了的随机数空间移动一个i距离,如图5.11(c)所示。
2
由以上分析写出源程序如下:
#include
#include
#include
int main()
{
int i,temp,r;
int
pk[54]={501,502,101,102,103,104,105,106,107,108,109,110,111,112,113,201,202,203,204,205,206,207,208,209,210,211,212,213,301,302,303,304,305,306,307,308,309,310,311,312,313,401,402,403,404,405,406,407,408,409,410,411,412,413};
printf("n");
srand((unsigned int)time(NULL));
for(i=0;i<53;i++)
{r=rand()%(53-i)+i+1; // 加1为了洗最后一张牌
temp=pk[i];
pk[i]=pk[r];
pk[r]=temp;
3
printf("%d ",pk[i]);
}
printf("%dn",pk[i]);
}
运行结果:随机,每次运行都会得到一副不同的扑克牌。
4
发布者:admin,转转请注明出处:http://www.yc00.com/news/1709478065a1630041.html
评论列表(0条)