C语言 rand()函数

c语言的rand()函数,生成了序列 x,y,z我想问的是为什么生成顺序是固定的。比如说
把rand()写在for循环里,第一次调用生成x,第二次调用生成了y,这是为什么?我知道种子是rand的起点,但是rand()执行中是修改了种子值吗?保存在哪?

产生整数rand的原理是:
y=ax+b(mod n)其中,n一般是一个很大的素数。
a也是大素数。而且a,b,n都是常数。所以rand的产生决定于x,它被称为seed。
每一个seed都是上一次产生的y的函数。这样,如果直接取seed=y的话, 虽然产生的rand之间相关性甚小,但只要知道某个y,就能推知以后的rand。
参考:http://hi.baidu.com/piter2010/item/e6fa8ebd5db608e94fc7fd1a追问

这个seed,是上一次产生的y的函数,那比如seed初始值为1,然后执行了一次rand(),得到y为5,现在seed=f(y)=8,然后执行rand()得到新的y值。我想问下第一次执行得到的y值5,和seed=f(y)=8,这些是在哪完成的?也是在rand函数中吗?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-12
#include <stdlib.h> /*用到了srand函数,所以要有这个头文件*/
#include <stdio.h>
#define MAX 10
int main( void)
{ int number[MAX] = {0};
int i;
unsigned int seed;
scanf("%d",&seed);/*手动输入种子*/
srand(seed); for(i = 0; i < MAX; i++)
{
number[i] = rand() % 100; /*产生100以内的随机整数*/
printf("%d ", number[i]);
}
printf("\n");
return 0;
}
第2个回答  2013-09-12
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{  
srand(time(0));//设置随机种子
for(int i=0;i<10;i++)
printf("%d ",rand()%100);
printf("\n");
return 0;
}

第3个回答  2013-09-12
函数 srand() 设置种子值,一般传入当前时间,这样每次rand()出来的都是随机数
第4个回答  2013-09-12
srand()才能设置种子
第5个回答  2013-09-12
需要先srand()设置种子值
相似回答