C语言 rand函数,srand函数 生成随机数用法详解
与随机数有关的两个函数,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函数 生成随机数用法详解相关推荐
- 随机数分布c语言,C++ piecewise_linear_distribution分段线性分布随机数用法详解
piecewise_linear_distribution 模板定义了浮点值的连续分布,它的概率密度函数是从一系列的样本值所定义的点得到的.每个样本值的权重都决定了它的概率密度值.图 1 展示了一个示 ...
- Python函数(函数定义、函数调用)用法详解
函数 函数就是一段封装好的,可以重复使用的代码,它使得我们的程序更加模块化,不需要编写大量重复的代码. 函数可以提前保存起来,并给它起一个独一无二的名字,只要知道它的名字就能使用这段代码.函数还可以接 ...
- Find_in_set()函数的使用及in()用法详解
这篇文章主要介绍了mysql中find_in_set()函数的使用以及in()用法详解,需要的朋可以参考下 MySQL手册中find_in_set函数的语法解释: FIND_IN_SET(str,st ...
- java 函数fun_c语言中fun用法详解_后端开发
Java Dao层的作用_后端开发 Dao层叫数据访问层,属于一种比较底层,比较基础的操作,可以具体到对于某个表或某个实体的增删改查,其Dao层的作用是对数据库的访问进行封装,从而不涉及业务,实现解耦 ...
- html js require函数,Require.js的基本用法详解
一:什么是require.js ①:require.js是一个js脚本加载器,它遵循AMD(Asynchronous Module Definition)规范,实现js脚本的异步加载,不阻塞页面的渲染 ...
- 【C语言】结构体定义 typedef struct 用法详解和用法小结
结构体定义 typedef struct 用法详解和用法小结 文章目录 结构体定义 typedef struct 用法详解和用法小结 0. 前言 1. 首先:在C中定义一个结构体类型要用typedef ...
- c语言写程序if else,if else用法详解,C语言if else用法完全攻略
if else 语句是一种选择结构,可以让代码选择执行.所谓选择执行,就是"某些代码可能执行,也可能不执行,有选择地执行某些代码". if 的最简单用法 if最简单的格式是: if ...
- C语言rand和srand函数的简单介绍和用法
目录 介绍: 用法: 介绍: 在c语言中,我们想要在一个范围内随机生成一个数字,我们就需要用到rand函数,生成大小为0到32767的整数,但仅靠rand生成的数是伪随机的数,如下: 第一次运行n次: ...
- python装饰器原理-Python函数装饰器原理与用法详解
本文实例讲述了Python函数装饰器原理与用法.分享给大家供大家参考,具体如下: 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值 ...
最新文章
- clone git 修改保存路径_Git和Github详细入门教程(别再跟我说你不会Git和Github)
- 少儿编程语言python-2019儿童编程语言大全
- [Python]再学 socket 之非阻塞 Server
- 波束形成、回声消除、声源定位及端到端等语音信号处理算法
- python中的json_python中json的使用
- HDU 3400 Line belt【三分法】
- Docker 环境下如何 安装 Zookeeper
- public,protected,private
- ios与android设备即时语音互通的录音格式预研说明
- 部署Symantec Antivirus 10.0网络防毒服务器之三
- 解决vue中axios同步的问题
- Code Snippet 插件 使用——代码高亮
- mysql可以建立个人数据库吗_mysql怎么建立数据库?
- 微信小程序地图点聚合
- 海森堡量子力学与计算机,量子力学诞生后的120年,没有人真正懂他
- super expression must either be null or a function 报错解决方法
- 高质量通信gRPC入门,有了它,谁还用Socket
- 【老九学堂】【Java】Java环境之JDK配置
- c#实现任务栏气泡提醒
- Ant Design Vue 相关介绍