内容来自《编程实战宝典》

首先来看函数原型

  1. int rand(void);
  2.  
  3. void srand(unsigned int seed);

1、rand()函数不需要任何参数,直接返回一个随机数,注意,这个随机数是有范围的,在0~RAND_MAX之间,RAND_MAX一般最小取值为32767,其具体值在头文件stdlib.h中进行定义

2、srand需要一个无符号整形数作为参数(种子),如果作为种子的无符号数相同,那么获取的随机数也就相同,注意:srand()必须配合rand()使用才能有效果 

下面是用法

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main()
  5. {
  6. int i;
  7.  
  8. cout << "测试rand()函数" << endl;
  9. cout << "随机数最大值RAND_MAX为:" << RAND_MAX << endl;
  10. for (i = 0; i < 3;i++)
  11. {
  12. cout << "num = " << rand() << endl;
  13. }
  14.  
  15. cout << "测试srand()函数" << endl;
  16. cout << "使用不同的种子生成随机数" << endl;
  17. for (i = 0; i < 3;i++)
  18. {
  19. srand(i);
  20. cout << "num = " << rand() << endl;
  21. }
  22.  
  23. cout << "使用相同的种子生成随机数" << endl;
  24. for (i = 0; i < 3;i++)
  25. {
  26. srand(2);
  27. cout << "num = " << rand() << endl;
  28. }
  29. }

 

以下是结果 

可以看出,在使用srand()函数时,如果使用相同的种子,那么最终用rand()函数所生成的随机数也相同

特定随机数的生成

为了使rand()函数生成的随机数在一定的范围内,可以使用如下表达式

  1. a + rand() % n

  

使用上述表达式生成的随机数的范围在a ~ (a + n)之间,其中a为生成的随机数的最小值,a + n - 1为最大值。

例子如下

  1. #include <iostream>
  2. using namespace std;
  1. int main()
  2. {
  3. cout << "生成特定范围内的随机数:" << endl;
  4. cout << "生成5 到 15 之间的随机数" << endl;
  5. for (int i = 0; i < 5;i++)
  6. {
  7. cout << "num = " << 5 + rand() % 10 << endl; //可生成5,6,7,...,14,不包含15
  8. }
  9. }

  

结果如下

使用系统时间作为种子生成随机数

为了让随机数更像随机数,降低人为因数的干扰,可以使用系统当前时间作为种子产生随机数

  1. #include <iostream>
  2. #include <time.h> //时间函数time()的头文件
  3. #include <windows.h> //暂停函数Sleep()的头文件
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8. cout << "使用系统时间作为种子生成随机数:" << endl;
  9. for (int i = 0; i < 5;i++)
  10. {
  11. Sleep(1000); //暂停一秒,避免因程序执行过快,5次循环中系统时间未发生变化,导致产生的随机数也相同
  12. srand((unsigned)time(NULL));
  13. cout << "num = " << rand() << endl;
  14. }
  15. return 0;
  16. }

  

结果

也可以使用系统时间作为种子生成特定范围内的随机数

  懒得举例了。。

C++用rand()和srand()生成随机数的更多相关文章

  1. C++ Generate Rand Number Array by "srand()" 生成随机数

    在C++中,我们有时想生成一个由随机数组成的数组,而且随机数的范围也可由我们来设定.那么我们就要用到srand()函数配合rand()来使用,参见如下代码: #include <vector&g ...

  2. 有关rand(),srand()产生随机数学习总结

    看到夏雪冬日的有关rand()和srand()产生随机数的总结,挺好的,学习了,然后又有百度其他人的成果,系统总结一下.本文转自夏雪冬日:http://www.cnblogs.com/heyongga ...

  3. C++中用rand()和srand()产生随机数方法介绍

    标准库<cstdlib>(被包含于<iostream>中)提供两个帮助生成伪随机数的函数:   函数一:int rand(void): 从srand (seed)中指定的see ...

  4. exce生成随机数

    有时候数据库没有数据,造数据专用. 来源于:http://jingyan.baidu.com/article/93f9803feba1f5e0e46f55f2.html 首先介绍一下如何用RAND() ...

  5. C++ 随机数rand()和srand()

    标准函数库中函数rand()可以生成0~RAND_MAX之间的一个随机数,其中RAND_MAX 是stdlib.h中定义的一个整数,它与系统有关. 例如在我的机器上,RAND_MAX=32767.可以 ...

  6. (5) openssl speed(测试算法性能)和openssl rand(生成随机数)

    1.1 openssl speed 测试加密算法的性能 支持的算法有: openssl speed [md2] [mdc2] [md5] [hmac] [sha1] [rmd160] [idea-cb ...

  7. sql server 生成随机数 rand函数

    https://docs.microsoft.com/en-us/sql/t-sql/functions/rand-transact-sql?view=sql-server-2017 在某一个区间内生 ...

  8. iOS开发-生成随机数

    有时候我们需要在程序中生成随机数,但是在Objective-c中并没有提供相应的函数,好在C中提供了rand().srand().random().arc4random()几个函数.那么怎么使用呢?下 ...

  9. loadrunner生成随机数

    loadrunner生成随机数一: 对网站注册进行压力测试时,需要对注册的用户名进行参数化,因为可以会用到大量的测试数据,所以选择通过生成随机数来进行参数化.最开始用loadrunner自带的参数随机 ...

随机推荐

  1. DZNEmptyDataSet框架阅读

      前段时间使用公司封装的空白页占位视图工具,工具是对DZNEmptyDataSet框架的封装.这个框架以前在许多项目也都用过,却没有认真阅读过源码,真的很遗憾.这两天趁五一放假有空,将DZNEmpt ...

  2. Spring学习记录4——Spring对DAO的支持

    Spring对DAO的支持 随着持久化技术的持续发展,Spring对多个持久化技术提供了集成支持,包括Hibernate.MyBatis.JPA.JDO:此外,还提供了一个简化JDBC API操作的S ...

  3. PTA - 堆栈模拟队列

    设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q. 所谓用堆栈模拟队列,实际上就是通过调用堆栈的下列操作函数: int IsFull(Stack S):判断堆栈S是否已满,返回1或0: in ...

  4. java jvm jre jdk三者的关系

    jvm:java虚拟机器(跨平台的关键) jre:java运行环境 jdk:java 开发工具包(kit) jdk>jre>jvm 环境变量配置 https://www.cnblogs.c ...

  5. git工作中总结

    # .克隆到本地 git clone url git clone -b 分支 url # 注意:克隆完成后,要删除.git隐藏文件夹 # .修改代码 # .生成master git init git ...

  6. 解决android sdk无法更新 更新慢的问题

    使用不同平台开发android应用的时候都要先搭建开发环境. 这里介绍一下搭建开发环境过程中更新和下载android sdk的一种方法: 第一步:配置android sdk manager的代理服务, ...

  7. Nmap使用教程(一)

    基本扫描技术 扫描单个网络 nmap 192.168.1.1/www.baidu.com 扫描多个网络/目标 nmap 192.168.1.1 192.168.1.2 #将扫描同个网段内不同的ip地址 ...

  8. Quartz cron 表达式(linux 定时器,java 定时任务,spring task定时任务)

    原文地址:https://blog.csdn.net/feng27156/article/details/39293403 Quartz cron 表达式的格式十分类似于 UNIX cron 格式,但 ...

  9. idea怎么关闭项目

    原文地址:https://jingyan.baidu.com/article/a3a3f8112169e78da2eb8a8d.html idea关闭项目可以按File-CloseProject按钮实 ...

  10. POJ Protecting the Flowers

    点击打开题目 题目大意 奶牛要吃花,FJ来赶牛,将第i头牛赶走要2*ti分钟,奶牛每分钟吃di个单位花,求花的最小损失 先赶吃花多的,Wrong Answer QAQ 我们可以算一算损失 设sum=d ...