c语言各类随机函数,怎样让c语言中的随机函数真正随机?
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
在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语言中的随机函数真正随机?相关推荐
- c语言变量的六要素,2-C语言复习提纲.doc
2-C语言复习提纲 C语言复习提纲 C语言的特点 概述 C语言是一种结构化语言.它层次清晰,便于按模块化方式组织程序,易于调试和维护.C语言的表现能力和处理能力极强.它不仅具有丰富的运算符和数据类型, ...
- C语言学生成绩管理系统大纲,C语言教学大纲
<C语言教学大纲>由会员分享,可在线阅读,更多相关<C语言教学大纲(8页珍藏版)>请在人人文库网上搜索. 1.C语言程序设计教学大纲.课程目标1) 正确理解和使用 C语言的基本 ...
- C语言1066字符类型统计,C语言编译过程及数据类型
写在前面 C语言可以称得上是高级语言中的低级语言,接下来一段时间,我会写一下文章关于c语言,把它的神秘面纱一 一揭开.下面主要是c语言的C语言编译过程及数据类型 源文件编译过程 为了使计算机能执行高级 ...
- java语言保留结构和联合_Java 语言中取消了联合概念,保留了结构概念。( )_学小易找答案...
[单选题]Graves病最严重的临床表现是 [判断题]Java 语言中取消了联合概念,保留了结构概念.( ) [单选题]下列关于子类继承父类的成员的描述中,错误的是 . [多选题]冯.诺依曼机确立计算 ...
- 1.初识C语言----什么是C语言,为什么要学C语言?
目录 前言 一.为什么要学习C语言 二.什么是C语言 总结 前言 大家好,我是antiemoman,接下来的一段时间我会更新很多关于C语言的基础知识类文章,如果有什么不对的地方,欢迎大家积极指出文章中 ...
- 大一C语言实验报告九江学院,九江学院C语言实验报告及答案-资源下载人人文库网...
九江学院 C语言实验报告及答案 高级语言程序设计实验指导学 院:信息科学与技术学院专 业:信息管理与信息系统 学 期:20112012学年第二学期教 师: 目录实验1 熟悉C语言程序开发环境11.1 ...
- c语言编程学多久,丰城c语言编程学习,丰城学c语言编程的学校,丰城学c语言编程一般要多久才能学会...
丰城c语言编程学习,丰城学c语言编程的学校,丰城学c语言编程一般要多久才能学会 首页 > 软件 > 丰城c语言编程学习 作者:镀金池 发布时间:2018-04-09 16:40 在之后 ...
- c语言编译的手机软件,C语言编译工具
软件介绍 C语言编译工具app是一款功能十分强大的手机编译.更换代码的软件工具,C语言编译工具app可以快速进行代码翻译.代码查找.替换等,它支持多种代码语言,欢迎下载! C语言编译工具app内容 简 ...
- 贪吃蛇c语言课程设计报告下载,c语言课程设计-贪吃蛇游戏
c语言课程设计-贪吃蛇游戏 C 语言课程设计 1 山东交通学院 C 语言课程设计 贪吃蛇游戏 院(系)别 交通与物流工程学院 班 级 物联 131 学 号 130516122 姓 名 王赛 指导教师 ...
- led c语言程序结设计,《C语言程序设计》学习领域课程标准-LED照明工程设计.doc...
<C语言程序设计>学习领域课程标准-LED照明工程设计.doc <C语言程序设计>课程标准 课程类别 专业核心课程 开课部门 电子信息工程系 总学时 64 学时 学分 4学分 ...
最新文章
- nyoj 776 删除元素
- 【docker redis】Could not connect to Redis No route to host
- python(numpy,pandas11)——pandas merge根据索引合并数据
- [html] title与h1、b与strong、i与em的区别分别是什么?
- C语言中关于字符数组输入,scanf没执行
- 为什么要用枚举实现单例模式(避免反射、序列化问题)
- Eigen3卸载与重装
- [swift] LeetCode 206. Reverse Linked List
- [C#] readonly vs const
- Python知识点-hashlib模块
- CCNA题库第一部分
- 你知道 FW 工程师 是做什么的吗?
- 金沙滩51单片机LED 闪烁程序
- Tensorflow 2.0 学习(chapter 6)
- Ubuntu系统修复GUID格式GPT硬盘的引导
- 牛客java选择题每日打卡Day12
- 解决paramiko.ssh_exception.SSHException: Error reading SSH protocol banner问题
- 【c语言】—求最大公约数和最小公倍数多种方法
- 条件极值例题_条件极值的求法(函数极值的求法例题)
- 方程求根的迭代法——牛顿迭代法
热门文章
- 【tensorflow】【pytorch】_debug_错误集合
- 前端月趋势榜:5 月最热门的 20 个前端开源项目 - 2105
- 10 个 GitHub 上超火的 CSS 技巧项目,找到写 CSS 的灵感!
- linux fedora35安装、登录postgresql-14数据库命令整理
- flume数据采集:js埋点
- win10专业版关闭smartscreen
- Redis集群理论知识
- JDK和cglib动态代理代码示例
- 7 自动开启网卡_从Qlogic发展历程看与RDMA网卡的关系
- python正则表达式花括号_python正则表达式(+ {})(二)