能力值:
( LV2,RANK:10 )
|
-
-
2 楼
设种子 内容要长
|
能力值:
( LV12,RANK:222 )
|
-
-
3 楼
没有初始化随机数种子
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
我也是来学习的 谢谢了
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
time(0)做种子
|
能力值:
( LV3,RANK:20 )
|
-
-
6 楼
但是我在cmd中不设种子,照样可以随机.为什么?
|
能力值:
( LV5,RANK:60 )
|
-
-
7 楼
第一条是因为rand() 是伪随机数, 所以会一样
第二条没看明白,也表示不相信,正常情况下 rand函数应该是以机器码的形式写入到你生成的exe里面去的
除非你之前的cmd操作( 或有后台操作) 导致整个进程中的rand() 种子被调整了
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
这种取随机数的函数自己都可以写的,
C库里的默认种子是1,
|
能力值:
( LV3,RANK:20 )
|
-
-
9 楼
我表示我并没有怎么操作.大家可以下载一个tc2.0试试,大小为1M.
在cmd下编译连接的过程: 开始->运行->cmd回车->cd\(回到根目录)->cd tc->tc shiyan->Alt+c+c(编译)->Alt+c+l(连接)->Alt+x(退出).就这么多,并没有操作别的什么.
在源程序种并没有srand函数.但是在cmd下编译的能有随机的效果.为什么?
#include <stdlib.h>
#include <stdio.h>
int main()
{
int i;
for(i=0;i<100;i++)
printf("%d ",rand()%999);
getch();
return 0;
}
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
rand() 和 srand() 的原码原理应该是这样:
//---------------------------------------------
static unsigned long int next = 1;
int rand()
{
next = next * xxxxxx +xxxxx // 这里是个很复杂的产生伪随机数的计算。
return (unsigned int)(next/xxx) % 32768; //取得合适长度的返回值,这里是int.
}
srand(unsigned int x) // 这里的x值是随机数就更好了,如用time(0)这样的变化的数取模
{
next = x;
}
|
|
|