请教C语言中srand随机函数

来源:百度知道 编辑:UC知道 时间:2024/05/15 09:48:22
比如这个程序,随机输出十个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 );
}
}
但是如果把srand( (unsigned)time( NULL ) );这条语句放在了for循环里输出的十个数就是一样的,为什么呢?

呵呵,这个是我遇到过的问题,并进行了一些研究。其实这是因为srand()函数是一个随机数产生函数,其意思就是指C语言里的随机数都是由它来控制产生的!!!如果在应用srand()函数之前就用随机函数rand(),则相当于使用了srand(1);
而将srand( (unsigned)time( NULL ) );这条语句放在了for循环里,即是用了srand( (unsigned)time(0 ));故此句语句不变的话,产生的随机数就不变!!!不懂的话可以问我!

因为计算机的随机数并不是真正的随机数,而是事先设定好的一个伪随机数序列,srand函数简单地说就是声明从序列的什么位置开始取数。(unsigned)time( NULL )实际上就是0,也就是srand(0),如果放在循环里,那么每次都是从序列的固定位置取数,当然一样了。