CSDN話題挑戰(zhàn)賽第2期
參賽話題:學習筆記
學習之路,長路漫漫,寫學習筆記的過程就是把知識講給自己聽的過程。這個過程中,我們去記錄思考的過程,便于日后復習,梳理自己的思路。學習之樂,獨樂樂,不如眾樂樂,把知識講給更多的人聽,何樂而不為呢?
目錄
一.rand函數(shù)
應用
存在問題
二.srand函數(shù)
應用
存在問題
用time(0)實現(xiàn)真正的隨機數(shù)。
三.隨機函數(shù)的具體應用
1.產(chǎn)生隨機數(shù)范圍[1-10]
2.產(chǎn)生隨機數(shù)范圍[66,88]
3.總結
一.rand函數(shù)
C語言中如果我想要輸出一個隨機數(shù),那么我們就需要用rand函數(shù),我們先來看看這個函數(shù)的相關信息
?rand函數(shù)可以隨機的產(chǎn)生 0 ~ rand_max 的隨機數(shù),定義類型不同最大值也不同,rand 函數(shù)包含在頭文件stdlib.h中。我們再來看看這rand_max是多少
?0x7fff,這是一個十六進制數(shù)(以0x開頭),將它變成十進制就是32767,所以rand函數(shù)取隨機數(shù)的范圍是:0~32767
應用
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a=0;
int i=0;
while(i<=10){
a=rand();
printf("%d\n",a);
i++;
}
}
運行我們來看看結果:
存在問題
我運行了兩次,一次循環(huán)10次,一次循環(huán)20次??吹竭\行的結果我們發(fā)現(xiàn)一個很嚴重的問題——用rand函數(shù)輸出的隨機數(shù)是有順序的,它的輸出結果是一成不變的,很明顯這不是我們需要的隨機數(shù),這時我們就需要用到srand函數(shù)。
二.srand函數(shù)
包含文件:stdlib. h
srand函數(shù)是隨機數(shù)發(fā)生器的函數(shù)。原型:void srand(unsigned int seed);? srand和rand()配合使用產(chǎn)生偽隨機數(shù)序列。
此函數(shù)可以設定rand函數(shù)所用的隨機數(shù)產(chǎn)生演算法的種子值。任何大于一的種子值都會將rand隨機數(shù)所產(chǎn)生的虛擬隨機數(shù)序列重新設定一個起始點。
應用
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a=0;
int i=0;
srand(1);
while(i<=20){
a=rand();
printf("%d\n",a);
i++;
}
}
在這里我先定義種子值為1,我在之后運行會定義種子值為2和5來看看他們的效果:
存在問題
?我們發(fā)現(xiàn)任何大于一的種子值都會將rand隨機數(shù)所產(chǎn)生的虛擬隨機數(shù)序列重新設定一個起始點。但這很明顯也不是我們需要的隨機數(shù),因為本質上它還算不是輸出了隨機數(shù),他需要給一個隨機種子值才能輸出一個隨機數(shù),那么我們有兩種方法來解決這個問題:通常可以利用 time(0) 或 getpid(0) 作為seed的返回值,
用time(0)實現(xiàn)真正的隨機數(shù)。
首先需要頭文件math.h
應用
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int a=0;
int i=0;
srand((unsigned int)time(NULL));
while(i<=20){
a=rand();
printf("%d\n",a);
i++;
}
}
我們多運行幾次看看:
?很明顯,之前存在的問題已經(jīng)解決了,現(xiàn)在輸出的就是我們所想的隨機數(shù)
三.隨機函數(shù)的具體應用
我們雖然已經(jīng)可以輸出隨機數(shù),但是rand函數(shù)的范圍是0~32767,在我們應用過程中這往往不是我們想要的,我們想可不可以縮小它的范圍或者說給定他一個范圍,比如說在0~100中輸出10個隨機數(shù),這些情況才是我們更需要的,那么接下來向大家介紹一下該怎么操作
1.產(chǎn)生隨機數(shù)范圍[1-10]
代碼:
?
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int a=0;
int i=0;
srand(time(0));//這樣寫跟srand((unsigned int)time(NULL));同義
while(i<=20){
a=rand()%11;
printf("%d\n",a);
i++;
}
}
結果:?
2.產(chǎn)生隨機數(shù)范圍[66,88]
其余部分不要變,只要將a=rand()%11;改為a=66+rand()%23;即可
3.總結
產(chǎn)生隨機數(shù)范圍[n,m]文章來源:http://www.zghlxwxcb.cn/news/detail-440816.html
只要寫成a=n+rand()%(m-n+1);即可文章來源地址http://www.zghlxwxcb.cn/news/detail-440816.html
到了這里,關于C語言中隨機數(shù)的生成(rand函數(shù)和srand函數(shù))的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!