C/C++ 使用rand 函数生成随机数教学与示例代码
本篇文件介绍C/C++中使用 rand 函数生成随机数的方法,并且提供各种常用的示例代码。
在撰写C/C++程序时,如果需要产生一些简单的随机数,最方便的作法就是使用 rand 这个随机数生成函数,以下介绍这个函数的相关用法与示例。
rand只能提供基本的随机数,如果您需要更进阶的功能或是品质比较好的随机数,建议改用C++的 函数库。基本随机数生成方法C语言中若要产生随机数,可以使用 stdlib.h 中的 rand 函数,而在调用 rand 函数之前,要先使用 srand 函数设定初始的随机数种子:
#include#include/*乱数相关函数*/#include/*时间相关函数*/intmain(){/*设定随机数种子*/srand(time(NULL));/*生成随机数*/intx=rand();printf("x=%d ",x);return0;}执行后的输出为:
x=159136674rand所产生的随机数是一个整数,其值介于 0 到 RAND_MAX 之间(最小是0,最大则为RAND_MAX),若想要看 RAND_MAX 的实际数值,可以用 printf 将其输出后查看。
printf("RAND_MAX=%d ",RAND_MAX);在C++中的随机数生成方式也跟C几乎相同,只是标头档换一下而已:
#include#include/*随机数相关函数*/#include/*时间相关函数*/intmain(){/*固定随机数种子*/srand(time(NULL));/*生成随机数*/intx=rand();std::coutsrand(time(NULL));/*产生[0,1)的浮点数随机数*/doublex=(double)rand()/(RAND_MAX+1.0);printf("x=%f ",x);return0;}上面的代码中我们将 rand 函数所产生整数除以RAND_MAX+1.0,就可以得到 [0,1) 这个范围的浮点数随机数(也就是0srand(time(NULL));/*指定随机数范围*/intmin=4;intmax=10;/*产生[min,max]的整数随机数*/intx=rand()%(max-min+1)+min;printf("x=%d ",x);return0;}
这样会将 rand 产生出来的整数转换为 [min,max] 的整数随机数(也就是minreturnrand();}else{/*计算可以被整除的长度*/longend=RAND_MAX/n;assert(end>0L);end*=n;/*将尾端会造成偏差的几个随机数去除,若产生的乱数超过limit,则将其舍去*/intr;while((r=rand())>=end);returnr%n;}}
使用这个 randint 函数产生特定范围整数随机数:
/*指定随机数范围*/intmin=4;intmax=10;/*产生[min,max]的整数随机数*/intx=randint(max-min+1)+min;这种作法就好像要把 11 个球要放进 3 个篮子里,而最后多出来的 2 颗球就直接丢掉,确保每个篮子都一样只有 3 颗,这样大家的机率就可以相等了。
这种使用截断分布(truncateddistribution)来校正机率的方式虽然在理论上是正确的,但是 rand 函数是使用LCG(LinearCongruentialGenerator)来产生随机数的,他的优点只是快速、方便而已,但它本身所产生的随机数品质没有非常好,再怎么校正效果都有限,若需要高品质的随机数,请改用C++11标准的 函数库。
C语言之随机数函数( rand() )的使用方法
文章出自个人博客https://knightyun.github.io/2018/04/25/c-rand-number,转载请申明。
在程序设计中,难免会使用到随机值函数,其原理与语法大多类似,接下来以C语言为例介绍其随机值函数rand()用法。
原理引用百度百科,首先,需要包含头文件:
#includerand()函数是按指定的顺序来产生整数,因此每次执行上面的语句都打印相同的两个值,所以说C语言的随机并不是真正意义上的随机,有时候也叫伪随机数,使用rand()生成随机数之前需要用随机发生器的初始化函数srand(unsignedseed)(也位于stdlib.h中)进行伪随机数序列初始化,seed又叫随机种子,通俗讲就是,如果每次提供的seed是一样的话,最后每一轮生成的几个随机值也都是一样的,因此叫伪随机数,所以需要每次提供不同的seed达到完全的随机,我们通常用时间函数time(NULL)作为seed,因为时间值每秒都不同,这个函数需要包含以下头文件:
#include理论太泛,下面用例子分析理解。
举例分析先来理解以下伪随机数,编译以下代码:
#include#include#includeintmain(){srand(1);inti;for(i=0;i