与随机数有关的两个函数,srand()rand(),这两个函数都包含"stdlib.h"头文件里

srand()函数是随机数发生器,使得每轮产生的随机数列都不相同。

        rand()函数产生随机数,返回一个[0,RAND_ MAX]间的随机整数。

(  RAND_ MAX的值在"stdlib.h"中有定义。)

 int rand():返回值为随机值,参数为空,通过 rand 函数就会产生一个随机数。

void srand(unsigned int seed):返回值为空, 就是设置随机种子的,当我们不设置随机种子的时候,默认设置的种子为 1,也就是srand(1)。

使用rand()时,如果不设定随机数序列标签则只会得到重复的随机数序列,其叫做伪随机数。

原因是种子在每次启动计算机时是随机的,但是一旦计算机启动以后它就不再变化了;也就是说,每次启动计算机以后,种子就是定值了,所以根据公式推算出来的结果(也就是生成的随机数)就是固定的

srand()怎样控制rand()的??

int seed;
srand(seed);
rand();
seed是种子
srand(seed)为rand()产生种子
rand()产生随机数 返回值就是随机数 可以调用很多次 每次值都不同

seed的作用:srand函数的作用是根据参数seed,设置一个随机起始点,而rand函数根据这个起始点,发生随机数序列。

默认的随机种子为1。如果随机种子一样,rand函数所发生的随机序列也一样。

因此,为使每次程序运行都能发生不同的随机序列,每次都应发生一个不同的种子参数

如下代码:

    #include <stdio.h>#include <stdlib.h>int main(){int a = rand();printf("%d\n",a);return 0;}

怎么解决呢??

它需要一个 unsigned int 类型的参数。在实际开发中,我们可以用时间作为参数,只要每次播种的时间不同,那么生成的种子就不同,最终的随机数也就不同。

#include<stdlib.h>
#include<stdio.h>
#include<time.h>int main(){int i;srand((unsigned) (time(NULL)));for(i = 0; i <10;i++){printf("%d\n",rand());}return 0;
}

如何限定范围呢???

很容易想到的一种解决方案是使用循环,每次循环都重新播种

比如想要生成1-10的随机数,代码如下:


#include<time.h> #include<stdlib.h>int main(){srand((int)time(0));while (1){printf("rand_num = %d\n", rand() % 10 + 1);getchar();}system("pause");return 0;}

以此类推,当需要生成a-b的随机数的时候,可以使用rand()%(b-a+1)+a求解。

生成互不相同的N个随机数:


#include<stdio.h>#include<stdlib.h>#define NUM 100int main(int argc,char *argv[]){int a[NUM] = {0};    //数组a[NUM]存放标志位,0表示还没有生成,1表示已经存在。int i = 0,n;srand(time(NULL));   //随机种子,不加这句每次生成的随机数都一样。while(1){n = rand()%NUM;if(a[n] == 0){a[n] = 1;i++;printf("%4d",n);}if(i == NUM)break;} printf("\n");return 0;}

掌握了这个小知识,就可以设计抢红包的算法了,加油哈!!!

留下赞

C语言 rand函数,srand函数 生成随机数用法详解相关推荐

  1. 随机数分布c语言,C++ piecewise_linear_distribution分段线性分布随机数用法详解

    piecewise_linear_distribution 模板定义了浮点值的连续分布,它的概率密度函数是从一系列的样本值所定义的点得到的.每个样本值的权重都决定了它的概率密度值.图 1 展示了一个示 ...

  2. Python函数(函数定义、函数调用)用法详解

    函数 函数就是一段封装好的,可以重复使用的代码,它使得我们的程序更加模块化,不需要编写大量重复的代码. 函数可以提前保存起来,并给它起一个独一无二的名字,只要知道它的名字就能使用这段代码.函数还可以接 ...

  3. Find_in_set()函数的使用及in()用法详解

    这篇文章主要介绍了mysql中find_in_set()函数的使用以及in()用法详解,需要的朋可以参考下 MySQL手册中find_in_set函数的语法解释: FIND_IN_SET(str,st ...

  4. java 函数fun_c语言中fun用法详解_后端开发

    Java Dao层的作用_后端开发 Dao层叫数据访问层,属于一种比较底层,比较基础的操作,可以具体到对于某个表或某个实体的增删改查,其Dao层的作用是对数据库的访问进行封装,从而不涉及业务,实现解耦 ...

  5. html js require函数,Require.js的基本用法详解

    一:什么是require.js ①:require.js是一个js脚本加载器,它遵循AMD(Asynchronous Module Definition)规范,实现js脚本的异步加载,不阻塞页面的渲染 ...

  6. 【C语言】结构体定义 typedef struct 用法详解和用法小结

    结构体定义 typedef struct 用法详解和用法小结 文章目录 结构体定义 typedef struct 用法详解和用法小结 0. 前言 1. 首先:在C中定义一个结构体类型要用typedef ...

  7. c语言写程序if else,if else用法详解,C语言if else用法完全攻略

    if else 语句是一种选择结构,可以让代码选择执行.所谓选择执行,就是"某些代码可能执行,也可能不执行,有选择地执行某些代码". if 的最简单用法 if最简单的格式是: if ...

  8. C语言rand和srand函数的简单介绍和用法

    目录 介绍: 用法: 介绍: 在c语言中,我们想要在一个范围内随机生成一个数字,我们就需要用到rand函数,生成大小为0到32767的整数,但仅靠rand生成的数是伪随机的数,如下: 第一次运行n次: ...

  9. python装饰器原理-Python函数装饰器原理与用法详解

    本文实例讲述了Python函数装饰器原理与用法.分享给大家供大家参考,具体如下: 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值 ...

最新文章

  1. clone git 修改保存路径_Git和Github详细入门教程(别再跟我说你不会Git和Github)
  2. 少儿编程语言python-2019儿童编程语言大全
  3. [Python]再学 socket 之非阻塞 Server
  4. 波束形成、回声消除、声源定位及端到端等语音信号处理算法
  5. python中的json_python中json的使用
  6. HDU 3400 Line belt【三分法】
  7. Docker 环境下如何 安装 Zookeeper
  8. public,protected,private
  9. ios与android设备即时语音互通的录音格式预研说明
  10. 部署Symantec Antivirus 10.0网络防毒服务器之三
  11. 解决vue中axios同步的问题
  12. Code Snippet 插件 使用——代码高亮
  13. mysql可以建立个人数据库吗_mysql怎么建立数据库?
  14. 微信小程序地图点聚合
  15. 海森堡量子力学与计算机,量子力学诞生后的120年,没有人真正懂他
  16. super expression must either be null or a function 报错解决方法
  17. 高质量通信gRPC入门,有了它,谁还用Socket
  18. 【老九学堂】【Java】Java环境之JDK配置
  19. c#实现任务栏气泡提醒
  20. Ant Design Vue 相关介绍

热门文章

  1. 程明明:面向弱监督的图像理解
  2. MySQL运维和第三方工具
  3. VSCODE snippet的用法
  4. 2019适合创业的项目有哪些呢
  5. 【正点原子FPGA连载】第八章LED灯闪烁实验 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0
  6. 1954北京坐标系和西安1980坐标系
  7. Mysql 数据库中怎么实现分页
  8. 一个世界级水准的信创云,会是什么样子?
  9. c# 获取屏幕DPI
  10. Mac ls 出现问号 “?“