C 语言随机数获取

C++随机数生成 文章目录一、伪随机数生成1. rand()2. srand()3. 测试代码二、C++11随机数生成1. 随机数生成算法2. 随机数分布类型3. random_device 一、伪随机数生成 1. rand()  rand()会返回一个随机数值,范围是在0至RAND_MAX间。RAND_MAX定义在stdlib.h头文件中,其值为2147483647。 2. srand()  srand()可以用来设置rand()产生随机数时的随机数种子。通过设置不同的种子,可以获取不同的随机数序列。例如,可以利用sran 阅读详情

首先来看如何获取代码:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int main(void)
{
 int i;
 srand((unsigned)time(0));

 for(i=0;i<100;i++)
 {
 printf("%5d",rand()%100);
 if(!((i+1)%10))
  printf("\n");
 }

}


标准库<cstdlib>(被包含于<iostream>中)提供两个帮助生成伪随机数的函数:
函数一:int rand(void);
从srand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))间的随机整数。
函数二:void srand(unsigned seed);
参数seed是rand()的种子,用来初始化rand()的起始值。
可以认为rand()在每次被调用的时候,它会查看:
1) 如果用户在此之前调用过srand(seed),给seed指定了一个值,那么它会自动调用
srand(seed)一次来初始化它的起始值。
2) 如果用户在此之前没有调用过srand(seed),它会自动调用srand(1)一次。
根据上面的第一点我们可以得出:
1) 如果希望rand()在每次程序运行时产生的值都不一样,必须给srand(seed)中的seed一个变值,这个变值必须在每次程序运行时都不一样(比如到目前为止流逝的时间)。
2) 否则,如果给seed指定的是一个定值,那么每次程序运行时rand()产生的值都会一样,虽然这个值会是[seed, RAND_MAX(0x7fff))之间的一个随机取得的值。
3) 如果在调用rand()之前没有调用过srand(seed),效果将和调用了srand(1)再调用rand()一样(1也是一个定值)。
举几个例子,假设我们要取得0~6之间的随机整数(不含6本身):
例一,不指定seed:
for(int i=0;i<10;i++){
ran_num=rand() % 6;
cout<<ran_num<<" ";
}
每次运行都将输出:5 5 4 4 5 4 0 0 4 2
例二,指定seed为定值1:
srand(1);
for(int i=0;i<10;i++){
ran_num=rand() % 6;
cout<<ran_num<<" ";
}
每次运行都将输出:5 5 4 4 5 4 0 0 4 2
跟例子一的结果完全一样。
例三,指定seed为定值6:
srand(6);
for(int i=0;i<10;i++){
ran_num=rand() % 6;
cout<<ran_num<<" ";
}
每次运行都将输出:4 1 5 1 4 3 4 4 2 2
随机值也是在[0,6)之间,随得的值跟srand(1)不同,但是每次运行的结果都相同。
例四,指定seed为当前系统流逝了的时间(单位为秒):time_t time(0):
#include <ctime>
//…
srand((unsigned)time(0));
for(int i=0;i<10;i++){
ran_num=rand() % 6;
cout<<ran_num<<" ";
}
第一次运行时输出:0 1 5 4 5 0 2 3 4 2
第二次:3 2 3 0 3 5 5 2 2 3
总之,每次运行结果将不一样,因为每次启动程序的时刻都不同(间隔须大于1秒?见下)。
关于time_t time(0):
time_t被定义为长整型,它返回从1970年1月1日零时零分零秒到目前为止所经过的时间,单位为秒。比如假设输出:
cout<<time(0);
值约为1169174701,约等于37(年)乘365(天)乘24(小时)乘3600(秒)(月日没算)。
另外,关于ran_num = rand() % 6,
将rand()的返回值与6求模是必须的,这样才能确保目的随机数落在[0,6)之间,否则rand()的返回值本身可能是很巨大的。
一个通用的公式是:
要取得[a,b)之间的随机整数,使用(rand() % (b-a))+ a (结果值将含a不含b)。
在a为0的情况下,简写为rand() % b。
最后,关于伪随机浮点数:
用rand() / double(RAND_MAX)可以取得0~1之间的浮点数(注意,不同于整型时候的公式,是除以,不是求模),举例:
double ran_numf=0.0;
srand((unsigned)time(0));
for(int i=0;i<10;i++){
ran_numf = rand() / (double)(RAND_MAX);
cout<<ran_numf<<" ";
}
运行结果为:0.716636,0.457725,…等10个0~1之间的浮点数,每次结果都不同。
如果想取更大范围的随机浮点数,比如1~10,可以将
rand() /(double)(RAND_MAX) 改为 rand() /(double)(RAND_MAX/10)
运行结果为:7.19362,6.45775,…等10个1~10之间的浮点数,每次结果都不同。
至于100,1000的情况,如此类推。
以上不是伪随机浮点数最好的实现方法,不过可以将就着用用…


0111 0101
0001 1000 +
---------------
1000 1101
这种情况就是溢出了,
八位有符号最大是0111 1111
只要加1就已经溢出.你在第5位加1,当然仍是溢出
-97-88=-185
这个同样是溢出,
八位有符号数最小是1000 0000 ,十进制是-128
注意你的结果已是-185了,当然又溢出了

转载至 http://zhidao.baidu.com/question/204869547.html
【C语言】-想要知道如何获得随机数吗??那还不赶快进来!!! 详解怎么生成随机数,并且实现猜数字小游戏!!! 阅读详情

相关推荐

C++ 中的随机数生成全方面介绍

随机数是指在一个特定范围内,按照某种概率分布生成的数。在计算机中,真正的随机数很难生成,通常使用伪随机数生成器(Pseudo-Random Number Generator, PRNG)来近似实现。C++ 提供了多种生成随机数的方法,从简单的rand()和srand()到强大的库。选择合适的方法和工具,可以让你的程序更加灵活和高效。希望本文对您理解 C++ 中的随机数生成有所帮助。

2301_81482480的博客 4582

c++随机数

计算机的运行是通过代码来进行的,而代码的执行需要确定的数字,即计算机的运行过程是一个确定的过程,计算机的运行过程是一个确定的过程,所以不可能产生一个真正有意义的数字,即计算机只能产生伪随机数。 引用随机数需要引用头文件 #include <cstdlib> 1.随机数函数 (1) c++提供产生随机数的函数: rand(),原型为:int rand(void); rand() 产生一个 [0…RAND_MAX] 之间的数字,RAND_MAX是可以产生的最大随机数(2^31-1),是一个常量

mantou_riji的博客 3万+

C语言怎样获取随机数(此教程十分详细)本文介绍用rand()和srand()实现

学C语言的小白可能不懂怎样获取随机数,网上可能不全面,我给大家讲一下用rand和srand获取随机数(某一范围的随机整数以及小数)。 这是我第一篇文章,希望多多鼓励…… 首先,使用这两个函数需要包含头文件<stdlib.h>,c++的可以用<cstdlib.h>. 附上两函数原型: void rand(void); void srand(unsigned int seed...

qq_38703744的博客 1万+

C/C++ 生成随机数

本文摘要: 文章介绍了C++中生成随机数的多种方法。1)使用rand()函数生成0-RAND_MAX范围的随机数,但需配合srand(time(NULL))实现真正随机;2)推荐使用C++11的<random>库,包含default_random_engine(基础随机引擎)、uniform_int_distribution(整数范围分布)、uniform_real_distribution(实数范围分布)和bernoulli_distribution(布尔值分布)等类;3)详细说明了mt199

人无远虑,必有近忧 4万+

LSS(Lift, Splat, Shoot)算法解析

**LSS(Lift, Splat, Shoot)** 是一个比较经典的自下而上的构建BEV特征的3D目标检测算法,通过将图像特征反投影到3D空间生成伪视锥点云,通过`Efficientnet`算法提取云点的深度特征和图像特征并对深度信息进行估计,最终将点云特征转换到BEV空间下进行特征融合和后续的语义分割任务。 本篇按照LSS代码的运行逻辑,结合论文对LSS算法进行解析。

超爱吃小蛋糕的66的博客 8680

NT35310 - LCD显示屏

NT35310 是一个低功耗、26 万色、单芯片的 TFT-LCD 控制器/驱动器,分辨率 480*320,它有一个 345600 字节的显示 RAM 和一整套控制功能。NT35310 支持数字接口(MDDI),MIPI 接口,RGB 接口,8 / 9 / 16 / 18 位8080 接口。可以实现指定的窗口区域可以有选择地更新,以便可以显示运动图像。同时也可以独立显示静止的图像区域。...

m0_62444125的博客 3318

c语言真正获取随机数,[转载]C语言真正获取随机数

问题1:怎样获得一个真正的随机数?要知道,rand()是不能产生真正的随机数的!即使不能产生真正的随机数,也要大概接近呀!而rand()好象每次的随机都一样。专家解答:之所以rand()每次的随机数都一样是因为rand()函数使用不正确。各种编程语言返回的随机数(确切地说是伪随机数)实际上都是根据递推公式计算的一组数值,当序列足够长,这组数值近似满足均匀分布。如果计算伪随机序列的初始数值(称为种子...

weixin_42121272的博客 231

新手必看:LiteRadio 2c SE遥控器从开箱到飞行的完整指南(附常见问题解答)

本文为新手提供LiteRadio 2c SE遥控器的完整使用指南,涵盖从开箱到首飞的20个关键步骤。详细介绍了遥控器的功能设置、与无人机的对频技巧以及首飞注意事项,帮助用户快速掌握飞行控制,避免常见错误。特别适合无人机初学者阅读。

weixin_29209801的博客 379

C语言——获取随机数

每天一个奇怪的知识点。

qq_45902301的博客 3239

基于Simulink的自适应控制(Adaptive Control)电励磁同步电动机

目录基于Simulink的自适应控制(Adaptive Control)电励磁同步电动机项目实例1. 项目背景2. 系统架构2.1 电励磁同步电动机模型2.2 三相逆变器模型2.3 自适应控制器(Adaptive Controller)2.4 系统框图3. 模型设计3.1 创建Simulink模型3.2 自适应控制(Adaptive Control)设计3.3 仿真环境搭建4. 参数优化4.1 自动调优5. 实际应用案例5.1 工业驱动系统5.2 风力发电系统6. 结论进一步优化建议需求分析电励磁同步电动机

MHD0815的博客 266

c语言随机数获取失败,C语言的随机数获取方法介绍

刚刚学习c语言的人可能对他的随机数获取方式还不是很了解,下面我就为大家介绍下他的方法吧。 1)标准库cstdlib(被包含于iostream中)提供两个帮助生成伪随机数的函数: 函数一:int rand(void);从srand (seed)中指定的seed开始,返回一个[seed,RAND_M刚刚学习c语言的人可能对他的随机数获取方式还不是很了解,下面我就为大家介绍下他的方法吧。1)标准库(被包...

weixin_34208146的博客 621

CAM350常用快捷键

CAM350快捷键 CAM350常用快捷键

bhxc809751502的博客 3052

C语言获取随机数

C语言怎样获取随机数(此教程十分详细)本文介绍用rand()和srand()实现

get_py的博客 4544

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

c.语言 获取随机数,C 语言随机数获取

首先来看如何获取代码:#include #include #include int main(void){int i;srand((unsigned)time(0));for(i=0;i<100;i++){printf("%5d",rand()%100);if(!((i+1)%10))printf("\n");}}标准库(被包含于中)提供两个帮助生成伪随机数的函数:函数一:int rand(...

weixin_42307436的博客 468

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C语言rand()获取随机数和windows下的CryptGenRandom

是在弄即将发布的一篇博客时顺便弄的

zgw071415的专栏 8981

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

真随机数 c语言编程,C语言真正获取随机数

问题1:怎样获得一个真正的随机数?要知道,rand()是不能产生真正的随机数的!即使不能产生真正的随机数,也要大概接近呀!而rand()好象每次的随机都一样。专家解答:之所以rand()每次的随机数都一样是因为rand()函数使用不正确。各种编程语言返回的随机数(确切地说是伪随机数)实际上都是根据递推公式计算的一组数值,当序列足够长,这组数值近似满足均匀分布。如果计算伪随机序列的初始数值(称为种子...

weixin_33289873的博客 1956

linux c语言 取随机数,C语言 获取随机数

>本文讲述了在C语言中如何获取随机数。## rand()`rand()`函数可以用来产生伪随机数,它根据一个基准(种子)以某个递推公式推算出随机数。当使用rand()产生的一系列数符合正态公布时,就相当于产生了随机数。计算机正常开机后,种子的值是默认固定的,为1。/* @brief 随机数发生器* @return 返回一个伪随机数* @header stdlib.h*/int ran...

weixin_28721743的博客 1107

C语言之随机数的获取与妙用

一、rand函数 想要获取随机数,肯定需要利用函数,rand函数在C语言中的作用就是产生一个随机数。 通过cplusplus网站查找,可以发现调用本函数时,不需要参数即可返回随机数,且所产生随机数的范围是0~32767。且本函数的调用需要包含头文件stdlib.h。 知道了这些,就编写个程序测试一下它是否能完成任务吧~ #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> .

SwaggerHYH's blog 2771

C语言真正获取随机数

问题1: 怎样获得一个真正的随机数?要知道,rand()是不能产生真正的随机数的!即使不能产生真正的随机数,也要大概接近呀!而rand()好象每次的随机都一样。 专家解答: 之所以rand()每次的随机数都一样是因为rand()函数使用不正确。各种编程语言返回的随机数(确切地说是伪随机数)实际上都是根据递推公式 计算的一组数值,当序列足够长,这组数值近似满足均匀分布。如果计算伪随机序列

1305
上一篇: register_chrdev_region alloc_chrdev_region 参数问题
下一篇: 一天一点学习Linux之Inode详解
MrBugYang
博客等级 码龄18年 21粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值