https://www.runoob.com/w3cnote/cpp-rand-srand.html
rand()函数可以用来产生随机数,但是这个不是真正意义上的随机数,是应该伪随机数,是根据一个数(种子)为基准以某个递推公式推算出来的一系列数。
rand()
功能:随机数发生器
用法:int rand(void)
头文件:stdlib.h
- rand()返回一随机数值的范围是在0—RAND_MAX间。
- RAND_MAX的范围最少是在372767之间(int)。
- 用unsigned int双字节是65535
- 四字节是4294967295的整数范围
- 0——RAND_MAX每个数字被选中的几率是相同的
- 用户未设定随机数种子时,系统默认的随机数种子为1
- rand()产生的是伪随机数字,每次执行时是相同的;若要不同用srand()初始化它
srand()
功能:初始化随机数发生器
用法:void srand(unsigned int seed)
头文件:stdlib.h
srand()用来设置rand()产生随机数时的随机数种子,参数seed必须是个整数,如果每次seed都设置相同值,rand()所产生的随机数值每次都会一样
使用当前时钟作为随机数种子
rand()产生的随机数在每次运行的时候都是跟上一次相同的。如果要不同,用函数srand()初始化它。可以利用srand((unsigned int)(time(NULL)))的方法,产生不同的随机数种子,因为每一次运行程序的时间是不同的。
产生随机数的用法
- 给srand()提供一个种子,它是一个unsigned int类型
- 调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0—RAND_MAX之间)
- 根据需要多次调用rand(),从而不间断地得到新的随机数
- 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果
产生一定范围随机数的通用表达公式
[a,b) 使用 (rand()%(b-a))+a
[a,b] 使用 (rand()%(b-a+1))+a
(a,b) 使用 (rand()%(b-a))+a+1
注意:a+rand()%n
a为起始值,n为整数的范围
要取得 a 到 b 之间的随机整数,另一种表示:a + (int)b * rand() / (RAND_MAX + 1)。
要取得 0~1 之间的浮点数,可以使用 rand() / double(RAND_MAX)。