该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

在C语言函数库中包含了一个产生随机数的函数:

int rand( void );

在函数库中对这个函数的说明是:

The rand function returns a pseudorandom integer in the range

0 to RAND_MAX. Use the srand function to seed the pseudorandom

-number generator before calling rand.

而在C语言函数库中是这样定义RAND_MAX的:

/* Maximum value returned by "rand" function

*/

#define RAND_MAX 0x7FFF

所以,函数int rand( void );返回的是一个界于0~32767(0x7FFF)之

间的伪随机数,包括0和32767。注意,这里产生的是伪随机数,不是真正意

义上的随机数,看下面的程序:

#include "stdlib.h"

#include "stdio.h"

void main( void )

{

/* Display a number. */

printf( " %6d\n", rand() );

getchar();

}

程序运行的结果是:

346

多次运行这个程序,发现每次产生的结果都是346(不同的机器可能产生

的结果不一样),这就是所谓的伪随机数。伪随机数是通过一个公式来运算

出来的,所以,每次产生的伪随机数都一样。那么,如何才能产生真正意义

上的随机数呢?这就有一个随机种子的问题。在C语言标准函数库中,有这

么一个函数:

void srand( unsigned int seed );

在《The c programming language》中对这个函数是这样描述的:

srand uses seed(函数变量声明中的seed) as the seed(随机函数中种子

的意思) for a new sequence of pseudo-random numbers. The

initial seed is 1.

所以,要产生真正意义上的随机数,那么就要求每次提供的种子不一样,一

般情况下,都设置时间为随机函数的种子。看下面的一段程序:

/* RAND.C: This program seeds the random-number generator

* with the time, then displays 10 random integers.

*/

#include "stdlib.h"

#include "stdio.h"

#include "time.h"

void main( void )

{

int i;

/* Seed the random-number generator with current time so that

the numbers will be different every time we run.

将当前时间设置成随机函数的种子,所以每次产生的数都不一样

*/

srand( (unsigned)time( NULL ) );

/* Display 10 numbers. */

for( i = 0; i

printf( “ %6d\n”, rand() );

}

Output

6929

8026

21987

30734

20587

6699

22034

25051

7988

10104

每次运行这个程序,产生的随机数都不一样,这样就达到了随机数的要求了

注意,rand这个函数产生的随机数的范围是0~32767,如果要产生100以内

的随机数怎么办呢?在标准C语言库中并没有定义产生给定范围的随机数的

函数。其实,要产生给定范围的随机数,只要做一个取余(%)运算就可以了

。下面是一个产生10以内随机数的函数:

#include "stdlib.h"

#include "stdio.h"

#include "time.h"

int rand2( void );

void main( void )

{

int i;

/* Seed the random-number generator with current time so that

· the numbers will be different every time we run.

*/

srand( (unsigned)time( NULL ) );

/* Display 10 numbers:0~9 */

for( i = 0; i

printf( " %6d\n", rand2() );

getchar();

}

int rand2( void )

{

return rand() % 10 ;

}

运行结果:

2

5

7

9

0

1

3

5

8

3

在这个程序中,我自己写了一个函数rand2(),来产生10以内的随机数,其

实,打开标准库中的头文件 Stdlib.h 就会发现有这样的一条语句:

#define random(num) (rand() % (num))

上面的这行代码是为了方便产生给定范围的随机数的,思路也是采用取余的

方法,所以上面的程序也可以改成:

#include "stdlib.h"

#include "stdio.h"

c语言各类随机函数,怎样让c语言中的随机函数真正随机?相关推荐

  1. c语言变量的六要素,2-C语言复习提纲.doc

    2-C语言复习提纲 C语言复习提纲 C语言的特点 概述 C语言是一种结构化语言.它层次清晰,便于按模块化方式组织程序,易于调试和维护.C语言的表现能力和处理能力极强.它不仅具有丰富的运算符和数据类型, ...

  2. C语言学生成绩管理系统大纲,C语言教学大纲

    <C语言教学大纲>由会员分享,可在线阅读,更多相关<C语言教学大纲(8页珍藏版)>请在人人文库网上搜索. 1.C语言程序设计教学大纲.课程目标1) 正确理解和使用 C语言的基本 ...

  3. C语言1066字符类型统计,C语言编译过程及数据类型

    写在前面 C语言可以称得上是高级语言中的低级语言,接下来一段时间,我会写一下文章关于c语言,把它的神秘面纱一 一揭开.下面主要是c语言的C语言编译过程及数据类型 源文件编译过程 为了使计算机能执行高级 ...

  4. java语言保留结构和联合_Java 语言中取消了联合概念,保留了结构概念。( )_学小易找答案...

    [单选题]Graves病最严重的临床表现是 [判断题]Java 语言中取消了联合概念,保留了结构概念.( ) [单选题]下列关于子类继承父类的成员的描述中,错误的是 . [多选题]冯.诺依曼机确立计算 ...

  5. 1.初识C语言----什么是C语言,为什么要学C语言?

    目录 前言 一.为什么要学习C语言 二.什么是C语言 总结 前言 大家好,我是antiemoman,接下来的一段时间我会更新很多关于C语言的基础知识类文章,如果有什么不对的地方,欢迎大家积极指出文章中 ...

  6. 大一C语言实验报告九江学院,九江学院C语言实验报告及答案-资源下载人人文库网...

    九江学院 C语言实验报告及答案 高级语言程序设计实验指导学 院:信息科学与技术学院专 业:信息管理与信息系统 学 期:20112012学年第二学期教 师: 目录实验1 熟悉C语言程序开发环境11.1 ...

  7. c语言编程学多久,丰城c语言编程学习,丰城学c语言编程的学校,丰城学c语言编程一般要多久才能学会...

    丰城c语言编程学习,丰城学c语言编程的学校,丰城学c语言编程一般要多久才能学会 首页 > 软件 > 丰城c语言编程学习 作者:镀金池   发布时间:2018-04-09 16:40 在之后 ...

  8. c语言编译的手机软件,C语言编译工具

    软件介绍 C语言编译工具app是一款功能十分强大的手机编译.更换代码的软件工具,C语言编译工具app可以快速进行代码翻译.代码查找.替换等,它支持多种代码语言,欢迎下载! C语言编译工具app内容 简 ...

  9. 贪吃蛇c语言课程设计报告下载,c语言课程设计-贪吃蛇游戏

    c语言课程设计-贪吃蛇游戏 C 语言课程设计 1 山东交通学院 C 语言课程设计 贪吃蛇游戏 院(系)别 交通与物流工程学院 班 级 物联 131 学 号 130516122 姓 名 王赛 指导教师 ...

  10. led c语言程序结设计,《C语言程序设计》学习领域课程标准-LED照明工程设计.doc...

    <C语言程序设计>学习领域课程标准-LED照明工程设计.doc <C语言程序设计>课程标准 课程类别 专业核心课程 开课部门 电子信息工程系 总学时 64 学时 学分 4学分 ...

最新文章

  1. nyoj 776 删除元素
  2. 【docker redis】Could not connect to Redis No route to host
  3. python(numpy,pandas11)——pandas merge根据索引合并数据
  4. [html] title与h1、b与strong、i与em的区别分别是什么?
  5. C语言中关于字符数组输入,scanf没执行
  6. 为什么要用枚举实现单例模式(避免反射、序列化问题)
  7. Eigen3卸载与重装
  8. [swift] LeetCode 206. Reverse Linked List
  9. [C#] readonly vs const
  10. Python知识点-hashlib模块
  11. CCNA题库第一部分
  12. 你知道 FW 工程师 是做什么的吗?
  13. 金沙滩51单片机LED 闪烁程序
  14. Tensorflow 2.0 学习(chapter 6)
  15. Ubuntu系统修复GUID格式GPT硬盘的引导
  16. 牛客java选择题每日打卡Day12
  17. 解决paramiko.ssh_exception.SSHException: Error reading SSH protocol banner问题
  18. 【c语言】—求最大公约数和最小公倍数多种方法
  19. 条件极值例题_条件极值的求法(函数极值的求法例题)
  20. 方程求根的迭代法——牛顿迭代法

热门文章

  1. 【tensorflow】【pytorch】_debug_错误集合
  2. 前端月趋势榜:5 月最热门的 20 个前端开源项目 - 2105
  3. 10 个 GitHub 上超火的 CSS 技巧项目,找到写 CSS 的灵感!
  4. linux fedora35安装、登录postgresql-14数据库命令整理
  5. flume数据采集:js埋点
  6. win10专业版关闭smartscreen
  7. Redis集群理论知识
  8. JDK和cglib动态代理代码示例
  9. 7 自动开启网卡_从Qlogic发展历程看与RDMA网卡的关系
  10. python正则表达式花括号_python正则表达式(+ {})(二)