C语言 生成一个随机数

随机数的生成

有缺陷的生成方式

生成随机数可以使用 <stdlib.h> 里的 int rand(void); 函数实现!

注释:
C语言中还有一个 random() 函数可以获取随机数,但是 random() 不是标准函数,不能在 VC/VS 等编译器通过,所以比较少用。

缺点:
这种随机数生成方式得到的随机数往往只有一个不变的数字,那是因为生成随机数的种子是不变化的导致的!

这个种子在每次启动计算机时是随机的,但是一旦计算机启动以后它就不再变化了

也就是说,每次启动计算机以后,种子就是定值了,所以根据公式推算出来的结果(也就是生成的随机数)就是固定的

修补方案(重新播种)

以通过使用 <stdlib.h> 中的 void srand (unsigned int seed); 函数来重新播种。

但是,我们还需要一个实时变化的种子,不然每次生成的随机数还是固定的!那么,什么种子又简单有能实时变化呢?

当然,<time.h> 中的 time(); 函数就很好的满足了我们的需求!(time()函数这里不多做介绍,有兴趣的可以自行学习!)

完整代码

int a; srand((unsigned)time(NULL)); a = rand();

那么,这里的 int 类型变量 a 获得的就是一个真正的随机数,可以随时间的不同生成不同的数!

进阶

rand()%(n-m+1)+m 用于生成一个 m <= 随机数 <= n 的随机数。

注解(详细解释):

0+m <= rand()%(n-m+1)+m <= (n-m) + m

作者

SeaYJ
转载请注明出处!谢谢~

上一篇:systemverilog中rand机制的 $urandom_range()函数


下一篇:C 产生随机数