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。
按任意键关闭此窗口...
网友评论