《程序设计基础教案232课时——数组程序举例.docx》由会员分享,可在线阅读,更多相关《程序设计基础教案232课时——数组程序举例.docx(3页珍藏版)》请在第一文库网上搜索。
1、教案序号23周次16授课形式新授授课章节名称数组程序举例教学目的掌握数组程序教学重点数组程序教学难点数组程序使用教具机房课外作业课后体会授课主要内容1.15.5程序设计举例例5.15用计算机洗扑克牌。基本思路是:将54张扑克牌统一编号为0,1,2,52,53,然后随机地从中一一抽取一张牌,并依次放起,形成新的序列。具体要解决两个问题:如何存储54张扑克牌;在此基础上如何一一抽取。(1)用一维数组存放54张扑克牌:intpk54=501,502,101,102,103,104,105,106,107,108,109,110,111,112,113,201,202,203,204,205,206,
2、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(2)随机抽牌算法产生随机抽牌的算法如图所示:Pk下标012r5253Pk元素值O102O1061213(a)初始化后是扑克粼组数组Pk初始化后的情形如图5.10(a)所示。进行抽取操作首先在0至53之间产生一个随机数r(=rand()%53),将pkO与PkH交换,如图5.10(b)所示。接着在1至53之间产生一个随机数r(=rand
3、()%(531)+1),将pk1与pkr交换,如图5.如(C)所示。一般来说,是在i至53之间产生一个随机数r(=rand()%(53-i)+i),将pki与pkr交换。,直到前53张牌被全部交换。这里,rand()%53的随机数空间如图5.11(a)所示;rand()%(53-i)中的i是将随机数的空间减小一个i大小,如图5.11(b)所示;而rand()%(53i)+i中的后一个i是将减小了的随机数空间移动一个i距离,如图5.11(C)所示。O53(a) randO%53的随机数空间053-i53(b) rand()%(53-i)的随机数空间0i53(c) rand()%(53-i)+i的
4、随机数空间图5.11由以上分析写出源程序如下:#inc1ude#inciude#inc1udeintmain()(inti,temp,r;intpk54=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(unsignedint)time(NU11);for(i=0;i53;i+)r=rand()%(53-i)+i+1;/加1为了洗最后一张牌temp=pki;pki=pkr;pkr=temp;printf(u%d,pki);)printf(%dn,pki);)运行结果:随机,每次运行都会得到一副不同的扑克牌。