美文网首页
c++ 6、随机数

c++ 6、随机数

作者: 八戒无戒 | 来源:发表于2020-04-29 00:04 被阅读0次

    C++ 可以使用内置库CSTDLIB(<cstdlib.h>)中的srand()rand()函数来产生随机数。
    rand()函数只返回一个伪随机数,即每次产生的随机数都是一样的

    1、伪随机数

    以下示例,未设置种子产生的随机数

    #include <iostream>
    #include <stdio.h>
    #include <CSTDLIB>
    using namespace std;
    
    extern void generate_rand();
    
    int main()
    {
        generate_rand();
        return 0;
    }
    
    void generate_rand()
    {
        int i, rand_no;
        for (i = 0; i < 10; i++)
        {
            rand_no = rand();
            printf("随机数%d: %d\n", i, rand_no);
        }
    }
    

    第一次运行结果:

    随机数0: 41
    随机数1: 18467
    随机数2: 6334
    随机数3: 26500
    随机数4: 19169
    随机数5: 15724
    随机数6: 11478
    随机数7: 29358
    随机数8: 26962
    随机数9: 24464
    
    P:\MyProject\x64\Debug\MyProject.exe (进程 16452)已退出,返回代码为: 0。
    按任意键关闭此窗口...
    

    第二次运行结果:

    随机数0: 41
    随机数1: 18467
    随机数2: 6334
    随机数3: 26500
    随机数4: 19169
    随机数5: 15724
    随机数6: 11478
    随机数7: 29358
    随机数8: 26962
    随机数9: 24464
    
    P:\MyProject\x64\Debug\MyProject.exe (进程 15128)已退出,返回代码为: 0。
    按任意键关闭此窗口...
    

    两次一样,是因为未设置种子,从而产生的时伪随机数

    2、设置种子,产生随机数

    使用CTIME库中的time()函数,获取当前时间戳,进而设置种子,产生随机数

    #include <iostream>
    #include <stdio.h>
    #include <CSTDLIB>
    #include <CMATH>
    using namespace std;
    
    extern void generate_rand();
    
    int main()
    {
        // 以当前时间戳设置种子
        srand((unsigned)time(0));
        generate_rand();
        return 0;
    }
    
    void generate_rand()
    {
        int i, rand_no;
        for (i = 0; i < 10; i++)
        {
            rand_no = rand();
            printf("随机数%d: %d\n", i, rand_no);
        }
    }
    

    第一次运行结果:

    随机数0: 32321
    随机数1: 26334
    随机数2: 31743
    随机数3: 8223
    随机数4: 22500
    随机数5: 6169
    随机数6: 25887
    随机数7: 18572
    随机数8: 9338
    随机数9: 3324
    
    P:\MyProject\x64\Debug\MyProject.exe (进程 17112)已退出,返回代码为: 0。
    按任意键关闭此窗口...
    
    

    第二次运行结果:

    随机数0: 32445
    随机数1: 8789
    随机数2: 22454
    随机数3: 5125
    随机数4: 21237
    随机数5: 24313
    随机数6: 13088
    随机数7: 5640
    随机数8: 14186
    随机数9: 31842
    
    P:\MyProject\x64\Debug\MyProject.exe (进程 2596)已退出,返回代码为: 0。
    按任意键关闭此窗口...
    
    

    3、范围内随机数,完整代码如下

    函数代码如下:

    #include <iostream>
    #include <stdio.h>
    #include <CSTDLIB>
    #include <CTIME>
    using namespace std;
    extern void generate_rand();
    
    int main()
    {
        // 以当前时间戳设置种子
        srand((unsigned)time(0));
        generate_rand();
        return 0;
    }
    void generate_rand()
    {
        int i, rand_no;
        for (i = 0; i < 15; i++)
        {
            rand_no = rand() % (15 - 3) + 3 + 1;
            printf("随机数%d: %d\n", i, rand_no);
        }
    }
    

    范围公式:

    • [a, b): rand_no = rand() % (b - a) + a
    • [a, b]: rand_no = rand() % (b - a + 1) + a
    • (a, b): rand_no = rand() % (b - a -1) + a + 1
    • (a, b]: rand_no = rand() % (b - a) + a + 1

    例如以上代码我们取(3, 15]范围内随机数:rand_no = rand() % (15 - 3) + 3 + 1
    运行结果:

    随机数0: 6
    随机数1: 5
    随机数2: 9
    随机数3: 9
    随机数4: 10
    随机数5: 15
    随机数6: 7
    随机数7: 14
    随机数8: 13
    随机数9: 4
    随机数10: 8
    随机数11: 8
    随机数12: 14
    随机数13: 9
    随机数14: 6
    
    P:\MyProject\x64\Debug\MyProject.exe (进程 17880)已退出,返回代码为: 0。
    按任意键关闭此窗口...
    

    相关文章

      网友评论

          本文标题:c++ 6、随机数

          本文链接:https://www.haomeiwen.com/subject/rgaiwhtx.html