博主將會這篇文章介紹c語言如何生成隨機數以及設置隨機數的范圍。創(chuàng)作不易請大家點點贊,點點關注。
一、隨機數的生成
1.rand函數
C語言提供了?個函數叫 rand,這函數是可以生成隨機數的,函數原型如下所示:
1 int rand (void);
rand函數會返回?個偽隨機數,這個隨機數的范圍是在0~RAND_MAX之間,這個RAND_MAX的大小是依賴編譯器上實現的,但是大部分編譯器上是32767。
rand函數的使用需要包含?個頭文件是:stdlib.h
那我們可以測試?下rand函數,這里多調用幾次,產生5個隨機數:
#include <stdio.h>#include <stdlib.h>int main(){ printf("%d\n", rand()); printf("%d\n", rand()); printf("%d\n", rand()); printf("%d\n", rand()); printf("%d\n", rand()); return 0;}
我們可以多運行幾次,可以發(fā)現:
我們會發(fā)現一次運行中產生的5個數字是相對隨機的,下一次運行程序生成的結果會和上一次一模?樣。
如果再深入了解?下,我們就不難發(fā)現,其實rand函數生成的隨機數是偽隨數,偽隨機數不是真正的隨機數,是通過某種算法生成的隨機數。真正的隨機數的是無法預測下?個值是多少的。而rand函數是對?個叫“種子”的基準值進行運算生成的隨機數。
之所以前面每次運行程序產生物的隨機數序列是?樣的,那是因為rand函數生成隨機數的默認種子是1。如果要生成不同的隨機數,就要讓種子是變化的。
2.srand函數
C語言中又提供了?個函數叫 srand,用來初始化隨機數的生成器的,srand的原型如下:
void srand (unsigned int seed);
程序中在調用 rand 函數之前先調用 srand 函數,通過 srand 函數的參數seed來設置rand函數生成隨機數的時候的種子,只要種子在變化,每次生成的隨機數序列也就變化起來了。
那也就是說給srand的種子是如果是隨機的,rand就能生成隨機數;在生成隨機種子的時候又需要?個隨機數,這就矛盾了。
3.time函數
在程序中我們?般是使用程序運行的時間作為種子的,因為時間時刻在發(fā)生變化的。 在C語言中有?個函數叫 time ,就可以獲得這個時間,time函數原型如下:
time_t time (time_t* timer);
time
函數會返回當前的日歷時間,其實返回的是1970年1月1日0時0分0秒到現在程序運行時間之間的差值,單位是秒。返回的類型是time_t類型的,time_t 類型本質上其實就是32位或者64位的整型類型。time函數的參數 timer 如果是非NULL的指針的話,函數也會將這個返回的差值放在timer指向的內存中帶回去。
如果timer 是NULL,就只返回這個時間的差值。time函數返回的這個時間差也被叫做:時間戳。
time函數的時候需要包含頭文件:time.h
如果只是讓time函數返回時間戳,我們就可以這樣寫:
time(NULL);//調用time函數返回時間戳,這里沒有接收返回值
4.生成隨機數的代碼如下:
那樣我們就能把隨機數的代碼改寫成下面這樣:
#include <stdio.h>#include <stdlib.h>#include <time.h>int main(){ //使?time函數的返回值設置種? //因為srand的參數是unsigned int類型,我們將time函數的返回值強制類型轉換 srand((unsigned int)time(NULL)); printf("%d\n", rand()); printf("%d\n", rand()); printf("%d\n", rand()); printf("%d\n", rand()); printf("%d\n", rand()); return 0;}
多運行幾次,會發(fā)現每次的結果就會有所差異。
而且srand函數是不需要頻繁調用的,一次運行的程序中調用一次就夠了。
二、設置隨機數的范圍
如果我們要生成0~99之間的隨機數,方法如下:
rand() %100;
余數的范圍是0~99
如果要生成1~100之間的隨機數,方法如下:
rand()%100+1;
%100的余數是0~ 99,0~ 99的數字+1,范圍是1~100
同理可得要生成100~200的隨機數,方法如下:
100 + rand()%(200-100+1)
余數的范圍是0~ 100,加100后就是100~200
綜上所述,生成a~b范圍的公式為:
a + rand()%(b-a+1)文章來源:http://www.zghlxwxcb.cn/news/detail-753071.html
總結
本文主要介紹了rand函數、srand函數、以及time函數和時間戳的概念和如何控制隨機數的范圍。下一篇文章將介紹利用隨機數和循環(huán)來寫一個猜數字游戲。新人博主創(chuàng)作不易,希望大家動動小手點點贊和關注。文章來源地址http://www.zghlxwxcb.cn/news/detail-753071.html
到了這里,關于C語言隨機數生成和范圍設置詳解【超詳細教程】的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!