随机数的生成

有缺陷的生成方式

生成随机数可以使用 <stdlib.h> 里的 int rand(void); 函数实现!

注释:

C语言中还有一个 random() 函数可以获取随机数,但是 random() 不是标准函数,不能在 VC/VS 等编译器通过,所以比较少用。

缺点:

这种随机数生成方式得到的随机数往往只有一个不变的数字,那是因为生成随机数的种子是不变化的导致的!

这个种子在每次启动计算机时是随机的,但是一旦计算机启动以后它就不再变化了

也就是说,每次启动计算机以后,种子就是定值了,所以根据公式推算出来的结果(也就是生成的随机数)就是固定的

修补方案(重新播种)

以通过使用 <stdlib.h> 中的 void srand (unsigned int seed); 函数来重新播种。

但是,我们还需要一个实时变化的种子,不然每次生成的随机数还是固定的!那么,什么种子又简单有能实时变化呢?

当然,<time.h> 中的 time(); 函数就很好的满足了我们的需求!(time()函数这里不多做介绍,有兴趣的可以自行学习!)

完整代码

int a; srand((unsigned)time(NULL)); a = rand();

那么,这里的 int 类型变量 a 获得的就是一个真正的随机数,可以随时间的不同生成不同的数!

进阶

rand()%(n-m+1)+m 用于生成一个 m <= 随机数 <= n 的随机数。

注解(详细解释):

0+m <= rand()%(n-m+1)+m <= (n-m) + m

作者

SeaYJ

转载请注明出处!谢谢~

C语言 生成一个随机数的更多相关文章

  1. ORACLE 生成一个随机数

    ORACLE 如何产生一个随机数:DBMS_RANDOM--1.小数( 0 ~ 1) select dbms_random.value from dual ; --2.指定范围内的小数 ( 0 ~ 1 ...

  2. ios 生成一个动态的随机的头像/随机数的操作

    在写项目的时候,可能会遇到这种情况,用到集中随机的颜色,或者头像等, 首先:把所需要的图片放进一个数组当中 imgsAry = @[@"t1.png",@"t2.png& ...

  3. JS生成一个种子随机数(伪随机数)

    原文链接:https://geniuspeng.github.io/2016/09/12/js-random/ 最近有一个需求,需要生成一个随机数,但是又不能完全随机,就是说需要一个种子seed,se ...

  4. C语言基础(11)-随机数发生器

    一. rand() rand是一个C语言库函数,功能是生成一个随机数.rand需要一个不同的种子,才能生成不同的随机数. 二. srand(int seed) rand需要一个不同的种子,才能生成不同 ...

  5. JS一行代码,生成一个16进制随机颜色,简单粗暴。

    var color = '#'+ Math.random().toString(16).substr(-6); document.body.style.backgroundColor = color; ...

  6. 生成一个字母数字组合的n位随机码、随机数、随机字符串

    package com.cms.util; /** * 生成一个字母数字组合的n位随机码 * @author abc * */ public class CodeUtil { // private f ...

  7. C语言 猜数游戏--产生一个随机数

    #include <stdio.h> #include <time.h> #include <stdlib.h> int main(int argc, const ...

  8. C语言中生产随机数 rand()函数

    参考资料:C语言中产生随机数 一:如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间.RAND_MAX定义在stdl ...

  9. 转:在0~N(不包括N)范围内随机生成一个长度为M(M <= N)且内容不重复的数组

    1. 最朴素暴力的做法. void cal1() { , j = , num = ; int result[M]; result[] = rand() % N; //第一个肯定不重复, 直接加进去 ; ...

随机推荐

  1. tableau绘制热力地图

    一.右键国家地区和城市字段分别设置为地理角色-国家地区和城市 二.双击国家地区和城市添加到工作表 三.把订单id拖拽至标记卡的详细信息,标记改为密度显示,颜色设置为温度发散 四.最终整理结果如下图所示

  2. 谱聚类算法—Matlab代码

    % ========================================================================= % 算 法 名 称: Spectral Clus ...

  3. [BUUCTF]PWN——[BJDCTF 2nd]test

    [BJDCTF 2nd]test 步骤 根据题目,ssh连接一下靶机 登录成功后,ls看一下当前目录下的文件,根据提示可知,我们没法直接获取flag字符串,但是我们可以读取test的源码, test. ...

  4. 洛谷 11 月月赛 I Div.2 A [Kubic] Addition 题解

    Content 你有一个长度为 \(n\) 的序列 \(a\).你可以执行 \(n-1\) 次操作,每次操作中你可以选择一个位置 \(i\),并删除 \(a_i\) 和 \(a_{i+1}\),再在原 ...

  5. 使用JS对字符串进行MD5加密

    md5.js /* * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message * Digest Algorith ...

  6. springboot 配置devtools热部署(不用重启服务可以刷新页面)

    一.加入devtools依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifa ...

  7. Flex布局的详细总结

    Flex布局的详细总结 1.认识flex布局 flex布局(flexible布局,弹性布局),是目前web开发中使用的最多的布局方案. 两个重要概念: 开启flex布局的元素叫flex contain ...

  8. VS2015 up3激活key

    密钥 专业版:HMGNV-WCYXV-X7G9W-YCX63-B98R2 企业版:HM6NR-QXX7C-DFW2Y-8B82K-WTYJV

  9. 【C\C++笔记】指针输出字符串

    1错误代码 #include<stdio.h> int main(){ char a[]="hello"; char *p=a; for(int i=0;i<5; ...

  10. 「算法笔记」Link-Cut Tree

    一.简介 Link-Cut Tree (简称 LCT) 是一种用来维护动态森林连通性的数据结构,适用于动态树问题. 类比树剖,树剖是通过静态地把一棵树剖成若干条链然后用一种支持区间操作的数据结构维护, ...