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; }

运行结果:

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM