C/C++产生随机数用到两个函数rand() 和 srand()。要用它们要有头文件#include<stdlib.h>

一. 不指定范围产生随机数

用到函数rand(),函数原型为int rand(),无参数。此时会产生一个介于0~RAND_MAX间的整数。RAND_MAX的大小可以查看,在include文件夹(linux在usr目录、windows在安装目录)的stdlib.h可以看到,linux下其值为2147483647(),其值与具体系统有关。

如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间。RAND_MAX定义在stdlib.h, 其值为2147483647。

参考代码:

#include<stdio.h>
#include<stdlib.h>int main()
{int i;for(i=0; i<10; i++)  //随机产生10个数。
        {printf("%d\n", rand());}return 0;
}

二. 指定范围产生随机数,产生0到某个数的随机数

没有现成的函数,但是可以通过取余得到。rand()%n,产生的是[0~n-1)之间的随机数,注意不包括n-1。

#include<stdio.h>
#include<stdlib.h>
#define Random(x) (rand() % x) //通过取余取得指定范围的随机数
int main()
{int i;int dis;               //产生[0, dis)之间的随机数,注意不包括disfor(i=0; i<10; i++){    printf("%d\n", Random(dis));}return 0;
}

说明下:假设dis取5,

注意一个问题:以上两个程序每次执行产生的结果是相同的,既是个伪随机数。rand()产生随机数与具体的种子有关,当不特意用srand()获取种子时,种子的默认值为1,因此需要用srand()函数产生不同的种子,srand函数原型:void srand(unsigned seed);为了产生不同的种子值,通常用时间作为参数值。例如对于一,修改程序如下:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{int i;srand((int)time(NULL));     //每次执行种子不同,生成不同的随机数for(i=0; i<10; i++){
          printf("%d\n", rand());  //因为执行太快,不到一秒钟,10个随机数是相通的,但是每次执行是不同的         }         return 0; }

三. 指定范围产生随机数

要求:指定范围(m,n),m、n关系不定,随机数包括m和n

想方设法,把范围(m,n)改变到(0,X),到最后再转移回去。三种情况

1:m=n此时不该叫随机数,这里返回m
2:m>n:标记pos=n,距离差dis=m-n+1     返回 rand() % dis + pos
3:n>m:标记pos=m,距离差dis=n-m+1     返回rand()%dis + pos
 

参考代码:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int Random(int m, int n)
{int pos, dis;if(m == n){return m;}else if(m > n){pos = n;dis = m - n + 1;return rand() % dis + pos;}else{pos = m;dis = n - m + 1;return rand() % dis + pos;}
}
int main()
{int i, m, n;srand((int)time(NULL));m = -3;n = -7;for(i=0; i<10; i++){printf("%d\n", Random(m, n));}return 0;
}

一个具体的例子:

比如要产生 [60-99]的随机数.
    使用rand()函数产生的随机数是从0(包括0)开始的我们思考: [ 0, ?] + 60 = [60,99]很明显,?应该是39.产生[0, 39]的随机数可以这样做:rand() % 40  得解.
[html] view plaincopy
  1. #include <iostream>
  2. using namespace std;
  3. #include <cstdlib>
  4. #include <ctime>
  5. int main()
  6. {
  7. srand(time(NULL));//种子不同生产的随机数不同
  8. for (int i=0; i!=50; ++i)
  9. {
  10. cout << rand() % 40 + 60 << endl;
  11. }
  12. }

升华

srand((unsigned)time(null));
(a,b): (rand()%(b-a+1))+a-1
[a,b): (rand()%(b-a))+a
(a,b]: (rand()%(b-a))+a+1
[a,b]: (rand()%(b-a+1))+a

C/C++产生随机数相关推荐

  1. js生成随机数函数,倒计时函数

    生成xxxx-xxxx-xxxx-xxxx形式的随机数 function randomString(n) {let chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmn ...

  2. Python:numpy实现生成随机数,忽略warnings

    ''' 作者:Dust ''' # 生成随机数:numpy下的random import numpy as npy import warnings warnings.filterwarnings(&q ...

  3. python中的随机函数怎么用_Python中随机数的使用方法有那些?

    随机数功能 1. choice(seq) 此处的 seq 必须是有序的序列,返回序列中的一个随机项. from random import * c1 = choice([1, 2, 3, 4, 5]) ...

  4. 量子计算机真随机数,量子真随机数发生器研究取得进展

    量子真随机数发生器研究取得进展 超高速真随机数发生器简化设计方案(上)与后处理方法(下) 信息科学技术学院郭弘教授课题组与物理学院张建玮副教授课题组开展合作,在用光学随机源设计研制量子真随机数发生器的 ...

  5. python中random模块中包含了随机数相关的功能函数_Python中random模块生成随机数详解...

    print random.randint(12, 20) #生成的随机数n: 12 <= n <= 20 print random.randint(20, 20) #结果永远是20 #pr ...

  6. c++11随机数产生器default_random_engine

    c/c++老版本的rand()存在一定的问题,在转换rand随机数的范围,类型或者分布时,常常会引入非随机性. 定义在<random> 中的随机数库通过一组协作类来解决这类问题:随机数引擎 ...

  7. 华为笔试题---明明的随机数

    题目 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着 ...

  8. 【C++】random随机数与【C++11】/rand()和srand()的用法

    文章目录 随机数 1. c++ 11 random随机数的使用(推荐使用) 1.1 1.2 1.3 1.4 2.1 C++中随机函数rand()和srand()的用法(老本版) 2.2 限制随机数的范 ...

  9. OpenCV 【十六】RNG随机数发生器putText绘制文字

    1 目的 使用 随机数发生器类 (RNG) 并得到均匀分布的随机数. 通过使用函数 putText 显示文字. 第一步是实例化一个 Random Number Generator(随机数发生器对象) ...

  10. ASP.net随机数应用实例

    家可能都用过Chinaren的校友录,不久前它的留言簿上加了一个防止灌水的方法,就是系统每次产生一个由随机的数字和字母组成的图片,每次留言必须正确地输入这些随机产生的字符,否则不能添加留言.这是一个很 ...

最新文章

  1. Vue多个单文件组件使用
  2. 32岁!清华大学博导,国家优秀青年科学基金获得者!
  3. VC解决error C2065: 'timeGetTime' : undeclared identi
  4. java输入字符数组_JAVA中怎样把用户输入的字符串存入数组中?
  5. hiho 1318 非法二进制数 dp
  6. WinCE下的GPIO中断的处理
  7. leetcode 268
  8. Shell脚本中循环语句for,while,until用法
  9. 使用文件监控对象FileSystemWatcher实现数据同步
  10. 优酷视频如何进行连续播放?
  11. Mysql 连接的使用
  12. linux下使用命令行分区、格式化文件系统、更新卷标名称
  13. 《Python神经网络编程》
  14. qmake manual=Variables
  15. Clojure 学习入门(11)- 宏 macro
  16. arduino和python对接_Python:与Arduino进行交互-后续
  17. logstash nginx error access 日志处理
  18. Jepack4.5.1上手动安装cuda10.0 cudnn 7, Jepack4.5.1 TX2 i安装pytorch1.6.0
  19. MATLAB矩阵运算部分知识总结
  20. excel怎么设置打印区域_淘宝卖家想要打印快递单怎么设置

热门文章

  1. RASPBERRY PI PICO 开发板 基础测试
  2. java如何监控cpu耗时_超级干货:3个性能监控和优化命令讲解
  3. 面向对象分析和设计的几个关键步骤_(豁然开朗)《面向对象分析与设计》读书笔记 (4)- 分类...
  4. python 控制库_python中实现自动化控制pyautogui库使用方法介绍
  5. FSBL UBOOT KERNELROOTFS 启动流程详解 (未完待续)
  6. python打印时间_在Python中定义Main函数(第二部分)
  7. java arraylist 序列化_无法序列化/反序列化ArrayList
  8. php左右值实现无限极分类,基于ThinkPHP的二叉树左右值无限极分类实现
  9. 半导体理论(第1部分)本征半导体
  10. HDLBits 系列(17) 计数器的级联实现1000分频的分频器