• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 知识库 知识库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

随机函数rand使用方法随机函数rand使用方法

武飞扬头像
xhjyxxw
帮助0

知行礼动

大家好,今日小经来聊聊一篇关于随机函数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
系列文章
更多 icon
同类精品
更多 icon
继续加载