C++随机数的用法

QT笔记——QRandomGenerator和qrand 生成随机数 【代码】QT笔记——QRandomGenerator和qrand 生成随机数 阅读详情
     学过别的高级语言的都知道,产生随机数用的都是类似于random这样的字符,c++也不例外,在C++中使用的是rand()函数,但是不同的是,如果在C++中只使用了例如 "int i;i=rand();"这样,使用程序会发现每次得到的随机数都是一样的,据了解在C++中这样做是为了方便调试。如果要每次都长生不同的随机数,我们则需要在C++中加上"srand(time(NULL));"这条语句,他的作用是以时间为种子,产生随机数(我们都知道时间是在不断变化的,但两次获取随机数要在1秒后,否则数值还是一样),下面看个例子。
    该例子是:在1~100内生成一个随机数,并指定一个数,显示出该数在产生多少个数后出现。程序代码如下:

#include <iostream>
#define fnum 56               //要找的数为56

using namespace std;
int main()
{
  int num=0,j,k=0;
  int get_rand(); 
   srand(time(0));
   for(j=1;num!=fnum;j++,k++)          

  {
      num=get_rand();
    if(num<10)                 //右对齐
          cout<<" "<<num<<"  ";    
        else
          cout<<num<<"  ";
       
       
     if(j==15)                 //每行15个数
        {
          putchar('n');
          j=0;
        }
   }
    cout<<'n'<<"数字"<<fnum<<"已经找到,共生成了"<<k<<"个随机数。"<<endl;

return 0;
}

int get_rand()
{
  int i;
  i=rand()%100+1;
  return i;   
}

///////////////////////////////////////

        所谓的“伪随机数”指的并不是假的随机数,这里的“伪”是有规律的意思。其实绝对的随机数只是一种理想状态的随机数,计算机只能生成相对的随机数即伪随机 数。计算机生成的伪随机数既是随机的又是有规律的 —— 一部份遵守一定的规律,一部份则不遵守任何规律。比如“世上没有两片形状完全相同的树叶”,这正点到了事物的特性 —— 规律性;但是每种树的叶子都有近似的形状,这正是事物的共性 —— 规律性。从这个角度讲,我们就可以接受这样的事实了:计算机只能产生伪随机数而不是绝对的随机数。

        C++中的标准库<cstdlib>(包含在<iostream>中)提供两个帮助生成伪随机数的函数:rand()和srand()。
函数一:int rand(void);
从srand(seed)中指定seed开始,返回一个范围介于[seed,RAND_MAX(0x7fff))的随机整数
函数二:void srand(unsigned seed);
参数seed是rand()的随机种子,即用来初始化rand()的起始值。

    系统在调用rand()之前都会自动调用srand(),如果用户在rand()之前曾调用过srand()给参数seed指定了一个值,那么rand ()就会将seed的值作为产生伪随机数的初始值;而如果用户在rand()前没有调用过srand(),那么rand()就会自动调用srand (1),即系统默认将1作为伪随机数的初始值。

    由上述可得知,如果希望rand()在每次程序运行时产生的值都不一样,必须给srand(seed)中的参数seed指定一个变值,这个变值必须在每次 程序运行时都不一样(比如到目前为止流逝的时间);如果我们给seed指定的是一个定值,那么每次程序运行的时候,rand()产生的随机数都会一样,只 不过这个值是[seed,RAND_MAX(0x7fff))范围中的一个随机取得的值。

    举几个例子说明一下,假设我们要取得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,虽然值跟程序二不一样,不过每次运行时的结果也都相同。

程序四(指定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,... ...每次的运行结果都不一样,因为每次启动程序时的时刻都不同。

关于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_MAX一般为32767)。一个通用的公式是:要想取得[a,b)之间的随机整数,使用(rand()%(b-a))+ a,结果包含 a 而不含 b 。

Qt_生成随机数 生成随机数 阅读详情

相关推荐

Qt5.15中qsrand,srand随机数生成函数已弃用问题

我们经常会碰到诸如产生随机数的问题,以往使用的习惯的srand,qsrand等函数已经在Qt5的最后末代版本Qt5.15中被弃用了,到了Qt6就更加不会再使用它了,取而代之的是QRandomGenerator类。

有问题或资源连接有缺失的可以私信公众号新潮看世界获取 2414

QT qrand()随机函数

在Qt中,生成随机数的函数为 qrand()。该函数是标准C++函数 rand 的线程安全版本。不过,如果我们仅仅只是调用该函数来生成随机数,那么每次得到的随机数都将是相同的,这是因为Qt生成随机数严格来说是一个“伪随机”,它的产生是根据随机数种子计算得到的。如果种子相同,那么所得到的随机数也是相同的。 因此,为了使我们的随机数看起来更为“随机”一些,我们在每次获取随机数之前都需要初始化一个不...

心若十年的博客 3万+

C++中rand随机数用法

一、C++中不能使用random()函数 random函数不是ANSI C标准,不能在gcc,vc等编译器下编译通过。 可改用C++下的rand函数来实现。 1、C++标准函数库提供一随机数生成器rand,返回0-RAND_MAX之间均匀分布的伪随机整数。 RAND_MAX必须至少为32767。rand()函数不接受参数,默认

笔者从事电信媒体开发多年,愿意将多年的开发经验分享给同行 2万+

QT qsrand()&qrand()函数说明以及区别

例如,qrand函数也可以生成随机数,但是它不接受种子参数,而是使用当前时间作为默认种子。在这个例子中,time(NULL)函数返回当前时间的秒数作为种子,qsrand函数使用这个种子生成一个随机数。如果需要保证每次程序运行时生成随机数序列是相同的,那么应该使用qsrand函数,并传入一个固定的种子值。在这个例子中,qrand函数会使用当前时间作为默认种子来生成一个随机数。在Qt中,qsrand函数是一个随机数生成函数,用于生成一个随机数。qrand函数是一个随机数生成函数,用于生成一个随机数

2301_79503228的博客 3054

C++随机数用法

C++随机数用法 (1) 如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围为[0,RAND_MAX]。RAND_MAX的值为系统所定,其值可输出得32767。 例如: #include using namespace std; int main() {        for(int i=0;i              c

u014558208的专栏 518

C++关于随机数用法,srand,rand

一般C++程序员可通过两个步骤生成随机数 1.设置随机数种子 2.通过复杂的数学运算生成序列的下一个数 如果用第二种,虽然序列几乎不可能预测,但他仍具有确定性(因为它是由上一个数计算而来)。为防止下一个数被预测,就必须设置种子,而且每次都不同;从哪里获取这样一个数呢? 很简单–系统时间 获取随机数 首先引入头文件 include <cstdlib> //支持rand和srand函...

weixin_45907018的博客 1893

零基础学会C++随机数:从rand()到高级用法

忘记包含必要的头文件(<cstdlib>和<ctime>在循环中错误地重复设置随机种子取模运算的范围计算错误(比如想要1-100却写成没有初始化随机种子导致每次运行结果相同。

SilverfoxOwl19的博客 613

C++随机数用法

C++标准函数库提供一随机数生成器rand,返回0-RAND_MAX之间均匀分布的伪随机整数。 RAND_MAX必须至少为32767。rand()函数不接受参数,默认以1为种子(即起始值)。 随机数生成器总是以相同的种子开始,所以形成的伪随机数列也相同,失去了随机意义。(但这样便于程序调试)           C++中另一函数srand(),可以指定不同的数(无符号整数变元)为种子。但是如果种

唯手熟尔 666

>C/C++中产生随机数(rand,srand用法)

C/C++中产生随机数(rand,srand用法) http://zhangjunhd.blog.51cto.com/113473/197020 计算机的随机数都是由伪随机数,即是由小M多项式序列生成的,其中产生每个小序列都有一个初始值,即随机种子。(注意: 小M多项式序列的周期是65535,即每次利用一个随机种子生成随机数的周期是65535,当你取得65535个随机数后它们又重

Super_Level的专栏 812

C++ STL 随机数用法介绍

目录一:C语言中的随机数二:C++中的随机数 1. 生成随机数的例子 2. 随机数引擎 3. 随机数引擎适配器 4. C++中预定义的随机数引擎,引擎适配器 5. 随机数分布 二:C++中的随机数 1. 生成随机数的例子 2. 随机数引擎 引擎 说明 random_device 真随机数(非基于软件生成器),通常用来产生随机种子 linear_congruential_en

GPU全栈博主 725
上一篇: vc多线程编程
下一篇: (转载)C/C++排序算法
beck_zhou
博客等级 码龄19年 2151粉丝 510原创
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值