C语言用rand()srand()产生随机数
随机数的应用:
游戏,安全加密,抽样...
1.Windows随机函数产生的随机数不是真正意义下的随机数,而是通过一个随机数种子,不断得到下一个"随机数",然后将种子改成这个随机数。
2.通过单纯的编程很难得到一个真正的随机函数,UNIX系统下一个随机函数是通过硬件的信息(例如硬件发出的噪音)等等来得到的随机数。
C库函数rand()
描述:
1.返回一个范围在 0 到 RAND_MAX 之间的伪随机数。
2.RAND_MAX 是一个常量,它的默认值在不同的实现中会有所不同,但是值至少是 32767。
rand()函数的声明
int rand(void)
3.每次打印操作,理论每次返回值是一样的如图:
再次运行随机数字没有改变
为了每次返回值不同所以引入种子生成函数。
C库函数srand()
描述:
1.C 库函数 void srand(unsigned int seed) 播种由函数 rand 使用的随机数发生器。
2.seed:伪随机数字种子生成器。
用系统时间来充当种子
一般srand的参数用time(NULL),因为系统的时间一直在变,所以rand()获得的数,一直在变,相当于随机数。只要用户不设置随机种子,那么在默认情况下随机种子来自系统时钟。如果想在一个程序中生成随机数序列,需要至多在生成随机数之前设置一次随机种子。
即:只需在主程序开始处调用 srand((unsigned)time(NULL)),srand((unsigned)time(0)); 后面直接用rand就可以了。不要在 for 在循环放置 srand((unsigned)time(NULL));
#include <stdio.h>
#include <time.h>
#include<stdlib.h>
int main() {
srand((unsigned)time(NULL));
printf("%d\n",rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
return 0;
}
运行如下: