关于srand函数的几个问题

大二的软件狗,有几个问题一直不清楚,求教一下大神们
1. 一个特定的种子值只会产生一个特定的随机数,对吗?
2. 使用srand函数,用time(NULL)做种子值,这样的话种子值是随着电脑运行时间随时变化,而不取决于srand的函数在程序中的位置吗?
3. 变量直接用time(NULL)取的时候单位是秒,在srand这里取得是不是一个更小的单位?(微秒?还是什么)因为如果单位仍然是秒的话,那么我程序在1s内运行完成,产生的所有随机数岂不是一个值了?而我自己运行程序检测的则不是这样的。
4. 随机数取0到9,srand写在循环里面,然后得到的随机数都是1,4,7,这个数字差(3到4左右)是不是就是我循环一次的时间消耗?如果是的话,srand写在循环外,经过的时间都是一样的,那么得到的随机数为什么能全部取到0~9?

不好意思,问的可能有些混乱,先提前谢过了。

一个种子不是产生一个特定的随机数,而是一串特定的随机数。
#include
using namespace std;
#include
#include
int main(){
srand(5555);
cout<<rand()<<" "<<rand()<<" "<<rand()<<endl;
srand(5555);
cout<<rand()<<" "<<rand()<<" "<<rand()<<endl;
srand(6666);
cout<<rand()<<" "<<rand()<<" "<<rand()<<endl;
}
运行结果:
2438 11821 18178
2438 11821 18178
24893 25748 21806

srand函数是rand函数的种子,用来初始化rand()的起始值。用时间做种子只是每次初始值不一样罢了,具体生成的随机数还是有rand决定的,需要产生10(不包括10)以内的随机数对10求余(0-9)就可以得到

首先,种子不会随着电脑运行时间变化。
time(0)可以得到一个整数,代表函数调用时的时间。以这个整数作为种子,用srand初始化。
之后每次调用rand()都是以刚才的srand所在时间为种子,直到第二次运行srand且种子数值改变
若两次运行srand的种子一样,则会出现:
每次调用rand()时,
rand()(第一次srand)==rand()(第二次srand)

目前用 srand 和 rand 产生的随机数是伪随机数:是一个周期很长的数值系列r0,r1,r2,''',rN。可以认为srand()就是用来设置这个系列的起点,以后每调用一次rand,就取这个系列的后一个数。

srand()就是给rand()提供种子seed

如果srand每次输入的数值是一样的,那么每次运行产生的随机数也是一样的,

也就是说,以一个固定的数值作为种子是一个缺点。 通常的做法是 以这样一句代码srand((unsigned) time(NULL));来取代,这样将使得种子为一个不固定的数, 这样产生的随机数就不会每次执行都一样了。