我是靠谱客的博主 呆萌月亮,最近开发中收集的这篇文章主要介绍C++随机数:rand和srand函数总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、rand和srand函数

在C语言的库函数中,系统提供了两个用于产生随机数的函数:srand()和rand() 。

rand()函数原型如下:

int rand(void);

void表示它不接受任何参数,返回值是在[0,RAND_MAX]之间的随机整数。

srand()函数原型:

void srand(unsigned seed);

参数的变量类型为unsigned,表示seed只能保存非负整数,这样就避免了不会将复数传递给srand 。

seed是一个用于保存种子的变量,,用来初始化srand()的起始值。

二、函数的调用情况

rand函数并不是真正的随机数生成器,它所产生的其实是根据算法生成的随机数,即在一定范围具备差异性,但当样本足够大时,又具有规律性。

在调用rand函数前,需要调用srand来提供随机数种子。如果在第一次调用rand函数时没有调用srand函数,那么系统将会自动调用srand(),这时rand函数每次运行产生的将会是相同的随机数序列。

如下图所示,这个代码无论运行多少次,产生的都必然是相同的五个随机数。

#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
    int a;
    for(int i=0 ; i<5 ; i++)
    {
        a = rand();
        cout << a << endl;
    }
    return 0;
}
41
18467
6334
26500
19169

同样,如果我们在rand()之前调用srand函数,给参数seed指定了一个固定的值,那么每次rand()产生的随机数序列也将是一样的。

#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
    int a;
    unsigned seed = 10;

    srand(seed);

    for(int i=0 ; i<5 ; i++)
    {
        a = rand();
        cout << a << endl;
    }
    return 0;
}
71
16899
3272
13694
13697

由此可见,如果希望rand函数每次运行都产生一组不同的随机数,办法就是让传递给srand函数的参数seed(即种子的值)每次都不相同。

调用time函数能为我们提供不同的种子值。time返回从1970年1月1日起至现在逝去的秒数,头文件是time.h

#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;

int main()
{
    int a;
    unsigned seed = time(NULL);

    srand(seed);

    for(int i=0 ; i<5 ; i++)
    {
        a = rand();
        cout << a << endl;
    }
    return 0;
}
// 第一次
1219
23413
8158
24980
30285
// 第二次
1330
28411
25716
23933
20532
三、限制随机数范围

1.随机生成1至某个最大值max之间的整数

num = rand()%max+1

代码示例:

#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;

int main()
{
    int max = 5;
    unsigned seed = time(NULL);

    srand(seed);
    cout << rand()%max+1 << endl;

    return 0;
}

2.随机生成某个最小值min至某个最大值max之间的整数

num = rand()%(max-min+1)+min

代码示例:

#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;

int main()
{
    int min = 5;
    int max = 20;
    unsigned seed = time(NULL);

    srand(seed);
    cout << rand()%(max-min+1)+min << endl;

    return 0;
}

参考资料:http://c.biancheng.net/view/1352.html?from=singlemessage.

最后

以上就是呆萌月亮为你收集整理的C++随机数:rand和srand函数总结的全部内容,希望文章能够帮你解决C++随机数:rand和srand函数总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部