程序段1:
//包含头文件
void main() {
int count=0;
for (int i=0;i <10;i++来自星星的你){
srand((unsigned)time(NULL));
count++;
cout < < "No " < <count < < "= " < <rand() < < " ";
if (!(count%5)) cout < <endl;
}
}
程序段2:
//包含头文件
void main() {
int count=0;
srand((unsigned)time(NULL));
for (int i=0;i <10;i++){
count++;
cout < < "No " < <count < < "= " < <rand() < < " ";
if (!(count%5)) cout < <endl;
}
}
程序段1的运行结果为:
No1=9694 No2=9694 No3=9694 No4=9694 No5=9694
No6=9694 No7=9694 No8=9694 No9=9694 No10=9694
程序段2的运行结果为:
No1=10351 No2=444 No3=11351 No4=3074 No5=21497
No6=30426 No7=6246 No8=24614 No9=22089 No10=21498
可以收现,以上两个程序段由于随机数生成时选择的种子的不同,运行的结果也不一样。rand()函数返回随机数序列中的下一个数(实际上是一个伪随机数序列,序列中的每一个数是由对其前面的数字进行复杂变换得到的)。为了模仿真正的随机性,首先要调用srand()函数给序列设置一个种子。为了更好地满足随机性,运用了时间函数time(),以便取到一个随时间变化的值,使每次运行rand()函数时从srand()函数所得到的种子值不沟通。伪随机数生成器将作为 "种子 "的数当作初始整数传给函数。这粒种子会使这个球(生成伪随机数)一直滚下去。
程序段1中由于将srand()函数放在循环体内,而程序执行的CPU时间较快,调用time函数获取的时间精度却较低(55ms),这样循环体内每次产生随机数用到的种子数都是一样的,因此产生的随机数也是一样的。而程序段2中第1次产生的随机数要用到随机种子,以后的每次产生随机数都是利用递推关系得到的。
//包含头文件
void main() {
int count=0;
for (int i=0;i <10;i++来自星星的你){
srand((unsigned)time(NULL));
count++;
cout < < "No " < <count < < "= " < <rand() < < " ";
if (!(count%5)) cout < <endl;
}
}
程序段2:
//包含头文件
void main() {
int count=0;
srand((unsigned)time(NULL));
for (int i=0;i <10;i++){
count++;
cout < < "No " < <count < < "= " < <rand() < < " ";
if (!(count%5)) cout < <endl;
}
}
程序段1的运行结果为:
No1=9694 No2=9694 No3=9694 No4=9694 No5=9694
No6=9694 No7=9694 No8=9694 No9=9694 No10=9694
程序段2的运行结果为:
No1=10351 No2=444 No3=11351 No4=3074 No5=21497
No6=30426 No7=6246 No8=24614 No9=22089 No10=21498
可以收现,以上两个程序段由于随机数生成时选择的种子的不同,运行的结果也不一样。rand()函数返回随机数序列中的下一个数(实际上是一个伪随机数序列,序列中的每一个数是由对其前面的数字进行复杂变换得到的)。为了模仿真正的随机性,首先要调用srand()函数给序列设置一个种子。为了更好地满足随机性,运用了时间函数time(),以便取到一个随时间变化的值,使每次运行rand()函数时从srand()函数所得到的种子值不沟通。伪随机数生成器将作为 "种子 "的数当作初始整数传给函数。这粒种子会使这个球(生成伪随机数)一直滚下去。
程序段1中由于将srand()函数放在循环体内,而程序执行的CPU时间较快,调用time函数获取的时间精度却较低(55ms),这样循环体内每次产生随机数用到的种子数都是一样的,因此产生的随机数也是一样的。而程序段2中第1次产生的随机数要用到随机种子,以后的每次产生随机数都是利用递推关系得到的。