c++学习:产生随机数的方法

方法一:使用"time(NULL)"函数

time()函数的用途是返回一个值,即格林尼治时间1970年1月1日到当前时刻的时长,时长单位是秒。

需要包含头文件<ctime>

#include <iostream>
#include <string>
#include <ctime>
using namespace std;
int rand_number()
{
    return time(NULL);
}
int main()
{
    cout<<rand_number();
    cout<<" ";
    cout<<rand_number();
    return 0;
}

因为time(NULL)每秒钟返回值递增一次。而程序的运行时间小于1s,故而两次值是相等的。

方法二:使用rand()srand()函数

rand函数是用来产生随机数的函数,(需要头文件cstdlib)但实际上产生的是伪随机数,并不是真正意义上的随机数,它是从一个随机数的序列种按照顺序返回其中的一个数。

随机数需要根据种子来产生,但是一开机种子就定下了(默认1),如果种子不变,那么产生的随机数序列也是相同的;种子变化,产生的随机数序列随之变化,所以只调用rand每次都是一样的值。

#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>//rand()的头文件
using namespace std;
int main()
{
    int a;
    a=rand();
    cout<<a;
}

此例无论多少次打开程序都是一样的值,41;

常用的是结合srand()函数来种子,如使用“time(NULL)”作为种子。由第一种方法知道,这个数一秒钟变化一次,于是产生的随机数序列也是一秒钟变化一次。

#include <iostream>
#include <string>
#include <ctime>
#include <conio.h>//kbhit()函数
using namespace std;

int rand_number()
{
    srand(time(NULL));
    return rand();
}
int main()
{
    int i;
    while(true)
    {
        i=rand_number();
        cout<<i<<endl;
        if(kbhit())break;
    }
    system("pause");
    return 0;
}

但是这种方式数据更新是以秒为单位的,一秒内调用rand_number()函数种下的种子是相同的,故而随机数的序列是相同的,故而一秒内产生的随机数是相同的。

要想产生不同的随机数,应将srand(time(NULL));int i;的后面,这样虽只种下了一次种子,确定了一个随机数列,但每次调用产生的随机数是不相同的。

#include <iostream>
#include <string>
#include <ctime>
#include <conio.h>//kbhit()函数
using namespace std;
int main()
{
    int i;
    srand(time(NULL));//如果将其注释掉,每次运行代码产生的随机序列均相同
    while(true)
    {
        i=rand();
        cout<<i<<endl;
        if(kbhit())break;//判断是否有按键动作,如果有就返回true
    }
    system("pause");
    return 0;
}
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jinniulema

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值