首页 > 编程知识 正文

c语言生成1~100随机数,随机函数的原理

时间:2023-05-03 20:33:39 阅读:107242 作者:1211

如何生成随机数,新鲜的洋葱在百度后可能会看到这样的代码。

srand((unsignedint ) time ) ) null ); int ret=rand (; 那么随机数是如何产生的呢? 我相信善于探索的你一定想知道这里的原理。 那么,别说话,进入正题吧。

一个随机数到底是如何生成的:

说到生成随机数,我们知道使用rand函数,但是这个函数是怎么使用的呢? 打开MSDN,看看如何使用此函数

这里的第一条语句说rand函数返回一个从0到RAND_MAX的整数,那么RAND_MAX的值是多少呢? 复制到编译器中,检查它,右键单击它并导航到定义,可以看到此语句

实际上,RAND_MAX的值为0x7fff,将转换为十进制数,即32767,因此rand函数可以随机生成0到32767之间的整数。 新鲜的洋葱在编译器上一试

当新鲜洋葱天真地以为你成功生成了随机数,当年再次执行其代码时,你会发现它还在生成这些随机数。 这意味着第一个执行代码的时间码生成了随机数,但在第二次执行时会生成相同的随机数。

此时,请记住在rand函数的描述中还有一个词。 在调用rand函数之前,使用srand函数设置生成随机数的起点。 在MSDN中检查srand函数:

可以看到srand函数的参数是无符号整数,没有返回值。 在这里测试一下,可以将无符号整数传递给srand函数

但是,我们再次运行程序时仍然是这些随机数。 更改srand函数中输入的值时,发现给定的随机数已更改。

所以我们每次运行程序时,只要向srand函数传递与上次不同的数字就可以了,但是我们会生成随机数。 现在又需要随机数。 这不是死循环吗?

这个时候,我们觉得电脑里总是有变化的东西。 那是时间。 这个时候,我们有必要介绍时间戳这个概念。

时间戳:当前时间和计算机开始时间之差。 单位为秒。

计算机开始时间: 1970-01-01 08:00:00

因为每个秒的时间戳都不一样,所以只需将时间戳传递给srand函数。 此时,需要使用time函数。 time函数的返回值是时间戳。

其中,您可以看到time函数的参数是time_t类型指针,返回值是time_t类型。 您也可以将time_t放入编译器中,右键单击,然后单击以移动到定义中。

正如您所看到的,实际上time_t只是int类型由typedef重新定义(即有单独的名称)。

另一方面,也不需要将指针传递给time函数,因此只需将指针传递给time函数NULL,即time(NULL )。 但是,由于srand函数的参数是unsigned int类型,要将time函数的返回值传递给srand函数,必须强制time函数的返回值为unsigned int类型,即(unsigned int ) time ) nunue

这样,每次执行代码时得到的就是真正意义上的随机数。

如何生成规定位数的随机数:

生成两个人的随机数:

只需将得到的随机数相对于90取馀数,得到的数就是0-89的数字,那时再加上10就是10-99的数字。

生成三位数的随机数:

道理和生成两个人的随机数一样。 我不再叙述了。

关于报道中使用的MSDN,如果没有博友们也可以搜索http://www.cplusplus.com。 也可以显示相关函数的信息。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。