《程序设计基础》教案-23(2课时——数组程序举例)

《程序设计基础》教案-23(2课时——数组程序举例)


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条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信