C语言/C++怎样产生随机数:这里要用到的是rand()函数, srand()函数,和time()函数。

需要说明的是,iostream头文件中就有srand函数的定义,不需要再额外引入stdlib.h;而使用time()函数需要引入ctime头文件。

使用rand()函数获取一个随机数

如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间。RAND_MAX定义在stdlib.h, 其值为2147483647。

例子1.1:

#include<iostream>
using namespace std;
int main()
{
for(int i=0;i<10;i++)
{
cout<<rand()<<endl;
}
}

结果:

使用rand()函数获取一定范围内的一个随机数

如果想要获取在一定范围内的数的话,直接做相应的除法取余即可。

例子2.1:

#include<iostream>
using namespace std;
int main()
{
for(int i=0;i<10;i++)
{
//产生10以内的整数
cout<<rand()%10<<endl;
}
}

结果:

我们上面获取的都是随机的整数,那么如何获取小数呢?例如:我们可以先获得10001以内的整数(0~10000),然后再用这个整数除以10000得到小数点后两位的小数。

例子2.2:

#include<iostream>
using namespace std;
int main()
{
for(int i=0;i<10;i++)
{
cout<<(rand()%10001)/10000.0<<endl;
}
}

注意10000.0后面的有个小数点,表示结果为浮点数。

结果:

使用rand函数和time函数

我们上面已经可以获取随机数了,为什么还需要使用time函数呢?我们通过多次运行发现,该程序虽然生成了10个随机数,但是这个10个随机数是固定的,也就是说并不随着时间的变化而变化。

这与srand()函数有关。srand()用来设置rand()产生随机数时的随机数种子。在调用rand()函数产生随机数前,必须先利用srand()设好随机数种子(seed), 如果未设随机数种子, rand()在调用时会自动设随机数种子为1。

上面的例子就是因为没有设置随机数种子,每次随机数种子都自动设成相同值1 ,进而导致rand()所产生的随机数值都一样。

srand()函数定义 : void srand (unsigned int seed);

通常可以利用geypid()或time(0)的返回值来当做seed

如果你用time(0)的话,要加入头文件#include<ctime>

time(0)或者time(NULL)返回的是系统的时间(从1970.1.1午夜算起),单位:秒

例子3.1:

#include <iostream>
#include <ctime>
using namespace std; void main()
{
int a;
a=time(0);//time(0)返回的是系统的时间(从1970.1.1午夜算起),单位:秒
cout<<a<<endl;
}

例子3.2:

#include<iostream>
#include<ctime>
using namespace std;
int main()
{
srand(time(0));
for(int i=0;i<10;i++)
{
//产生10以内的整数
cout<<rand()%10<<endl;
}
}

这样做的话,每次运行的结果就都不一样了。

文章参考:

http://blog.csdn.net/lssxlh/article/details/4710337

http://bbs.bccn.net/thread-55271-1-1.html

http://www.ezloo.com/2008/03/cc_random.html

C语言/C++中怎样产生随机数的更多相关文章

  1. C语言/C++中如何产生随机数

    C语言/C++中如何产生随机数 作者: 字体:[增加 减小] 类型:转载 时间:2013-10-14我要评论 这里要用到的是rand()函数, srand()函数,和time()函数.需要说明的是,i ...

  2. [转]C语言/C++中如何产生随机数

    C语言/C++怎样产生随机数:这里要用到的是rand()函数, srand()函数,和time()函数. 需要说明的是,iostream头文件中就有srand函数的定义,不需要再额外引入stdlib. ...

  3. 在R语言环境中无法载入rJava包的解决办法

    问题描述: 安装包xlsx包后,运行library("xlsx")后弹出错误窗口: RGui (64-bit): Rgui.exe - 系统错误 无法启动此程序,因为计算机中丢失 ...

  4. Cocos2d-x 脚本语言Lua中的面向对象

    Cocos2d-x 脚本语言Lua中的面向对象 面向对象不是针对某一门语言,而是一种思想.在面向过程的语言也能够使用面向对象的思想来进行编程. 在Lua中,并没有面向对象的概念存在,没有类的定义和子类 ...

  5. Swift语言教程中文文档

    Swift语言教程中文文档 Swift语言教程(一)基础数据类型 Swift语言教程(二)基础数据类型 Swift语言教程(三)集合类型 Swift语言教程(四) 集合类型 Swift语言教程(五)控 ...

  6. 如何在不同的语言/平台中获取Android ID

    如何在不同的语言/平台中获取Android ID 最近开发工作中需要使用到AndroidID,在Unity和native code中也需要使用,java获取很方便,Unity中也不难,最难的是在nat ...

  7. JS中实现种子随机数

    参数: 详谈JS中实现种子随机数及作用 我在Egret里这么写... class NumberTool{ /**种子(任意默认值5)*/ public static seed:number = 5; ...

  8. 从Linux内核中获取真随机数【转】

    转自:http://www.cnblogs.com/bigship/archive/2010/04/04/1704228.html 内核随机数产生器 Linux内核实现了一个随机数产生器,从理论上说这 ...

  9. C语言(C++语言)中##(两个井号)和#(一个井号)用法[转]

    文章来源:http://blog.csdn.net/starboybenben/article/details/49803315 C语言(C++语言)中的宏(Macro)属于编译器预处理的范畴,属于编 ...

随机推荐

  1. live555源码研究(十)------在编译过程中遇到的问题及解决方法

    一.编译testOnDemandRTSPServer.cpp. 在testProgs项目中,加入testOnDemandRTSPServer.cpp进行编译,编译类型是编译成exe文件,在编译过程中会 ...

  2. 轻量级Java_EE企业应用实战-第5章Hibernate的基本用法-001

    1. package org.crazyit.app.domain; import javax.persistence.*; /** * Description: <br/> * ��վ: ...

  3. 新的HTTP框架:Daraja Framework

    https://www.habarisoft.com/daraja_framework.html

  4. POJ3278——Catch That Cow(BFS)

    Catch That Cow DescriptionFarmer John has been informed of the location of a fugitive cow and wants ...

  5. 分布式搜索Elasticsearch——QueryBuilders.matchPhrasePrefixQuery

    注:该文项目基础为分布式搜索Elasticsearch——项目过程(一)和分布式搜索Elasticsearch——项目过程(二),项目骨架可至这里下载. ES源代码中对matchPhrasePrefi ...

  6. 在安装ISE的情况下,充分利用ISE的安装目录,查找资料

    2013-06-22 11:03:02 在找资料时,通过官网输入关键字的方法找资料,有事会给出很多版本的链接.或者找不到,下面给出一种简便的方法,可以快速找到想要的资料. 如果要找ISE各个工具如pl ...

  7. A9逻辑编译问题

    root@phone-desktop:~# cd '/opt/BARE/01led' root@phone-desktop:/opt/BARE/01led# makearm-linux-gnueabi ...

  8. js2word/html2word的简单实现

    js2word/html2word的简单实现 以C#描述如下:             StringBuilder sb = new StringBuilder();            sb.Ap ...

  9. 1220. Stacks

    1220 又一神题啊  卡内存可以卡到这种地步 省得不行了 开两个[N]数组 一个来记录前驱  一个存数 记录前驱的用unsigned short类型 最大可达65535 不过可以标记一下是否比这个数 ...

  10. Samba 'smbcacls'命令安全绕过漏洞

    漏洞版本: Samba 4.x 漏洞描述: Bugtraq ID:66232 CVE ID:CVE-2013-6442 Samba是一款实现SMB协议.跨平台进行文件共享和打印共享服务的程序. 当使用 ...