C++用rand()和srand()生成随机数
2024-09-02 12:15:12
内容来自《编程实战宝典》
首先来看函数原型
int rand(void); void srand(unsigned int seed);
1、rand()函数不需要任何参数,直接返回一个随机数,注意,这个随机数是有范围的,在0~RAND_MAX之间,RAND_MAX一般最小取值为32767,其具体值在头文件stdlib.h中进行定义
2、srand需要一个无符号整形数作为参数(种子),如果作为种子的无符号数相同,那么获取的随机数也就相同,注意:srand()必须配合rand()使用才能有效果
下面是用法
#include <iostream>
using namespace std; int main()
{
int i; cout << "测试rand()函数" << endl;
cout << "随机数最大值RAND_MAX为:" << RAND_MAX << endl;
for (i = 0; i < 3;i++)
{
cout << "num = " << rand() << endl;
} cout << "测试srand()函数" << endl;
cout << "使用不同的种子生成随机数" << endl;
for (i = 0; i < 3;i++)
{
srand(i);
cout << "num = " << rand() << endl;
} cout << "使用相同的种子生成随机数" << endl;
for (i = 0; i < 3;i++)
{
srand(2);
cout << "num = " << rand() << endl;
}
}
以下是结果
可以看出,在使用srand()函数时,如果使用相同的种子,那么最终用rand()函数所生成的随机数也相同
特定随机数的生成
为了使rand()函数生成的随机数在一定的范围内,可以使用如下表达式
a + rand() % n
使用上述表达式生成的随机数的范围在a ~ (a + n)之间,其中a为生成的随机数的最小值,a + n - 1为最大值。
例子如下
#include <iostream>
using namespace std;
int main()
{
cout << "生成特定范围内的随机数:" << endl;
cout << "生成5 到 15 之间的随机数" << endl;
for (int i = 0; i < 5;i++)
{
cout << "num = " << 5 + rand() % 10 << endl; //可生成5,6,7,...,14,不包含15
}
}
结果如下
使用系统时间作为种子生成随机数
为了让随机数更像随机数,降低人为因数的干扰,可以使用系统当前时间作为种子产生随机数
#include <iostream>
#include <time.h> //时间函数time()的头文件
#include <windows.h> //暂停函数Sleep()的头文件
using namespace std; int main()
{
cout << "使用系统时间作为种子生成随机数:" << endl;
for (int i = 0; i < 5;i++)
{
Sleep(1000); //暂停一秒,避免因程序执行过快,5次循环中系统时间未发生变化,导致产生的随机数也相同
srand((unsigned)time(NULL));
cout << "num = " << rand() << endl;
}
return 0;
}
结果
也可以使用系统时间作为种子生成特定范围内的随机数
懒得举例了。。
最新文章
- css学习笔记 4
- daydayup3 codeforces144C
- sql语句 decimal(18,0)什么意思
- Java的堆(Heap)和栈(Stack)的区别
- rsync.conf详解
- 学习练习 java 实例属性 静态属性
- loadrunner http协议put模式脚本编写
- js实现鼠标拖拽div-------Day44
- js中的for循环案例
- 最长(大)回文串的查找(字符串中找出最长的回文串)PHP实现
- E - Let&#39;s Go Rolling!
- JScript 正则表达式语法表
- 大数据入门第十二天——sqoop入门
- Android实现在线更新的过程案例
- C C++ 文件输入与输出
- 特征工程 —— 特征重要性排序(Random Forest)
- 结对作业_Two
- Calendar日期方法
- 基于HTTP协议的轻量级开源简单队列服务:HTTPSQS 笔记
- AHB总线RAM Verilog实例