透过猜数字的小游戏来重新认识和学习随机数(rand())和时间函数(time(NULL))

简介: 透过猜数字的小游戏来重新认识和学习随机数(rand())和时间函数(time(NULL))

  Hello,各位!今天来通过一个小游戏引进一个知识点:生成随机数。下面进行介绍的所有概念都有对应的链接进行匹配,详细内容请点击链接进行观看。


生成随机数:

      先来介绍一下随机函数rand():https://legacy.cplusplus.com/reference/cstdlib/rand/?kw=rand,返回值为0到RAND_MAX(32767)的一个伪随机数。在使用rand函数之前,要先使用srand函数,设置随机数的生成起点。(这句话可能有些小伙伴们不懂,但往下继续看。)


      在来介绍一下srand()函数:https://legacy.cplusplus.com/reference/cstdlib/srand/?kw=srand,函数的参数为:伪随机数字的种子生成。


      上述两个函数都有提到:伪随机数字,那么伪随机数字究竟是什么?下面来跟着小编来一起探索。


伪随机数字:

      在计算机中不可能产生出完全随机的数,产生的是一个伪随机数。就比如,我们现在写一个程序要产生随机数,但理论上我们每一次去运行程序产生的随机数是一样的。代码如下:

int main()
{
  int i = 0;
  while (i < 3)
  {
    int ret = rand();
    printf("%d\n", ret);
    i++;
  }
  return 0;
}

微信截图_20230911221926.png

微信截图_20230911221933.png

所以光用一个rand()函数不能产生一个随机数的,为了每一次进行调用的时候,返回值都不一样,所以就有了种子的概念。


种子:

      (种子,不是bt的种子。)在前面的时候,已经介绍过了srand函数的参数是种子,作用是:使每次调用函数后,参数不同,从而使返回值都不一样。


      下面来进行手撕代码:(我们要习惯于学习和适应手撕一些库函数,以至于我们能更好的地使用它们)


用C语言来实现rand()函数和srand()函数:

先来看rand()函数:这个next的数据可以随便进行乘除,我感觉无所谓。

static unsigned long int next = 1;  //将数据放在静态区中
unsigned int randX() 
{
  next = next * 1103515245 + 12345;
  return (unsigned int)(next / 65536) % 32768;
}

在来看srand()函数:

void srandX(unsigned int seed)
{
  next = seed;
}

 讲完上述两个函数,接下来,进行讲述如何在电脑上真正地打印出随机数。在前面,我们每一次进行更换srand()函数的种子时,我们会发现生成的随机数再不断发生变化。而我们知道,一个变化的srand值可以对应不同的随机数值,而在电脑中,时间就是那个一直在变化的值。对于每个变化的时间,我们都有唯一的数字可以表示它,这个数字叫做时间戳。https://tool.lu/timestamp/


time函数:

      简单介绍一下这个函数,详细内容在:https://legacy.cplusplus.com/reference/ctime/time/?kw=time,该函数可以返回一个时间戳(当前机器的时间与计算机起始时间的一个差值)。


      time函数的参数是一个指针,如果你不想用的话,直接写成NULL即可。其返回类型为:time_t,所以在使用time函数时需要进行强制类型转换。

srand((unsigned int)time(NULL))

 谢谢各位的观看,我们下一篇文章见,欢迎大佬进行批评和指正。

相关文章
|
6月前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版操作报错合集之使用 Event Time Temporal Join 关联多个 HBase 后,Kafka 数据的某个字段变为 null 是什么原因导致的
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
122 0
|
6月前
|
SQL 消息中间件 Kafka
实时计算 Flink版操作报错合集之使用 Event Time Temporal Join 关联多个 HBase 后,Kafka 数据的某个字段变为 null 是什么原因导致的
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
84 0
|
前端开发
前端学习案例16-数组方法filter&undefined和null对比2
前端学习案例16-数组方法filter&undefined和null对比2
62 0
前端学习案例16-数组方法filter&undefined和null对比2
|
前端开发
前端学习案例15-数组方法filter&undefined和null对比 原
前端学习案例15-数组方法filter&undefined和null对比 原
68 0
前端学习案例15-数组方法filter&undefined和null对比 原
|
前端开发
前端学习案例17-数组方法filter&undefined和null对比3
前端学习案例17-数组方法filter&undefined和null对比3
56 0
前端学习案例17-数组方法filter&undefined和null对比3
|
前端开发
前端学习案例1-undefined和null
前端学习案例1-undefined和null
53 0
前端学习案例1-undefined和null
|
前端开发
前端学习案例2-undefined和null
前端学习案例2-undefined和null
81 0
前端学习案例2-undefined和null
|
前端开发
前端学习案例3-undefined和null
前端学习案例3-undefined和null
74 0
前端学习案例3-undefined和null
ts重点学习22-null和undefined
ts重点学习22-null和undefined
87 0
ts重点学习22-null和undefined
|
算法 Java 编译器
【小家java】对java中null、void、Void的理解学习
【小家java】对java中null、void、Void的理解学习

热门文章

最新文章