栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

随机数的产生方法

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

随机数的产生方法

基础知识:在c++中要产生随机数的时候可以使用使用随机数产生函数 int  rand(void);

本函数产生一个从1到0x7fff(32767)之间的值;

每次调用rand()产生的数列是相同的;是伪随机数;例如

include "stdafx.h"
#include 
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
unsigned int a;
for(int i=0;i<20;i++)
{
a=rand();
cout<

这段程序无论何时调用产生的20个数组成的数列是一样的;

为了解决这个问题,在每次调用rand()之前先调用一次srand(int x)函数,这样rand()产生的随机数在x和32767之间;

但是,如果下次调用rand()函数之前不改变x的值产生的依然是一系列的伪随机数,尤其在循环的时候;这样有必要在每次调用srand(int x)的时候设置不同的x值;

聪明的程序员想到了利用计算机里的time函数来获得一个几乎随时变动的值;

这个x值就是种子数,随时让计算机产生;

函数:void srand(unsigned seed);
参数seed是rand()的种子,用来初始化rand()的起始值。

每次调用rand()函数前分两种情况

1) 如果用户在此之前调用过srand(seed),给seed指定了一个值,那么调用srand(seed)时它会自动使用上次的值

2) 如果用户在此之前没有调用过srand(seed),它会自动调用srand(1)一次。把种子数设定为1;

所以根据上面的情况我们就可以得出:
1) 如果希望rand()在每次程序运行时产生的值都不一样,必须给srand(seed)中的seed一个新值,这个值必须在每次程序运行时都不一样(比如从1970年到目前为止流逝的时间)。

下面说说time;

关于time_t time(0):要调用这个函数必须包括头文件。time_t 被定义成了long;

它返回从1970年1月1日零时零分零秒到目前为止所经过的时间,单位为秒。

这样在每次生成随机数之前先调用srand((unsigned)time(0));就设置了seed的值;

你马上就会说这个数比32767大,是的,它在机器内部溢出了,只利用最后的有效数字;

以下就是源码;

#include 
int rand_num;
srand((unsigned)time(0));
for(int i=0;i<10;i++){ 
  rand_num=rand() ;
  cout< 

这样产生的随机数你可以随便利用了。例如你要产生从a到b之间的随机数可以用

(rand_num%  (b-a))+ a 来求;此处含a,不含b;要含b,在取余时(b-a+1)即可;

要产生0到9之间的随机数含0,含9;用rand_num%10;就行;

产生11到15之间的随机数,含11,含15,用rand_num%5+11就行,以此类推;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1018396.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号