C语言中的伪随机数rand()和真随机数srand()

您所在的位置:网站首页 c语言生成时间怎么算的 C语言中的伪随机数rand()和真随机数srand()

C语言中的伪随机数rand()和真随机数srand()

2024-07-05 07:48| 来源: 网络整理| 查看: 265

随机数函数rand()

函数rand()其实是一个伪随机数生成器,为什呢?

//rand()函数的内核算法 static unsigned long int next = 1;//种子 unsigned int rand(void) { /*生成伪随机数的魔术公式*/ next = next * 1103515245 + 12345; return (unsigned int) (next / 65536) % 32768; }

不难看出,每次调用函数rand(),他的初始化种子都是从1 开始。这就说明虽然他得到的数是随机的,但是关闭程序再次运行得到的随机数又都是一样的。这可真糟糕!如何做到真真的随机呢?

//srand()函数的内核算法 static unsigned long int next = 1;//种子 unsigned int rand(void) { /*生成伪随机数的魔术公式*/ next = next * 1103515245 + 12345; return (unsigned int) (next / 65536) % 32768; } void srand(unsigned int seed) { next=seed; }

不难看出,只需要每次运行程序的时候把种子变一下,不让他从1开始,就达到了随机的效果。。。。

有一个方法,可以每次都随机种子,她就是srand((unsigned int)tine(0));

#include #include #include srand((unsigned int )time(0));

一般而言,time()函数接受的参数是一个time_t类型对象的地址,而时间值就存储在传入的地址上,当然,也可以传入空指针(0)作为参数,这种情况下,只能通过返回值机制来提供值。

//srand() demo int main() { int a,b,c,d; //每次种子都会发生变化,得到的值就是一个随机的 srand((unsigned int)(time(0))); for(int i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3