有个关于srand的问题

来源:百度知道 编辑:UC知道 时间:2024/06/18 07:51:55
又两个小程序:
第一个:#include <iostream>
#include "stdlib.h"
#include "time.h"
using namespace std;

int getrand(){
srand(time(NULL));
return rand()%1000+1;
}

void main(){
int t;
cout<<"随机产生的20个数显示如下:"<<endl;
for(int i=0;i<20;i++){
t=getrand();
cout<<t<<endl;
}
}

第二个:#include <iostream>
#include "stdlib.h"
#include "time.h"
using namespace std;

int getrand(){

return rand()%1000+1;
}

void main(){
int t;
srand(time(NULL));
cout<<"随机产生的20个数显示如下:"<<endl;
for(int i=0;i<20;i++){
t=getrand();
cout<<t<<endl;
}
}

为什么第一个函数产生的随机数是一样的,而第二个不一样?
srand()放在main函数里面和放在其外面有什么区别吗?

第二个用了srand(time(NULL));意思是为产生的随机数设一个种子,这样每次产生的随机数就不一样了,关于这个函数可以参考书后面的函数表,上面有解释;
而关于第一个为什么会是一样的随即数,这是机器原因,机器事先会想好一个随即数,但是它一直想的都是这个随即数.所以每次都一样.

srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,通常可以利用geypid()或time(0)的返回值来当做seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。

很明显第一个每次都用time(NULL)那它的值每次都一样的,所以随机数也一样。