1 随机数介绍
计算机的随机数都是由伪随机数,即是由小M多项式序列生成的,其中产生每个小序列都有一个初始值,即随机种子。(注意: 小M多项式序列的周期是65535,即每次利用一个随机种子生成的随机数的周期是65535,当你取得65535个随机数后它们又重复出现了。)
2 rand()函数的介绍
功能:随机数发生器用法:int rand(void)所在头文件:<stdlib.h>
3 srand()函数的介绍
功能:初始化随机数发生器
用法:void srand(usinged int seed)
所在同文件:<stdlib.h>
srand()函数用来设置rand()函数产生随机数时随机数的种子,参数seed值必须是一个整数,如果每次seed值都设置的相同,那么rand()函数产生的值就会一样,使用srand()函数可以将随机数的种子设置为不同值,这样,每次产生的随机数就会随种子的不同而不同。
4 常用-使用当前时钟作为随机数的种子
正如前面所说的那样,如果种子相同,那么每次产生的随机数也是相同的,若希望每次产生的随机数不也一样,那么就要借助于srand()函数,它可以设置rand()函数的种子值,在平常我们使用的时候,通常采用当前时钟,利用srand(usinged int time(nullptr))的方法设置不用的随机数的种子,因为每时每刻的时间是不同的,这么一来,每次产生的随机数的种子就不一样,利用srand()函数产生的随机数就会不同。
5 产生随机数的方法
产生随机数的方法过程可以描述为:1、给函数srand()一个种子值,他必须是 usinged int 类型;2、调用rand()函数产生随机数;3、如果需要想要多次获取随机数,可以多次调用rand()函数;4、利用rand()函数获取的随机数进行操作。注意:rand()函数只能产生0~RAND_MAX的值。
示例:
#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
int main() {
for (int i = 0; i < 10; i++) { //随机数种子一定,每次运行产生的随机数是相同的
cout << rand() << "\t";
}
cout << endl;
//根据时间产生随机数的种子,将time(nullptr)产生的时间强制转化为unsinged类型
srand(unsigned (time(nullptr)));
for (int i = 0; i < 10; i++) { //种子不同,每次运行产生的随机数不同
cout << rand() << "\t" ;
}
return 0;
}
6 产生特定范围的随机数的特定公式
想要产生一定范围的随机数可以根据随机函数并利用一定的公式进行获取,下面整理了一些获取特定范围的随机数的一些公式:
1、要取得[a,b)的随机整数,使用(rand() % (b-a))+ a;
2、要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a或者(rand() % (b-a))+ a + 1;
3、要取得0~1之间的浮点数,可以使用rand() / double(RAND_MAX)。
示例:
#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
int main() {
//根据时间产生随机数的种子,将time(nullptr)产生的时间强制转化为unsinged类型
srand(unsigned (time(nullptr)));
//获取10个1-10的随机整数
for (int i = 0; i < 10; i++) {
cout << 1 + 1 + rand() % (10 - 1) << "\t";
}
cout << endl;
//获取10个1-10的随机整数另一种写法
for (int i = 0; i < 10; i++) {
cout << 1 + rand() % (10 - 1 + 1) << "\t";
}
cout << endl;
//获取10个0~1之间的小数
for (int i = 0; i < 10; i++) {
cout << rand() / double(RAND_MAX) << "\t";
}
return 0;
}