c中的随机函数,c++的随机函数
第一,随机函数不是ANSI C标准,所以不能在gcc,vc等编译器下编译传递。可以用c中的rand函数来代替实现。
1.c标准函数库提供了一个随机数生成器rand,它返回0-rand _ max之间均匀分布的伪随机整数。RAND_MAX必须至少为32767。rand()函数不接受参数,默认为1作为种子(即起始值)。随机数生成器总是从同一个种子开始,所以形成的伪随机数列是一样的,失去了随机的意义。(但这样便于程序调试)
2.C中的另一个函数srand()可以指定不同的数字(无符号整数参数)作为种子。但如果种子一样,伪随机数列也一样。一种方式是让用户输入种子,但还是不太理想。
3.最理想的是使用一个可变的数字,比如时间,作为随机数生成器的种子。时间的价值每时每刻都不一样。所以种子不一样,所以产生的随机数也不一样。
//C随机函数(VC程序)
#包含stdlib.h
#包含iostream.h
#包含时间. h
#定义最大100
void main()
{
srand((无符号)时间(空));//函数//srand()从当前时间开始生成一个随机种子。
for(int I=0;我我)
cout rand()% MAX endl;//MAX为最大值,其随机域为0~MAX-1。
}
二、兰德()的用法
Rand()不需要自变量,它会返回0到最大随机数之间的任意整数,最大随机数的大小通常是一个固定的大整数。这样,如果要生成从0到10的10个整数,可以表示为:
int N=rand()% 11;
这样,n的值就是一个从0到10的随机数。如果要生成1到10,情况是这样的:
int N=1 rand()% 10;
综上所述,可以表述为:
一个rand() % n
其中a是起始值,n是整数的范围。如果想要一个从0到1的小数,可以先得到一个从0到10的整数,然后把它们除以10得到10个随机小数。如果想得到一个从10到100的随机小数,需要得到10个从0到100的整数,然后除以100。其他情况取决于
诸如此类。
通常情况下,rand()每次运行时生成的随机数都与最后一个相同。这是为了方便程序的调试而特意设计的。要每次生成不同的随机数,可以使用srand(种子)函数将其随机化。不同的种子可以产生不同的随机数。
我们都说过了,还可以包含time.h的头文件,然后用srand(time(0))用当前时间随机化随机数发生器,保证每两次运行(只要两次运行间隔超过1秒)就能得到不同的随机数序列。
注意:rand()在0到RAND_MAX上产生一个随机数(32767),而32767不能被11整除。
因此int N=rand()% 11;得到的随机数从0到10不是均匀分布的,取9和10的概率比取0到8的概率少11/32767,约为1/2978;
所以,要取0~M的随机数,M小的话问题不大,但是M大的时候,比如M=30000,取0-2767的概率是取最后几个数的两倍,严重不符合随机分布!
第三,按要求设置概率。
比如设一个10%的概率问题,我们可以用rand()函数来实现。在if条件句判断中,由rand ()%获得的值是一个设定值,然后与另一个值做“==”运算。
if(1==rand())
{//达到10%的概率,在此编辑其余代码}
{//90%的失败概率,其余代码在此编辑}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。