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

在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语言中随机选择函数,怎样让c语言中的随机函数真正随机?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 在C语言函数库中包含了一个产生随机数的函数: int rand( void ); 在函数库中对这个函数的说明是: The rand function re ...

  2. c语言各类随机函数,怎样让c语言中的随机函数真正随机?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 在C语言函数库中包含了一个产生随机数的函数: int rand( void ); 在函数库中对这个函数的说明是: The rand function re ...

  3. c语言中怎样编写随机函数,怎样让c语言中的随机函数真正随机?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 在C语言函数库中包含了一个产生随机数的函数: int rand( void ); 在函数库中对这个函数的说明是: The rand function re ...

  4. 赣南师范大学考研c语言真题,赣南师范大学651C语言程序设计科目三考研真题详解...

    程序设计和C语言 1.1 复习笔记 一.计算机程序 1程序就是一组计算机能识别和执行的指令 2计算机的一切操作都是由程序控制的 二.计算机语言 1定义 人和计算机交流信息,要解决语言问题.需要创造一种 ...

  5. python课堂随机点名_【工作中的Python】随机点名小脚本

    背景:项目组每周的例会中,有一项固定内容就是技术分享,可以是与工作相关或无关的任何技术主题.进行技术分享讲解的同学是随机抽签的.由此做了一个Python的小脚本用于抽取姓名. 脚本内容如下: #!/u ...

  6. 2023.2.3,周五【图神经网络 学习记录17】二部图——BiNE算法:显式关系,隐式关系;新的随机游走方式 特点:随机游走次数 是跟节点中心性相关的,在随机游走的过程中 添加一个停止随机游走的概率

    声明:仅学习使用~ 前情提要: 2023.2.2,周四[图神经网络 学习记录16]异构图Graph Embedding算法--GATNE(异构图多属性 多边 类型算法),不建议普通PC跑-PyChar ...

  7. c语言编程判断谁说谎,c语言训练题:关于张三李四王五说谎的问题(此处用javascript实现)...

    (第一篇博文) 今天在一个交流群里见他们无聊,然后找到之前收藏的一些c语言题目放出去想让他们做,结果反倒是自己不会做,于是花了很多时间去想. 原题:张三说李四在说谎,李四说王五在说谎,王五说张三和李四 ...

  8. C语言调试语法差错步骤称为,计算机等级考试二级C语言真题辅导.ppt

    计算机等级考试二级C语言真题辅导.ppt 全国计算机等级考试辅导(二级)信息技术学院 张开利全国计算机等级考试大纲内容 笔试考试( 90分钟) 满分 100分 (统一试卷) C语言. Visual B ...

  9. R语言sample.int有放回或者无放回采样随机整数实战

    R语言sample.int有放回或者无放回采样随机整数实战 目录 R语言sample.int有放回或者无放回采样随机整数实战

最新文章

  1. Zabbix企业应用之服务器硬件信息监控
  2. 自动登录DISCUZ,发帖的代码(部分)
  3. CSS基础_Day02
  4. Angular单元测试框架beforeEach和it的执行顺序
  5. python读写文件实例_python读写文件的简单示例
  6. 对lIKE语句的优化
  7. 诗和远方:无题(五十二)- 写给认识的一个老姐的两只猫
  8. 联想e431笔记本更改硬盘模式bios设置的详细教程
  9. vue cli element 项目结构
  10. BCG、MFC如何支持《支持应用程序设置的回复、保存等》的?他是怎么实现的呢?
  11. mysql st centroid_postgresql – ST_Distance的返回值单位
  12. Sublime Text3搭建go运行环境
  13. [转]《编程之道》(很老的一篇文章)
  14. 第一至第七次人口普查县级人口普查GIS数据集(1953-2010)
  15. 传华为公司又一名技术部员工乔向英猝死
  16. android camera2美颜,Nano Camera(多功能美颜相机)V2.1 安卓版
  17. word如何在任意页开始添加页码
  18. Ubuntu 视频 转 GIF
  19. 10---OpenCV:图像进阶操作之连通区域分析
  20. 华为服务器进入系统怎么退出安全模式,华为手机怎么进入和退出安全模式?华为手机进入安全模式按哪个键...

热门文章

  1. 《Go语言圣经》第六章
  2. 记四至六月:春华秋实,做好当下,切勿急躁,避免焦虑
  3. 恢复被修改乱七八糟的外国源镜像
  4. mac关闭向日葵远程开机自启
  5. ssm+java鞋店进销存管理系统
  6. mysql 如何计算数据求和并排出名次
  7. Android Framework学习(六)之RefBase,SP,WP
  8. Java引用数据类型(类)+案例
  9. 平行轮廓线预处理的一些算法
  10. python的translate()函数理解