c++ 6、随机数

2020-04-29  本文已影响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。
按任意键关闭此窗口...
上一篇 下一篇

猜你喜欢

热点阅读