int rand(void);
根据一个数值按照某个公式推算出来的,这个数值称之为“种子”。
随机生成一个位于 0 ~ RAND_MAX 之间的整数。RAND_MAX它的值至少为 32767。
种子在每次启动计算机时是随机的,但是一旦计算机启动以后它就不再变化了,根据公式推算出来的结果(也就是生成的随机数)就是固定的。
可以通过函数void srand(unsigned int seed);来重新播种。
其中unsigned int seed可以通过time()函数获得srand((unsigned)time(0));之后再rand()即可。
若想获得随机数组
...
for (i=0; i<size; i++)
{
srand((unsigned)time(0));
arr[i] = rand();
printf("\n%d", ram_arr[count]);
}
...
这样的结果如下:
96
96
96
96
...
因为程序执行很快,每次获得的时间(距离1970的秒数)相同。
想到的方法就是强行把时间+1,利用循环的参数,每次循环都把时间+i。
/* 生成随机数组0-100 */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 100
int main(void)
{
int ram_arr[SIZE], count;
for (count = 0; count < SIZE; count++)
{
srand((unsigned)(time(0) + count));
ram_arr[count] = rand() % 101;
printf("\n%d", ram_arr[count]);
}
return 0;
}
本文介绍了C语言中如何生成随机数,包括随机数的范围(0~RAND_MAX)和种子的概念,强调种子在启动后不再变化导致的随机数固定问题。为解决这一问题,提出了通过重新播种函数并结合当前时间来实现真正的随机性,特别是在生成随机数组时,通过调整时间戳以避免重复。
8953

被折叠的 条评论
为什么被折叠?



