C语言随机函数rand(),使用该函数会产生0-RAND_MAX (0x7fffffff)之间的随机数,直接这么使用有个很大的问题 程序每次运行产生的随机数序列都是相同的 (这里指的是随机序列,并不是指rand()每次结果相同)

例如:

#include <iostream>

int main() {
    for (int i = 0; i < 10; i++) {
            std::cout << rand() << ",";
    }
    return 0;
}

第一次输出结果为: 16807,282475249,1622650073,984943658,1144108930,470211272,101027544,1457850878,1458777923,2007237709,
第二次输出结果为: 16807,282475249,1622650073,984943658,1144108930,470211272,101027544,1457850878,1458777923,2007237709,

无论运行多少次,我们会发现输出结果都是一致的,原因是因为没有指定随机种子,系统会默认随机种子为1

执行下面代码

#include <iostream>

int main() {
    srand(1);
    for (int i = 0; i < 10; i++) {
            std::cout << rand() << ",";
    }
    return 0;
}

输出结果也是:16807,282475249,1622650073,984943658,1144108930,470211272,101027544,1457850878,1458777923,2007237709,
所以说为了保证程序每次产生的随机数不同,需要保证程序每次启动的随机种子不同,通常可以使用系统时间作为随机种子time(NULL)
这个随机序列和电脑相关的,不同的电脑即使随机种子一致,产生的随机序列也是不一致的。换了一台电脑同样的代码输出的结果是:41,18467,6334,26500,19169,15724,11478,29358,26962,24464,

#include <iostream>

int main() {
    srand(time(NULL));
    for (int i = 0; i < 10; i++) {
            std::cout << rand() << ",";
    }
    return 0;
}

第一次输出结果为:1784895276,535838789,1443594852,228433758,1732893517,568119605,673906673,520698833,389424706,1678361333,
第二次输出结果为:1785550749,814955265,302438289,2134014421,1255985200,1726490037,319013595,1542308253,1447188881,503737045,

函数说明

srand 函数用来设置随机种子
rand 函数用来生成随机数

打赏
C语言随机函数与随机种子
Tagged on:

发表评论