随机函数SRAND和RAND

srand 函数是随机数发生器的初始化函数,原型:
void srand (unsigned seed);
它需要提供一个种子,如:
srand (1);
直接使用1来初始化种子。
不过常常使用系统时间来初始化,即使用
time函数来获得系统时间,它的返回值为从 00:00:00 GMT, January 1, 1970
到现在所持续的秒数,然后将time_t型数据转化为(unsigned)型在传给 srand 函数,即:
srand ((unsigned) time(&t));
还有一个经常用法,不需要定义time_t型t变量,即:
srand ((unsigned) time(NULL));
直接传入一个空指针,因为你的程序中往往并不需要经过参数获得的t数据。
srand ((int)getpid());
使用程序的ID(getpid())来作为初始化种子,在同一个程序中这个种子是固定的
随机输出十个0-100之间的整数
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
void main( void )
{
int i,k;
srand ( (unsigned)time( NULL ) );
for( i = 0; i < 10;i++ )
{
k=rand()%100;
printf( " k=%d/n", k );
}
}

 

我 们知道rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种了,为基准以某个递推公式 推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的, 除非你破坏了系统,为了改变这个种子的值,C提供了 srand ()函数,它的原形是void srand ( int a) 功能是

初始化随机产生器即rand()函数的初始值,即使把种子的值改成a; 从这你可以看到通过sand()函数,我们是可以产生可以预见的随机序列,
那我们如何才能产生不可预见的随机序列呢?我们可能常常需要这样的随机序列,是吧。利用srand ((unsign) (time(NULL))是一种方 法,因为每一次运行程序的时间是不同的,对了,你知道time() 函数的功能是返回从1970/01/01到现在的秒数的吧,可能这个起始时间不正确,你查一下对不对吧,C还提供了另一个更方便的函数, randomize()
原形是void randomize(),功能是用来始初rand() 的种子的初始值,而且该值是不确定的,它相当于srand ((unsign)(time(NULL)) 不过应注意的是randomize()的功能要通过time来实现所以在调用它时头文件要包含time.h罢了

 

 

srand (),rand(),time(0)

悬赏分:30 - 解决时间:2007-8-29 13:39
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
int a; 。c
for(int i=0;i<4;i++)
{
a=rand();
cout<<a<<endl;
}
return 0;
}
结果产生了4个不同的数
若在a=rand()前加入 srand (time(NULL));或 srand (time(0));
则产生了4个相同的数
小弟只是想通过取系统的时间来产生随机数,看到网上说不用 srand (),光用rand()貌似不行,不太明白这两个函数还有time函数,希望能详细的解释下,浅显易懂最好,还有希望能告知下如何利用这3个函数产生随机数
提问者: amekoerrant - 试用期 一级
最佳答案
你把 srand (time(0)) 放到循环前面就可以了。
原因: time(0)返回的是系统的时间(从1970.1.1午夜算起),单位:秒,而那个循环运行起来耗时连0.000001秒都不到! 也就是说, srand (time(0)) 连着4次的种子是一样的,种子一样,生产的随机数当然是一样了。

如果你在把 srand ()放循环里面,在中间加个sleep函数,消耗一点时间(间隔大于1秒),那么生成的rand 就不一样了.但是这样做很不好,连着两次用 srand 生成的种子,间隔一样,生产的随机数间隔有会有规律性。

另:因为两次运行同一程序的时间肯定是不一样的,所以把 srand 放在循环前面可以得不同的种子,这样才能得到你想要的。

一个简单测试用的sleep函数 :
void sleep(void)
{ time_t goal;
goal = 1 * CLOCKS_PER_SEC + clock(); //间隔1秒
while (goal > clock())
{
;
}

你可能感兴趣的:(随机函数SRAND和RAND)