调用rand()函数前需要调用srand函数

srand函数设置生成一系列伪随机整数的起点。

要重新初始化生成器,需要为srand提供一个随机种子参数。

种子的值都会将生成器设置为随机起点。

我们用时间戳来当作种子 -- srand((unsigned int)time(NULL))

rand检索生成的伪随机数。

通过结果显现现象(来对比一系列代码):

(1)

一旦通过随机种子(时间戳)设置好srand起点,将会通过rand生成一系列真正的伪随机数

注意这里通过随机种子设置srand起点的方式不是调用!!如果这里概念比较模糊,先跳过向后看,就可以理解了。

//真正的伪随机
int main()
{srand(time(NULL));while (1){int num1 = rand();int num2 = rand();printf("%d %d\n", num1, num2);}return 0;
}

(2)

如果多次通过调用的方式设置srand起点,且每次设置时间小于1s,那么在这1s内, rand函数生成值相同,直到下一秒。 总结为:srand起点每1s重新设置一次

//错误示范1
int main()
{while (1){srand(time(NULL));int num1 = rand();int num2 = rand();printf("%d %d\n", num1, num2);}return 0;
}

(3)

用固定值来作为种子来设置srand起点,rand生成的值永远不变。

错误示范2:
int main()
{while (1){srand(1);int num1 = rand();int num2 = rand();printf("%d %d\n", num1, num2);}return 0;
}

(4)

以下是两次运行结果,不难看出,单次看似随机,实际每次运行rand生成值对应相等 其原因就是没有使用srand设置起点,默认起点为种子为1的srand起点。

错误示范3:
int main()
{while (1){int num1 = rand();int num2 = rand();printf("%d %d\n", num1, num2);}return 0;
}

总结

水平有限,就用通俗一点的话来解释吧。

且暂时理解为:

1.

提供给srand的种子如果固定,rand永远不变。

2.

通过时间戳作为种子,在1s内多次通过调用设置srand起点,实际上srand每隔1s才能通过调用改变一次起点,

相当于在1s内没有更改种子值,导致1s内多次设置同一种子的起点,故结果与1相同,rand在1s内永不变

3.

通过时间戳作为种子,设置好srand起点后,在1s内不改变起点或者在1s后改变起点,rand生成值永远是随机值

4.

如果不提供srand起点,rand每次生成值虽然看似随机,但实际当多次运行程序时,发现每次运行后,生成值一一对应相等。

5.

通过时间戳作为种子,srand每次重新调用设置的起点间隔是1s!注意是重新调用!但是一旦设置好起点,每次生成srand起点间隔就是非常小,不知道确切的值但一定小于1s。

注意:最容易混淆的一个点就是!

是通过调用srand函数来设置srand起点,

还是通过srand函数自身种子参数的变化来设置起点。

rand函数生成伪随机数相关推荐

  1. 计算机的随机数函数,使用rand()函数生成随机数

    rand()函数生成随机数.计算机无法生成真正的随机数,它只产生所谓的伪随机数. 生成伪随机数,需要stdlib.h头文件. 参考以下代码: #include #include int main() ...

  2. C语言rand函数生成随机数详解和示例

    文章目录 1.生成随机数 2.生成一定范围随机数 3.获取视频教程 4.版权声明 在C/C++程序开发中,会经常用到随机数这个功能,例如编写游戏类(纸牌)的程序时就需要用到随机数. 1.生成随机数 在 ...

  3. C++ 解决rand()函数生成的随机数每次都一样的问题

    C++的随机数函数rand是一个伪随机数,从固定的初始种子计算得出.所以每次运行获取到的随机数序列是相同的.要解决这一问题,需要设置一个随机数种子,一般用当前时间作为种子 #include <i ...

  4. 使用rand函数生成随机数来发红包

    #include <iostream> #include <ctime> #include <cstdlib> #include <iomanip> # ...

  5. c语言rand函数生成随机数,详解C语言生成随机数rand函数的用法

    说到rand函数,大家是不是会和EXCEL中的rand函数混淆,当小编第一次接触的时候也以为是EXCEL的函数,本文是爱站技术频道小编为大家带来的详解C语言生成随机数rand函数的用法,一起来看看吧! ...

  6. 【MATLAB统计分析与应用100例】案例008:调用rand函数生成均匀分布随机数

    文章目录 1. 生成随机数分布直方图 2. 生成随机数矩阵,服从均匀分布 1. 生成随机数分布直方图 x = rand(10) % 生成10行10列的随机数矩阵,其元素服从[0,1]上均匀分布 y = ...

  7. c语言利用rand()函数生成一组不重复的随机数

    rand函数,C语言中用来产生一个随机数的函数. rand函数界限:stdlib.h头文件中有宏#define RAND_MAX 0x7fff                         rand ...

  8. C++ 使用rand()函数生成随机数

    生成随机数需要 rand() 和 srand() 一起使用,其中 srand() 用来初始化随机数种子, rand() 用来产生随机数. rand函数--随机数发生器 : 用法:int x=rand( ...

  9. C语言 rand函数生成随机数

    在实际的项目中,有时候需要生成一个随机数,在C语言中随机数的生成可以通过使用rand函数来实现. rand函数包含在头文件stdlib.h里,因此使用rand函数需要声明包含stdlib.h. #in ...

最新文章

  1. 实验进行中:.NET WebAssembly支持
  2. jboss启动初始页面_JBoss BRMS最佳实践– BPM流程初始化层的提示
  3. python读取html文件正则替换_Python使用正则表达式过滤或替换HTML标签的方法详解...
  4. android 默认焦点设置_Android界面设计基础:控件焦点4个步骤
  5. 重大活动网络攻击面前,京东智联云的攻防之道
  6. Binaural Microphone
  7. 存储设备映射Linux服务器,青云oss对象存储映射至linux服务器
  8. 计蒜客 16876 韩梅梅的抽象画
  9. Win10桌面背景(壁纸)导出工具
  10. SCI期刊名英文缩写查询
  11. 基于神经网络的预测模型控制器matlab仿真
  12. 达梦数据库导出、导入操作
  13. android 汉字拼音转换工具
  14. apollo星火计划课堂笔记---(综述、V2X、Routing、Map、Planning)
  15. java 6u45 no sni 2_sjscxz.taobao.com
  16. 【观察】做好数据到介质的连接者,英特尔存储的创新与超越
  17. CentOS 7安装ELK日志分析系统
  18. 数据挖掘相关岗位分析及规划
  19. 软导作业2016年11月27日16:32:47
  20. Jupyter Notebook 如何安装 + 使用?【审核5次重磅发布】

热门文章

  1. 2022年2022年9月5日中软国际Linux-C开发一面
  2. 第十五章 : 软件包管理
  3. java监控定时任务_Quartz 定时任务使用 —— Web项目监听中调用(二)
  4. FZU 2282 错排
  5. 1045 Favorite Color Stripe(30分)-PAT甲级
  6. 第1章 矿物加工学概述
  7. Muduo - Reactor模式
  8. 如何使EnableMenuItem函数的调用有效
  9. 中通从通达系中跑出,极兔快递低价抢市,谁将落伍?
  10. IN Tech 2022|英特尔技术产品创新速览