C++中srand()及rand()的最简单用法浅析

生成5-200之间的随机整数

C++中,标准库提供了一种伪随机数(pseudo-random number)生成器,可以达到随机获取某两个数之间的一个数的效果。
我们以随机获取5-200之间的一个整数为例。首先看完整代码。

pseudo-random number
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <cstdlib> //为使用srand()及rand()引入标准库

const int MIN = 5; //随机数最小值为5
const int MAX = 200; //随机数最小值为200

int main(){
using std::cout;

srand( MAX - MIN ); //设置随机数种子
int my_random;
for (int i = 0;i<10;i++){
my_random = rand() % (MAX - MIN) + MIN; //获取一个随机数并打印
cout<<my_random<<"\n";
}

return 0;
}

在我的计算机上随机到的结果为:96,85,165,176,191,116,68,91,5,19。可以看出代码是没有问题的。

语法解析

首先,#include <cstdlib>在头文件中引入了C++的标准库,之后才可以使用srand()以及rand()这两个函数。之后初始化最大值和最小值。
srand()函数用于设置种子(seed),种子可以简单理解为之后rand()所获得的随机数的最小值。而rand()所能获得的最大值为整型的最大值,rand() % (MAX - MIN)将等概率得到一个0-195之间的数,因为求余运算使得这个数只能落在0-195之间。
最后,my_random = rand() % (MAX - MIN) + MIN;将获得一个5-200之间的随机数。

扩展使用

同理,不论是想要获得怎样的随机数,只要首先将其转化为等价的0-N随机数获取,再进行结果值调整即可。例如,获得一个-50.0-50.0之间的随机一位小数,只要改动代码如下。

more pseudo-random number
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <cstdlib> //为使用srand()及rand()引入标准库
#include <iomanip> //设置格式

const int MIN = -50; //随机数最小值为-50
const int MAX = 50; //随机数最小值为50

int main(){
using namespace std;

cout<<setiosflags(ios::fixed)<<setprecision(1);

srand(( MAX - MIN )*10); //设置随机数种子
float my_random;
for (int i = 0;i<10;i++){
my_random = (rand() % (( MAX - MIN )*10))/10.0 + MIN; //获取一个随机数并打印
cout<<my_random<<"\n";
}

return 0;
}