透过猜数字的小游戏来重新认识和学习随机数(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))

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

相关文章
|
前端开发
前端学习案例16-数组方法filter&undefined和null对比2
前端学习案例16-数组方法filter&undefined和null对比2
48 0
前端学习案例16-数组方法filter&undefined和null对比2
|
前端开发
前端学习案例15-数组方法filter&undefined和null对比 原
前端学习案例15-数组方法filter&undefined和null对比 原
52 0
前端学习案例15-数组方法filter&undefined和null对比 原
|
前端开发
前端学习案例17-数组方法filter&undefined和null对比3
前端学习案例17-数组方法filter&undefined和null对比3
46 0
前端学习案例17-数组方法filter&undefined和null对比3
|
前端开发
前端学习案例1-undefined和null
前端学习案例1-undefined和null
41 0
前端学习案例1-undefined和null
|
前端开发
前端学习案例2-undefined和null
前端学习案例2-undefined和null
63 0
前端学习案例2-undefined和null
|
前端开发
前端学习案例3-undefined和null
前端学习案例3-undefined和null
60 0
前端学习案例3-undefined和null
ts重点学习22-null和undefined
ts重点学习22-null和undefined
58 0
ts重点学习22-null和undefined
|
算法 Java 编译器
【小家java】对java中null、void、Void的理解学习
【小家java】对java中null、void、Void的理解学习
|
Java Kotlin 编译器
Kotlin学习(二)—— 基本语法,函数,变量,字符串模板,条件表达式,null,类型检测,for,while,when,区间,集合
一.基本语法 Kotlin的很多概念跟JAVA是有类似的,所以我应该不会像我的JAVA之旅一样那么的详细,但是不用担心,你会看的很明白的,我也是根据官方的文档来学习的 我们在IDEA中创建一个项目Kotlin02 1.
1594 0
|
3月前
|
机器学习/深度学习 SQL 关系型数据库
【MySQL进阶之路丨第十一篇】一文带你精通MySQL NULL值处理、正则表达式
【MySQL进阶之路丨第十一篇】一文带你精通MySQL NULL值处理、正则表达式
40 0