C/C++生成随机数需要用到rand()函数和srand()函数,C/C++内没有在一个范围内生成随机数的自带函数。
1.rand()函数
功能:随机发生器
所在头文件:stdlib.h
rand()返回随机数值的范围在0~RAND_MAX之间。0~RAND_MAX每个数字被选中的概率相同。
注:rand()产生的是伪随机数字,每次执行时的结果是相同的。Ctrl+Shift+F5时每次产生的结果是一样的。
#include <iostream> #include"stdlib.h" using namespace std; int main() { double x; x = rand(); x = x/RAND_MAX; cout<<x<<endl; return 1; }
2.srand()函数
为了避免每次生成固定的随机数,引进srand()函数。
功能:初始化随机数发生器
用法:srand(unsigned int seed)
所在头文件:stdlib.h
srand()是用来设置rand()产生随机数时的随机种子。参数seed必须是整数,如果每次seed都设置相同的值,rand()所产生的随机数值每次也都一样。
注:要每次生成的随机数不一样,用srand()初始化,为了方便,可以利用srand((unsigned) time(NULL))的方法,产生不同的随机种子。
#include <iostream> #include <time.h> #include"stdlib.h" using namespace std; int main() { double x; srand((unsigned)time(NULL)); //srand(3) x = rand(); x = x/RAND_MAX; cout<<x<<endl; return 1; }
3.在一定范围内生成随机数的通用公式
要取得[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)。