大家好,本文主要讲C语言中随机数rand()函数的详细讲解。有兴趣的同学过来看看,如果对你有帮助记得收藏。
生活中很多场景都需要产生随机数,比如抽奖、打牌、游戏。C语言标准库函数中有一个专门用来生成随机数的函数rand。其功能原型如下:
int _ _ cdecl rand(void);
rand函数没有参数,其返回值是一个随机数。这里有一个简单的例子来测试rand功能。
#包含stdio.h
#包含stdlib.h
int main(int argc,char** argv) {
int I;
I=rand();
printf('%d ',I);
返回0;
}
直接调用rand函数生成一个随机数并打印出来。运行结果如下:
此时产生的随机数是41。下面再来看看几个随机数。
for循环产生十个随机数。从打印结果可以看出,第一个随机数是41,其他9个数据都比较大。将随机次数更改为15次,然后再次测试。
此时生成了15个随机数,但是对比10个随机数可以发现,生成的随机数的前10个数和最后一个是一模一样的。再次运行程序后,生成的随机数和上次一模一样。
这一刻的原因是什么?随机数生成函数rand是否存在bug?
其实rand函数产生的随机数是伪随机的。它基于一个数值,然后通过公式计算一个值,计算结果作为随机数返回。这个固定参考的值称为“种子”。电脑每次启动都会生成一个种子,然后在以后的操作中这个种子不会改变。所以每次执行rnad函数,它的参考种子值是固定的,所以每次产生的随机数是固定的。如果每次生成的随机数不一样,那么每次生成随机数之前需要改变种子的值。
的种子值由srand函数生成。该函数的原型如下:
void _ _ cdecl srand(unsigned int _ Seed);
该函数没有返回值,其参数是需要设置的种子值。代码中还添加了修改种子的函数。
将种子值设置为10,然后生成10个随机数。
将种子值设置为20,然后生成10个随机数。
可以看出,当种子的值发生变化时,生成的随机数也发生变化。如果程序需要重复使用随机性,那么随机种子的值就不可能是一个常数值,它必须时刻变化,这样产生的随机数才能时刻变化。在系统中,时刻变化的数字,你首先能想到的是时间,因为时间是实时变化的,不可能有相同的值。
则可以获得系统时间,然后将其用作随机数的种子。时间功能time的原型如下:
_ _ CRT _ INLINE Time _ t _ _ cdecl Time(Time _ t * _ Time){ return _ Time 64(_ Time);}
调用time函数后,会返回当前系统时间的秒,其参数可以直接设置为NULL。
调用time函数时,需要添加头文件time.h以时间值作为随机种子,这样每次生成的随机数都会不一样。但是从上面的输出结果可以看出,每次生成的随机数大小变化很大。想把随机数的大小控制在一定范围内,应该怎么做?
要控制数字的范围,可以使用数学余数运算。如果想把生成的数控制在10以内,就把生成的数除以10,然后取余数。以便余数的大小不会超过10。
这里把生成的随机数除以100取余数,这样最终生成的随机数会在100以内。
本文关于C语言中随机数rand()函数的详细讲解到此为止。有关C语言中rand()函数的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。