随机函数rand使用方法随机函数rand使用方法
大家好,今日小经来聊聊一篇关于随机函数rand使用方法,随机函数rand使用方法的文章,现在让我们往下看看吧!
1、在C语言中,我们一般使用stdlib.h头文件中的rand()函数来生成随机数。它的用法是:
2、int rand(void);
3、Void表示不需要传递任何参数。
4、C中还有一个random()函数可以获取随机数,但是random()不是标准函数,在VC/VS等编译器中无法传递,所以很少使用。
5、Rand()将随机生成一个介于0和rand _ max之间的整数。
6、RAND_MAX是stdlib.h头文件中的一个宏,用来表示RAND()可以返回的最大随机数。C语言标准没有规定RAND_MAX的具体值,只说它的值至少是32767。在实际编程中,我们不需要知道RAND_MAX的具体值,可以把它当作一个大数字来处理。
7、以下是随机数生成的一个示例:
8、#包含stdio.h
9、#包含stdlib.h
10、int main(){
11、int a=rand();
12、printf('%d\n ',a);
13、返回0;
14、}
15、193
16、多次运行上面的代码,你会发现每次生成的随机数都是一样的。这是怎么回事?为什么随机数不是随机的?
17、实际上rand()函数产生的随机数是伪随机的,是根据一个数值按照一定的公式计算出来的,我们称之为“种子”。并且种子随机数和种子随机数的关系是正态分布,如下图所示:
18、C语言随机数和种子之间是正态分布。
19、每次电脑启动时种子都是随机的,但电脑一启动就不变了。也就是说,每次启动计算机,种子是固定的,所以根据公式计算出来的结果(也就是生成的随机数)是固定的。
20、我们可以通过srand()函数重新“播种”,这样种子就会发生变化。srand()的用法是:
21、void srand(无符号int seed);
22、它需要一个无符号int类型的参数。在实际开发中,我们可以用时间作为参数。只要每次播种时间不一样,生成的种子就不一样,最终的随机数也不一样。
23、使用time.h头文件中的time()函数获取当前时间(精确到秒),如下所示:
24、srand((无符号)时间(空));
25、感兴趣的读者请猛戳这里自行学习time()函数的用法。本节不做过多解释。
26、在生成随机数之前,修改上面的代码以植入随机数:
27、#包含stdio.h
28、#包含stdlib.h
29、#包含时间. h
30、int main() {
31、int a;
32、srand((无符号)时间(空));
33、a=rand();
34、printf('%d\n ',a);
35、返回0;
36、}
37、在实际开发中,我们经常需要一定范围内的随机数,过大或过小都不符合要求。那么,如何产生一定范围内的随机数呢?我们可以采用取模块的方法:
38、int a=rand()% 10;//生成一个从0到9的随机数。注意,10是可以除尽的。
39、要指定上限和下限:
40、int a=rand()% 51 13;//生成一个13到63之间的随机数
41、解析:取模就是取余数。rand()Q 13可以看做两部分:rand()Q是生成0~50的随机数,后13位保证A最小只能是13,最大只能是50 ^ 13=63。
42、最后给出了产生13~63范围内随机数的完整代码:
43、#包含stdio.h
44、#包含stdlib.h
45、#包含时间. h
46、int main(){
47、int a;
48、srand((无符号)时间(空));
49、a=rand()% 51 13;
50、printf('%d\n ',a);
51、返回0;
52、}
53、有时候我们需要一组随机数(多个随机数)。我们如何创造它们?一个容易想到的解决方案是使用循环并对每个循环重新播种。请看下面的代码:
54、#包含stdio.h
55、#包含stdlib.h
56、#包含时间. h
57、int main() {
58、int a,I;
59、//使用for循环生成10个随机数
60、for(I=0;i 10i ) {
61、srand((无符号)时间(空));
62、a=rand();
63、printf('%d ',a);
64、}
65、返回0;
66、}
67、操作结果示例:
68、8 8 8 8 8 8 8 8 8 8
69、结果很奇怪。我们每个周期都重新播种。为什么生成的随机数都一样?
70、这是因为,for循环运行速度很快,一秒钟就运行完了,而time()函数得到的时间只能精确到秒,所以每次循环得到的时间是一样的,所以种子是一样的,随机数也是一样的。
本文到此结束,希望对大家有所帮助。
这篇好文章是转载于:知行礼动
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 知行礼动
- 本文地址: /knowledge/detail/tanhcijcik
-
发乎于情,止乎于礼发乎于情止乎于礼
xhjyxxw 04-05 -
通州博物馆 (通州博物馆预约 *** )
linglu123 09-16 -
儿童鼻子怎么画-画儿童的鼻子
dhys369 09-24 -
被自己养的猫咬出血了要打疫苗吗被自己养的猫咬出血了要打针吗
xhjyxxw 01-01 -
ladygaga快乐大本营
xhjyxxw 12-06 -
偷楼道内高跟鞋偷楼道原味高跟鞋
xhjyxxw 12-18 -
海棠果是什么意思 (海棠果是什么意思季节的水果)
linglu123 10-06 -
上海月天气预报30天官方 (上海月天气预报30天墨迹)
linglu123 11-12 -
苹果11的指纹在哪里设置 苹果11的指纹设置
tianqijun 10-10 -
哈弗h2蓝牙怎么连接手机听歌
dhys369 09-23