文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C++中怎么生成随机数

2023-06-17 17:23

关注

这篇文章将为大家详细讲解有关C++中怎么生成随机数,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

C++中常用rand()函数生成随机数,但严格意义上来讲生成的只是伪随机数(pseudo-random integral number)。生成随机数时需要我们指定一个种子,如果在程序内循环,那么下一次生成随机数时调用上一次的结果作为种子。但如果分两次执行程序,那么由于种子相同,生成的“随机数”也是相同的。

在工程应用时,我们一般将系统当前时间(Unix时间)作为种子,这样C++产生随机数更接近于实际意义上的随机数。给一下例程如下:

  1. #include < iostream> 

  2. #include < ctime> 

  3. #include < cstdlib> 

  4. using namespace std;  

  5. int main()  

  6. {  

  7. double random(double,double);  

  8. srand(unsigned(time(0)));  

  9. for(int icnt = 0; icnt != 10; ++icnt)  

  10. cout < <  "No." < <  icnt+1 < <  ": " < <  
    int(random(0,10))< <  endl;  

  11. return 0;  

  12. }  

  13. double random(double start, double end)  

  14. {  

  15. return start+(end-start)*rand()/(RAND_MAX + 1.0);  

  16. }  

  17.  

利用这种C++产生随机数的方法能不能得到完全意义上的随机数呢?似乎9有点多哦?却没有1,4,7?!我们来做一个概率实验,生成1000万个随机数,看0-9这10个数出现的频率是不是大致相同的。程序如下:

  1. #include < iostream> 

  2. #include < ctime> 

  3. #include < cstdlib> 

  4. #include < iomanip> 

  5. using namespace std;  

  6. int main()  

  7. {  

  8. double random(double,double);  

  9. int a[10] = {0};  

  10. const int Gen_max = 10000000;  

  11. srand(unsigned(time(0)));  

  12. for(int icnt = 0; icnt != Gen_max; ++icnt)  

  13. switch(int(random(0,10)))  

  14. {  

  15. case 0: a[0]++; break;  

  16. case 1: a[1]++; break;  

  17. case 2: a[2]++; break;  

  18. case 3: a[3]++; break;  

  19. case 4: a[4]++; break;  

  20. case 5: a[5]++; break;  

  21. case 6: a[6]++; break;  

  22. case 7: a[7]++; break;  

  23. case 8: a[8]++; break;  

  24. case 9: a[9]++; break;  

  25. default: cerr < <  "Error!" < <  endl; exit(-1);  

  26. }  

  27. for(int icnt = 0; icnt != 10; ++icnt)  

  28. cout < <  icnt < <  ": " < <  setw(6) < <  
    setiosflags(ios::fixed) < <  setprecision(2) < <  
    double(a[icnt])/Gen_max*100 < <  "%" < <  endl;  

  29. return 0;  

  30. }  

  31. double random(double start, double end)  

  32. {  

  33. return start+(end-start)*rand()/(RAND_MAX + 1.0);  

  34. }  

  35.  

关于C++中怎么生成随机数就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯