代码:
#include<time.h>
#include<stdlib.h>
srand((unsigned int)time(NULL));
int n = rand() % 101;
解释:
C++/C语言里,是没有办法得到一个真正的随机数序列的。想要得到一个真正的随机数序列,必须使用特定的随机数硬件发生器。也就是说,软件是没有办法产生真正的随机数。因为软件必须按照一定的逻辑来编写。既然是按照特定的逻辑(也就是算法)来编写,那么产生的运算结果就是一定的。这一点,就是软件天生的特性。想想看,如果一个软件,同样的代码喝条件下,每次运行的结果不一样,那还有谁会用?
所以,在C++/C语言中,就有了“伪随机数”的概念。意思也就是说,通过一个特定的算法,产生一个假的随机数序列。那么,程序员又希望这个随机数序列跟接近真正的随机数序列,也就是希望每次得到的序列的不一样,所有有了一个“播种”的概念。
srand( unsigned int seed );
这个函数就是用来“播种”的。通过一个“种子”(seed),来控制随机数的序列不一样。只要种子不一样,那么通过rand()得到的随机数序列就不一样。反过来说,如果“种子”一样,那么通过srand()得到的随机数序列就是一样的。
srand(0);
for( int i = 0; i < 10; i++)
{
cout<<rand()<<' ';
}
你试着将这个程序执行两次,你会发现两次的结果一样。那是因为,一旦“种子”确定了,那么这个随机数序列就确定了。软件天生的“行为可重复性”决定了这一点。
所以,一般在播种的时候,喜欢用一个随机的种子。绝大多数的情况下,会使用当前的时间。这个数字在每次程序运行的时候,都不一样。除非你手动的改系统时间。
time是这样声明的:
time_t time( time_t *timer );
用法是你先自己定义一个time_t变量,让后把变量的地址传给它。函数会返回自1970年1月1日0点走过的秒数,同时把这个返回值保存在你传进来的那个time_t*指向的变量里面。如果你传进来NULL的话,就不保存。
文章评论(0条评论)
登录后参与讨论