(1)rand()产生随机数,输出的随机数序列是确定的,即每次运行结果一致
#include <iostream>
int main()
{
int i, j;
for (i = 0; i < 10; i++)
{
j =10.0 * rand() /RAND_MAX;
std::cout << j << " ";
}
system("pause");
return 0;
}
第一次编译后:
第一次运行:0 5 1 8 5 4 3 8 8 7 请按任意键继续. . .
第二次运行:0 5 1 8 5 4 3 8 8 7 请按任意键继续. . .
第二次编译后:
第一次运行: 0 5 1 8 5 4 3 8 8 7 请按任意键继续. . .
第二次运行:0 5 1 8 5 4 3 8 8 7 请按任意键继续. . .
(2)使用srand()设置随机数的种子,使得每次运行产生的随机数不一样
#include <iostream>
#include <time.h>
int main()
{
int i, j;
srand((int)time(0)); //包含time.h
for (i = 0; i < 10; i++)
{
j =10.0 * rand() /RAND_MAX;
std::cout << j << " ";
}
system("pause");
return 0;
}
第一次编译后:
第一次运行:5 0 8 8 8 4 9 8 0 6 请按任意键继续. . .
第二次运行:5 9 8 4 4 3 1 7 1 0 请按任意键继续. . .
第三次运行:5 1 1 0 2 6 8 1 2 8 请按任意键继续. . .
第二次编译后:
第一次运行:5 7 9 0 0 3 0 7 2 7 请按任意键继续. . .
第二次运行:5 6 1 0 7 1 4 4 8 9 请按任意键继续. . .
第三次运行:5 2 3 5 0 1 0 9 3 7 请按任意键继续. . .
#include <iostream>
#include <time.h>
int main()
{
int i, j;
srand((int)time(NULL)); //包含time.h
for (i = 0; i < 10; i++)
{
j =10.0 * rand() /RAND_MAX;
std::cout << j << " ";
}
std::cout << std::endl;
for (i = 0; i < 10; i++)
{
j = 10.0 * rand() / RAND_MAX;
std::cout << j << " ";
}
system("pause");
return 0;
}
第一次编译后:
第一次运行:5 5 8 1 0 6 2 2 3 1
8 1 2 1 2 1 0 6 0 7 请按任意键继续. . .
第二次运行:5 5 3 0 7 8 0 4 5 8
0 3 8 4 0 8 8 2 9 7 请按任意键继续. . .
(3)每次调用srand()都将重新设置随机数种子,由于两次设置时间间隔小于1s【这是由于time(0)返回值是从1970年1月1日至今所经历的时间(以秒为单位)】,所有两次设置的种子一致,导致两次输出的随机数序列相同,所以如果不能保证两次srand()设置的时间间隔大于1s,则不要调用两次srand(),否则将得到相同的随机数序列
#include <iostream>
#include <time.h>
int main()
{
int i, j;
srand((int)time(NULL)); //包含time.h
for (i = 0; i < 10; i++)
{
j =10.0 * rand() /RAND_MAX;
std::cout << j << " ";
}
std::cout << std::endl;
srand((int)time(NULL));
for (i = 0; i < 10; i++)
{
j = 10.0 * rand() / RAND_MAX;
std::cout << j << " ";
}
system("pause");
return 0;
}
第一次编译后:
第一次运行:5 4 2 3 2 4 2 7 4 6
5 4 2 3 2 4 2 7 4 6 请按任意键继续. . .
第二次运行:5 1 6 9 2 9 3 9 6 5
5 1 6 9 2 9 3 9 6 5 请按任意键继续. . .