您的位置:首页 > 编程语言 > C语言/C++

C++中产生随机整数的方法(srand()函数与rand()函数)

2017-01-20 12:27 337 查看
C++中产生的随机数实际上并不是真正的随机,而是伪随机(pseudorandom)。计算机通过C++中的算法从一个起始数(startingpoint)开始计算,最终得到的一个“貌似随机”的整数,即为伪随机整数。而不同的起始数得到的伪随机的整数也是不同的。

因此,在C++中产生随机数的步骤分为两步:第一步是设置起始数;第二步是产生伪随机数。

1 设置起始数

通过srand()函数设置起始数。

1.1 函数格式

void srand( unsigned int seed);

其中,seed表示设置的起始数,起始数也叫做“种子”。

1.2 函数调用

srand(2);

以上代码将随机整数的种子设置为2。

2 产生伪随机整数

通过rand()函数产生伪随机整数。

2.1 函数格式

int rand(void);

函数的返回值是产生的伪随机整数。

2.2 函数调用

intpseudorandom = rand();

2.3 函数说明

2.3.1 默认种子

一般来说,在调用rand()函数产生伪随机整数之前,必须调用srand()函数设置种子。但是也可以直接调用rand()函数产生伪随机整数,这时相当于将种子设置成了1。也就是说

srand(1);

intpseudorandom = rand();



intpseudorandom = rand();

等价。

2.3.2 种子与伪随机整数

相同种子会产生相同的伪随机整数,但是,在程序中利用同一个种子多次产生伪随机整数时,则产生的伪随机整数是不同的,例如:

    int i;
    srand(1);
    for(i=0; i<10; i++)
    {
       printf("%6d\n",rand());
}

此时,产生的是10个不同的伪随机整数,且值是递增的。但是每次运行该程序时,产生的是两组相同的伪随机整数,如图1所示。



图1 相同的种子产生2组相同的伪随机整数
2.3.3 变化种子

为了避免程序每次产生相同的伪随机整数组,必须要使用变化的种子。即每次产生伪随机整数时,种子是不相同的。一般采用GetTickCount()函数来指定种子。

GetTickCount()函数的返回值是获取系统已经启动了多长时间,以毫秒作为单位。

srand(GetTickCount());
每次运行该程序时,产生的是两组不相同的伪随机整数,如图2所示。



图2 不同的种子产生2组不相同的伪随机整数
 

3 思考题

3.1 产生指定范围内的伪随机整数

如何产生指定范围内的伪随机整数,例如产生1~100之内的伪随机整数。

3.2 产生指定范围内的未随机小数

如何产生指定范围内的伪随机小数,例如产生1~100之内的伪随机小数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: