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万+

别再被坑了!手把手教你从官网下载免费正版Notepad++(附最新网盘链接)

本文详细指导如何从Notepad++官网安全下载正版软件,避免山寨版本带来的安全风险。通过识别官网特征、推荐官方下载渠道、揭露山寨网站骗局及验证正版功能,帮助用户高效获取纯净的Notepad++代码编辑器,并分享实用插件和配置优化技巧。

weixin_42527654的博客 562

【重启后nvidia-smi 命令出现错误】

NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.

qq_44769377的博客 5211

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

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

weixin_42121272的博客 231

利用GBD数据库做未来疾病负担预测

最近看到一篇文献,利用GBD数据库中的数据对疾病负担的发展趋势进行预测。觉得很有趣,就抽空用R语言复盘了一下里面关键的方法。 参考文献: Changing trends in the disease burden of esophageal cancer in China from 1990 to 2017 and its predicted level in 25 years DOI: 10.1002/cam4.3775 1. 相关R包的安装 主要用到的R包有3个,一个一个讲: 1.1 Nordpred

NickyCat的博客 5万+

C语言——获取随机数

每天一个奇怪的知识点。

qq_45902301的博客 3239

银行会计第2课:交易和核算分离的思想

核算作为会计的基础,将交易转化为可量化的信息,而会计则通过整合核算结果,实现对经济活动的全面把控。- 本质:指企业或主体之间发生的、能引起经济利益变动的具体事项,比如采购商品、销售货物、支付工资等,是客观发生的经济事实。可售产品(业务视角的核算对象) + 属性条件(核算的分类,限制等) = 核算类型(会计视角,含有科目分类内容)- 核算:会计人员根据采购发票、入库单等,将这笔交易记为“借:原材料,贷:银行存款”(对事实的会计处理)。- 特点:是核算的源头,不涉及会计处理,仅代表经济行为的发生。

ademen的博客 497

JQ8900语音播报模块在RT-Thread系统下的驱动移植与测试详解

本文详细讲解了如何在RT-Thread嵌入式操作系统中,为JQ8900语音播报模块进行驱动移植与功能测试。内容涵盖从获取驱动代码、配置Kconfig工程、编译烧录到核心代码解析的完整流程,并提供了基于串口通信的上电测试与问题排查方法,帮助开发者快速掌握在RT-Thread系统下集成外部模块的核心技能。

weixin_35677363的博客 593

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

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

weixin_34208146的博客 621

避坑指南:DDR4内存条Margin测试Fail?从Intel RMT工具到PCB Layout的完整排错思路

本文深入探讨了DDR4内存条在Margin测试中Fail的完整排错思路,从Intel RMT工具分析到PCB Layout优化。通过实战案例,详细解析了信号完整性问题的诊断与解决方案,包括拓扑结构影响、传输线参数优化及HyperLynx仿真验证,为硬件设计工程师提供了宝贵的避坑指南。

weixin_42530458的博客 449

C语言获取随机数

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

get_py的博客 4544

c++2048小游戏编写

最近编写了一个小游戏,叫作2048,用到了面向对象的知识。

一个学生的博客 2371

基于Xilinx K7-410T的高速DAC之AD9129开发笔记(一)

引言:从本文开始,我们介绍下项目中设计的并行LVDS高速DAC接口设计,包括DAC与FPGA硬件接口设计、软件设计等。项目设计高速DAC采用了ADI公司的AD9129,该芯片最大更新速率5.7Gsps,该芯片在宽带通信应用、LTE、雷达信号产生、干扰机等领域有广泛应用。

FPGA_Designer 2533

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

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

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

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

zgw071415的专栏 8981

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

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

weixin_33289873的博客 1956

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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、付费专栏及课程。

余额充值