随机数的使用,是不少在学C语言过程中进行一些小功能开发的同学的一个技术问题,今天我们为大家讲解如何在C语言中使用随机数。
通常最常用的方法是利用rand函数随机生成伪随机数,完成随机数的生成。注意这里的伪随机数不是假的!只是计算机根据自己的理论生成的随机数,不是“完美”的随机数,所以可以接受。
函数原型为:int rand(void);需要包含stdlib头文件,可以生成一个从0到RAND_MAX的数字,其中rand _ max是一个宏,作者在VC6下将其视为0x7fff。我建议你自己在电脑上做实验!
你可以在自己的电脑上测试。如果您发现任何新问题或有其他乐趣,请告诉我们!我们的QQ群号是496926338。群内有大量的项目开发视频和新手教学视频。
此时,您可能会遇到以下问题:
Q1:为什么每次生成的数字都一样?
A1:每次rand函数生成的数字都与所谓的“种子”有关。在使用RAND函数之前,您需要使用srand函数来播种(参见后面的内容)。如果没有调用,系统会默认为1,导致每次随机数相同。
Q2:为什么最大值是0x7fff?
A1:这可能取决于编译器环境。这里的作者是VC6,rand函数中定义的最大值是0x7fff,如下图所示:
问题3:如果我想生成一个特定范围内的数字,该如何写?
A3:多使用%余数运算符。例如:
生成10以内的数字,参考rand()
生成1到10之间的数字,参见rand() 1。
具体来说,要生成A和B之间的数字,可以参考RAND ()% (B-A 1) A。
更多的时候,我们希望每次运行产生的数字不同,所以需要配合srand函数来解决这个问题。具体原因可以参考rand函数和srand函数的实现细节来理解。代码如下:
然后如何使用srand函数,先看函数原型:
void srand(无符号种子);在使用rand函数之前,只需调用Srand函数传入一个种子。然而,事实上,当一个数字传入时,它经常随时产生。目前看来,只有使用系统时间作为种子才是最合适的智能写入方式,所以这里的srand的参数往往通过在时间(NULL)参数中作为种子来获取当前的系统时间产生不同的结果!
并注意同类型,srand((无符号)time(NULL));记得加上time.h的头文件!
测试代码如下:
你可以在自己的电脑上测试。如果您发现任何新问题或有其他乐趣,请告诉我们!