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所示。
![](https://img-blog.csdn.net/20170120122813702?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaG91MDl0aWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
图1 相同的种子产生2组相同的伪随机整数
2.3.3 变化种子
为了避免程序每次产生相同的伪随机整数组,必须要使用变化的种子。即每次产生伪随机整数时,种子是不相同的。一般采用GetTickCount()函数来指定种子。
GetTickCount()函数的返回值是获取系统已经启动了多长时间,以毫秒作为单位。
srand(GetTickCount());
每次运行该程序时,产生的是两组不相同的伪随机整数,如图2所示。
![](https://img-blog.csdn.net/20170120122909812?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaG91MDl0aWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
图2 不同的种子产生2组不相同的伪随机整数
3 思考题
3.1 产生指定范围内的伪随机整数
如何产生指定范围内的伪随机整数,例如产生1~100之内的伪随机整数。
3.2 产生指定范围内的未随机小数
如何产生指定范围内的伪随机小数,例如产生1~100之内的伪随机小数。
因此,在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之内的伪随机小数。
相关文章推荐
- c语言中的rand()函数和srand()函数产生随机的整数 (转载)
- c语言中的rand()函数和srand()函数产生随机的整数
- c语言中的rand()函数和srand()函数产生随机的整数
- c语言中的rand()函数和srand()函数产生随机的整数
- [C++]用rand()和srand()产生伪随机数的方法(2010-03-22 11:33:33)
- 【C++】用rand()和srand()产生为随机数方法介绍
- C++中用rand()和srand()产生随机数方法介绍
- C++中srand()和rand()产生伪随机数的方法
- C++中用rand()和srand()产生为随机数方法介绍
- 思考c++中rand()函数产生随机数需不需要srand()的发现
- C++中用rand()和srand()产生随机数方法介绍
- C++中用rand()和srand()产生为随机数方法介绍
- 用rand()和srand()产生为随机数的方法总结
- 用rand()和srand()产生为随机数的方法总结
- 由计算机产生0-9之间的随机整数,用户输入猜测的数据,统计用户猜测的次数。产生随机数可以使用Math.rangom()静态方法,该方法返回正的double类型浮点数位于(0.0 1.0】间。
- rand()和srand()产生伪随机数的方法
- 用rand()和srand()产生为随机数的方法总结
- 用rand()和srand()产生伪随机数的方法总结
- 用rand()和srand()产生为随机数的方法总结
- 用rand()和srand()产生伪随机数的方法总结