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

 

       所以光用一个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))

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

猜你喜欢

转载自blog.csdn.net/2301_77868664/article/details/131793519
今日推荐