C++随机数

1.rand()函数

c++库中提供rand()函数,每次调用后返回一个非负整数值,程序中包含的头文件为cstdlib。但是,该函数返回的数字是伪随机数。因为rand()函数采用线性同余法实现,生成的数并不是真正意义上的随机数,每次运行都会产生相同的数字流。

示例

1
2
3
4
5
6
7
8
9
10
#include<iostream>
#include <cstdlib>
using namespace std;
int main() {
int num = 0;//初始化随机数字
//产生1~100之间的随机数
num = rand() % 100 + 1;
cout << num << endl;
return 0;
}

2.srand()函数

要在每次运行产生不同的随机数字流,则必须为随机数生成器提供一个种子。c++中通过调用srand函数实现。在rand函数调用之前,srand要先调用一次,并且在整个程序中仅调用一次。

示例一

这种用法需要用户输入种子值,当值不同时产生的随机数不同,若再次使用同样的种子值时,也会产生相同的随机数字。

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<iostream>
#include <cstdlib>
using namespace std;
int main() {
int num = 0;//初始化随机数字
unsigned int seed;
cout << "请输入种子值:";
cin >> seed;
srand(seed);
num = rand() % 100 + 1;
cout << num << endl;
return 0;
}

示例二

获取种子值的另一种方法:调用time函数,它是c++标准库中的一部分。time函数返回从1970年1月1日午夜开始到现在逝去的秒数,因此在每次运行时都会产生不同的种子值。程序中包含的头文件为ctime。

1
2
3
4
5
6
7
8
9
10
11
12
#include<iostream>
#include<ctime>
#include <cstdlib>
using namespace std;
int main() {
int num = 0;//初始化随机数字
//使用time函数提供种子
srand((unsigned int)time(0));
num = rand() % 100 + 1;
cout << num << endl;
return 0;
}