原创 c++中如何取得随机数

2010-7-4 12:43 8434 5 5 分类: 软件与OS

代码:  
  #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的话,就不保存。


 


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条