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