原理:

引用自百度百科:

所需包含的头文件:

 #include <stdlib.h>

rand()函数是按指定的顺序来产生整数,因此每次执行上面的语句都打印相同的两个值,所以说C语言的随机并不是真正意义上的随机,有时候也叫伪随机数,使用 rand() 生成随机数之前需要用随机发生器的初始化函数 srand(unsigned seed)(也位于 stdlib.h 中) 进行伪随机数序列初始化,seed 又叫随机种子,通俗讲就是,如果每次提供的 seed 是一样的话,最后每一轮生成的几个随机值也都是一样的,因此叫伪随机数,所以需要每次提供不同的 seed 达到完全的随机,我们通常用时间函数 time(NULL) 作为 seed ,因为时间值每秒都不同,这个函数需要包含以下头文件:

#include <time.h>

案例分析:

 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand();
int i;
for (i = ; i < ; i++)
  printf("%d ", rand()%);
}

以上是用伪随机数的代码,运行结果:

         

无论运行多少次,结果都依然是以上随机数,不会改变,因为每次设置的种子 seed 都是 1。

如把 seed 换成 time(NULL),每次就不一样了,如下:

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

运行结果:

                    

这里的 time(NULL) 的结果是一个类似于 1524655706 的数字,并且每秒都在递增 1,也就达成了 srand() 的 seed 不断变化的目的,不断生成新的随机数。但是我们自身在用rand()函数时,即使不调用srand()也没事,因为系统好像会自动调用。

拓展:

注意一下函数 rand() 函数括号内不需要加参数,直接调用 rand() 的话会生成下面这样的数:

         

所以我们想要生成指定范围的随机数的话就需要使用到求余运算符 %,这里有个规律:例如我们需要 0–10的随机数时,就写成 rand()%11,0–100就写成 rand()%101,就是运算符后的数字需要比需求范围极值大 1,这其实就是取余运算的原理。举个例子:对10取余,余数就是在0~9的范围。

参考:

https://blog.csdn.net/knigh_yun/article/details/80082944

随机函数rand()的使用方法——C语言的更多相关文章

  1. 随机函数rand()和srand()

    C++中随机函数rand()和srand()的用法 一.rand() 函数名:   rand     功   能:   随机数发生器   用   法:   int rand(void); 所在头文件: ...

  2. awk之随机函数rand()和srand()

    awk之随机函数rand()和srand() 分类: LINUX 文件: abcdefg ...... 现在想要随机抽取5列组成下面的内容,允许重复: cffab ...... awk -F '' ' ...

  3. Mysql 随机函数 rand()

    rand() 函数主要有两个用处: 1.是产生随机数, 2.是随机排序(在数据较大的时候会变成性能杀手) 实例: 1.产生一个随机数,默认0~1之间的浮点数 SELECT RAND( ) 2.参数指定 ...

  4. C语言之随机数函数( rand() )的使用方法

    文章出自个人博客https://knightyun.github.io/2018/04/25/c-rand-number,转载请申明. 在程序设计中,难免会使用到随机值函数,其原理与语法大多类似,接下 ...

  5. 【转】随机函数 rand() srand() 以及seed的原理

    from:http://blog.csdn.net/feige2008/article/details/6943885   标准库<cstdlib>(被包含于<iostream> ...

  6. 【MFC】利用双缓冲和随机函数rand()实现蒲公英飞舞

    原始日期:2014-05-29 22:44 这几天有些懒,几乎没怎么学MFC了,好容易有个题目:用双缓冲实现蒲公英飞舞,想来想去也没想到好方法,索性动手开始 写了 ,这一写,得,出来了,呵呵,无意中产 ...

  7. discuz 模板中使用方法和语言标签

    一.如何调用方法? 关于模板中eval的使用{eval php 语句} 比如:<!--{eval echo "Hello World!"}--> 例如在discuz的手 ...

  8. discuz 模板中如何使用方法和语言标签?

    第一个问题:如何调用方法? 关于模板中eval的使用{eval php 语句}比如:<!--{eval echo "Hello World!"}--> 工作中遇到一个小 ...

  9. 随机函数rand()

    一.C++中不能使用random()函数 random函数不是ANSI C标准,不能在gcc,vc等编译器下编译通过.但在C语言中int random(num)可以这样使用,它返回的是0至num-1的 ...

随机推荐

  1. hdu 1799 循环多少次?(组合)

    题目是这样的:   我们知道,在编程中,我们时常需要考虑到时间复杂度,特别是对于循环的部分.例如, 如果代码中出现 for(i=1;i<=n;i++) OP ; 那么做了n次OP运算,如果代码中 ...

  2. A. Yellow Cards ( Codeforces Round #585 (Div. 2) 思维水题

    ---恢复内容开始--- output standard output The final match of the Berland Football Cup has been held recent ...

  3. Spring AOP复习

    最近在翻<Spring In Action>Spring 实战这本书,重新了解了一下AOP的概念和思想并写了一个小Demo示例,记录在这里: 环境:intelliJ IDEA 2018.M ...

  4. DQL多表查询

    DQL多表查询 一.多表查询实现多个表之间查询数据 1.交叉连接笛卡尔积:A表中的每一行匹配B表中的每一行基本结构:select [数据库名1.]表名1,属性名1,......, [数据库名.]表名. ...

  5. SpringBootStarter种类

    Name Description spring-boot-starter 核心starter, 包括auto-configuration支持, logging和YAML 支持 spring-boot- ...

  6. git push的时候.gitignore不起作用的解决方法

    问题的原因 这是因为在你添加.gitignore之前已经进行过push操作,有些文件已经纳入版本管理了. 解决方法 我们就应该先把本地缓存删除,然后再进行git的push,这样就不会出现忽略的文件了. ...

  7. 翻译——3_Gaussian Process Regression

    使用不同的机器学习方法进行预测 续上篇2_Linear Regression and Support Vector Regression 高斯过程回归 %matplotlib inline impor ...

  8. 异常依然执行{try..catch语句块..}的后续代码

    测试异常依然执行{try..catch语句块..}的后续代码: private static Integer testThrows() throws Exception{ Integer result ...

  9. 5. react 基础 - 组件拆分 和 组件传值

    1.将 todoList 进行拆分 创建 编写TodoList.js import React, {Component, Fragment} from 'react';import TodoItem ...

  10. Android studio中2种build.gradle文件介绍

    根目录下的build.gradle通常不需要修改这个文件中的内容,除非需要添加一些全局的项目构建配置 buildscript { repositories { google() //声明代码托管仓库G ...