C语言实现随机数
最近在看《The C Programming Language》这本书,看到一个关于随机数的知识点,有种豁然开朗的感觉。以前总靠死记硬背,也不明白为啥是这样,而且总把srand()遗漏。相信你看了也有同样的感觉。书中是这么说的:
标准库中包含一个可移植的实现伪随机数发生器的函数srand以及一个初始化种子数的函数srand。前一个函数rand使用了强制类型转换。(看到这里是不是有个疑惑,种子数是什么呀?别着急,看完接下来的代码你就明白了)
unsigned long int next = 1;
/*rand函数:返回值在0- 32767之间的伪随机数*/
int rand(void)
{
next = next * 1103515245 + 12345;
return (unsigned int)(next / 65536) % 32768;
}
/* srand函数:为rand()函数设置种子*/
void srand(unsigned int seed)
{
next = seed;
}
即在rand()中使用的变量next的数据来自srand(),这个变量next即所谓的随机数。
例子1:
#include "stdio.h"
#include "time.h"
#include "stdlib.h"
int main()
{
int iRandom = 0;
int iNum = 0;
while(iNum < 5)
{
srand(1);
iRandom = rand();
printf("%d\n", iRandom);
iNum++;
}
return 0;
}
运行结果:
例子2:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <windows.h>
int main()
{
int iRandom = 0;
int iNum = 0;
while(iNum < 5)
{
srand(time(NULL));
iRandom = rand();
printf("%d\n", iRandom);
iNum++;
Sleep(1000);
}
return 0;
}
运行结果: