srand函数与rand函数

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Gease_lcj/article/details/76407391

1.1 srand()就是给rand()提供种子seed

1)srand()给rand()提供种子 
2)srand()中的seed一般由时间函数得,eg srand((UINT)GetCurrentTime()) srand( (u

nsigned)time( NULL ) ) time()函数得到现在的系统时间等。


比如rand()%3   则值为 0、1、2

rand()%5 值为0、1、2、3、4


rand函数要与srand函数组合应用!

展开阅读全文

随机数的生成:rand()和srand()函数

06-21

以下,介绍船长最喜欢的两个函数,它们的出现使C语言变得十分有趣。(个人意见)rnrnRPG游戏弟兄们都玩过吧,其中有一种遇敌方式是踩地雷,就在当主角在地图上走的时候动不动冒出三两小兵挑衅兼找死。(烦不胜烦,船长在玩这类游戏时曾无数次想874“踩地雷”的发明者)它的实现方式是设主角所立位置为0,主角每走一步,变量加1,当变量==随机取得的数时,小兵出现。rnrn本文要讨论的内容就是,在C语言中,是如何取得这个随机数的?rnrn一个语句:rand();rn它的作用就是随机取0到RAND_MAX之间的任何数。ANSI标准指出,RAND_MAX值的范围到少是32767,也就是双字节整数的最大值。rnrn下面我们用一个例子来取得从1到6的随机整数:rn#include rn#include rnrnmain()rnrnint i;rnrnfor(i=1;i<=20;i++)rnprintf("%10d",1+(rand()%6));rnrnrnrn第2行的stdlib.h是rand()函数的头文件,第7行就是 实现功能的语句了。前面我们以经说过函数取的值是介于0到RANDMAX之前的,而我们所要的是1到6之间的整数。用脚想一想就知道:任一整数除以6所得的余数是0~5之间的整数,再加一之后就是1到6了,也就是我们的目标。利用这个原理我们使用%号对随机数进行了缩放。rnrnOK,运行两次程序:rn一:6 6 5 5 6 5 1 1 5 3 6 6 2 4 2 6 2 3 4 1 rn二:6 6 5 5 6 5 1 1 5 3 6 6 2 4 2 6 2 3 4 1rnrn发现:两次运行的结果完全一样。rn结论:这算什么随机数。rnrn具有讽刺意味的是,这种重复性是rand的一个重要特点,在调试程序时,这种重复性是必不可少的,因为它可以证明对程序的修改能够正常运行。rnrn实际上,rand函数产生的是伪随机数。但我们需要的是随机数。于是,我们需要对程序进行随机化,这需要使用标准库函数srand来实现。函数srand需要一个无符号的整型参数,在每次程序执行时用函数rand去生在一组不同的随机数。如下例:rnrn#include rn#include rnrnmain()rnrnint i;rnunsignde seed;rnrnprintf("Enter a seed:");rnscanf("%u",&seed);rnsrand(seed);rnrnfor( i = 1;i<=20;i++)rnprintf(""%10d",1+(rand()%6));rnrnrn程序的运行结果是当我们输入不同的SEED时,产生不同组的随机数。这句话的意思有两个:一:当输入相同的SEED时,产生的同组随机数;二:每次运行我们都要输入一个SEED。rnrn如果我们希望不用每次输入SEED值,而且每次运行时SEED值都是不同的,我们可以用下面语句代替上面的第三块的三个语句:rnrnsrand(time(NULL));rnrn这会使计算机自动读取自己的时钟以获得SEED值。于是我们就获值了每次运行都会改变的SEED,同样也就获得了真正的随机数。rnrn俺个人认为没有随机数的游戏不能称之为游戏。rnrn 论坛

没有更多推荐了,返回首页