如何生成1和3之间的随机数? 有了这个功能,我得到有时0(我只希望有1,2或3):1和3之间的随机数
ziehen=rand() % 3 + 1;
为什么我要在主程序中添加函数srand(0)? 我已添加
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
到Libaries。这是足够的还是我需要更多?
如何生成1和3之间的随机数? 有了这个功能,我得到有时0(我只希望有1,2或3):1和3之间的随机数
ziehen=rand() % 3 + 1;
为什么我要在主程序中添加函数srand(0)? 我已添加
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
到Libaries。这是足够的还是我需要更多?
该代码永远不会返回0. rand()总是返回一个介于0和RAND_MAX之间的数字。
模操作返回一个介于0和2之间的值。加1会得到你想要的结果。 不需要括号。模数等于上述加数。
你不必添加srand(0),但是如果你这样做,你总会得到相同的数字序列。阅读文档。
从技术上讲,你称之为“模运算”被称为“余数”。它返回-2和2之间的值(提示)。 –
但是我们只有0和RAND_MAX之间的值。这怎么可能是消极的? – xMRi
是的,我想知道OP如何管理它(并且OP说包含了stdlib.h,它应该提供'rand()'的原型 - 缺少原型是我想到的方法之一) –
您必须从不使用模数来减少输出的周期性rand()
。原因?这是因为标准线性同余发生器的低位比较高位比较不随机:模数丢弃高位。
最好的办法是使用(3.0 * rand()/(RAND_MAX + 1.0)) + 1.0;
。通过将输出分配给整型,隐式将其转换为int
。
RAND_MAX
由C标准定义,它的值是依赖于实现
_'or我需要更多?'_是否行得通? –
啊,好老的剩余技术。请阅读http://ericlippert.com/2013/12/16/how-much-bias-is-introduced-by-the-remainder-technique/ – harold
获取rand()的结果副本,并将其用于计算ziehen。当ziehen为零时打印它的值。看看哪些数值会让你零。 – cup