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语言中的随机函数真正随机?相关推荐
- 分类树/装袋法/随机森林算法的R语言实现
原文首发于简书于[2018.06.12] 本文是我自己动手用R语言写的实现分类树的代码,以及在此基础上写的袋装法(bagging)和随机森林(random forest)的算法实现.全文的结构是: 分 ...
- c语言中申请内存并初始化,c语言中结构体的定义、初始化及内存分配
#include struct person { char *name; int age; }; int main() { //结构体可以定义在函数内,也可以定义到函数外 //相当于全局变量与局部变量 ...
- 先马后看!详解线性回归、朴素贝叶斯、随机森林在R和Python中的实现应用!(附代码)...
来源| analyticsvidhya 编译| 火火酱,责编| Carol 出品 | AI科技大本营(ID:rgznai100) 谷歌的自动驾驶汽车和机器人得到了媒体的广泛关注,但是公司真正的未来是在 ...
- c语言中有关随机数的程序,C语言中随机数相关问题
用C语言产生随机数重要用到rand函数.srand函数.及宏RAND_MAX(32767),它们均在stdlib.h中进行了声明. int rand(void);//生成一个随机数 voidsrand ...
- 为什么c语言加法错误,分数的加减法——C语言初学者代码中的常见错误与瑕疵(12)...
重构 题目的修正 我抛弃了原题中"其中a, b, c, d是一个0-9的整数"这样的前提条件,因为这种限制毫无必要.只假设a, b, c, d是十进制整数形式的字符序列. 我也不清 ...
- c语言mac地址加冒号,如何通过在Excel中添加冒号来格式化单元格中的mac地址?
如何通过在Excel中添加冒号来格式化单元格中的mac地址? 假设您收到一个包含数字列表的工作表,现在您需要通过添加冒号将所有这些数字格式设置为mac地址,如下面的屏幕截图所示. 您能做什么来实现呢? ...
- c语言中占位符,Java C# C语言中的占位符
一般拼接一段字符串在编程中是很常见的事,下面简单做个总结: 什么是占位符?占位符就是先占住一个固定的位置,等着你再往里面添加内容的符号. 1.Java中处理方法: package com.amos; ...
- c语言中初始化的主要作用,C语言初始化——栈的初始化
栈是一种具有后进先出性质的数据组织方式,也就是说后存放的先取出,先存放的后取出.栈底是第一个进栈的数据所处的位置,栈顶是最后一个进栈的数据所处的位置. 1.满栈与空栈 根据SP指针指向的位置,栈可以分 ...
- c语言指针很危险,浅谈C语言中指针使用不当的危险性.doc
浅谈C语言中指针使用不当的危险性.doc 第 19 卷 Vol . 19 第 2 期 No . 2 洛阳师专学报 Journal of Luoyang Teachers College 2000 年 ...
最新文章
- android8.1内核编译,Android8.1.0安卓源码编译
- ilm 和dlm差异_电力通信系统--加密芯片.pdf
- jdk1.8hashmap为什么对hash进行了一次扰动处理
- mescroll上拉加载的实现
- list.php tid 1,DedeCMS栏目用目录名个性化伪静态
- 项目成功的关键是在投资最少的时候找出错误
- MapXtreme绿色部署
- xp系统怎么进pe修改计算机名,U盘装xp_教您怎样用u盘装xp系统
- 地面监视雷达系统的设计与试验
- Setup Factory 卸载时出现Invalid Start mode :archive filename 无法卸载问题
- word中批量修改图片大小的两个方法
- 【Excel学习笔记11】计数、求和、平均值函数,通配符
- win10启动项_win10系统开机启动项的设置教程
- 搞笑--为毛我顶多是个包工头
- python原始数据是什么_荐Python种MNE库模拟原始脑电数据
- 外卖红包领取公众号简单搭建
- 项目环境搭建,数据库,以及Swagger2介绍(二)
- 高洛峰2015年新版视频发布
- 【多目标进化优化】NSGAII 算法原理与代码实现
- 虚拟机下载安装Centos7(新手详解)
热门文章
- 硬盘驱动器是如何工作的?
- 廖雪峰 python_40岁老男人从0开始学python实录(第1天)
- python是全栈_Python全栈之路-3-字符串
- php7.2 mysql 教程_如何在PHP7中扩展mysql,先安装php7.2。后安装mysql
- mongodb索引生成HTML页面,MongoDB高级索引
- java 反射 慢在那里_Java 反射到底慢在哪?
- linux和windows测评,Windows Server 2016 与 Linux同台PK
- C 如何在函数中返回一个数组
- Java天使之恋攻略,跑跑卡丁车手游天使之恋怎么得 天使之恋获取攻略[多图]
- 【js细节剖析】通过=操作符为对象添加新属性时,结果会受到原型链上的同名属性影响...