内容来自《编程实战宝典》

首先来看函数原型

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;
}

  

结果

也可以使用系统时间作为种子生成特定范围内的随机数

  懒得举例了。。

最新文章

  1. css学习笔记 4
  2. daydayup3 codeforces144C
  3. sql语句 decimal(18,0)什么意思
  4. Java的堆(Heap)和栈(Stack)的区别
  5. rsync.conf详解
  6. 学习练习 java 实例属性 静态属性
  7. loadrunner http协议put模式脚本编写
  8. js实现鼠标拖拽div-------Day44
  9. js中的for循环案例
  10. 最长(大)回文串的查找(字符串中找出最长的回文串)PHP实现
  11. E - Let&#39;s Go Rolling!
  12. JScript 正则表达式语法表
  13. 大数据入门第十二天——sqoop入门
  14. Android实现在线更新的过程案例
  15. C C++ 文件输入与输出
  16. 特征工程 —— 特征重要性排序(Random Forest)
  17. 结对作业_Two
  18. Calendar日期方法
  19. 基于HTTP协议的轻量级开源简单队列服务:HTTPSQS 笔记
  20. AHB总线RAM Verilog实例

热门文章

  1. Mybatis-plus 实体类继承关系 插入默认值
  2. Winform在控件内实现简单画笔功能
  3. .Net 面试题整理(一)
  4. js以当前时间为基础,便捷获取时间(最近2天,最近1周,最近2周,最近1月,最近2月,最近半年,最近一年,本周,本月,本年)
  5. Django之Session与Cookie
  6. python的break、continue、pass
  7. canal 基于Mysql数据库增量日志解析
  8. MST + 树形 dp
  9. cf 450b 矩阵快速幂(数论取模 一大坑点啊)
  10. Git高级之配置多个SSH key