C语言随机数的生成及三个具体案例详解
隨機數的生成及三個具體案例
- rand函數
- srand函數
- 實例一:生成10個隨機數(不限制大小)
- 實例二:生成10個隨機數并排序
- 實例三:猜數字游戲
rand函數
首先,我截取了關于rand函數的文檔詳解,大家一起跟我看一下。
rand函數的作用:Generates a pseudorandom number.
翻譯過來就是生成偽隨機數的意思
注意:我們所說的偽隨機數其實不是真正隨機的,計算機目前無法真正實現隨機數的生成
調用rand函數需要引頭文件:#include<stdlib.h>
返回值:rand returns a pseudorandom number
翻譯過來就是 rand返回一個偽隨機數
語法:int ret=rand();
舉例:生成1-100之間的隨機數
int ret=rand()%100+1; 解釋一下:rand()%100代表生成0-99之間的隨機數(因為一個數對n取模,得到的值一定在0~n-1之間),在+1就生成了1-100的隨機數注意:The rand function returns a pseudorandom integer in the range 0 to RAND_MAX. Use the [srand]function to seed the pseudorandom-number generator before calling rand.
翻譯過來的意思就是函數返回一個介于0到RAND_MAX之間的偽隨機整數。在調用rand之前,使用srand函數來建立偽隨機數生成器。
其中有兩點:
rand函數返回一個介于0到RAND_MAX之間的偽隨機整數,這個RAND_MAX我們可以通過編譯器查詢。將RAND_MAX及其頭文件編寫至VS2019中,點擊RAND_MAX,右鍵->轉到定義
我們可以看到#define RAND_MAX 0x7fff這句代碼,定義了RAND_MAX為16進制的0x7fff,轉換成10進制就是32767,所以隨機數的生成范圍是0~32767,在int的取值范圍內,用int類型的變量接收即可
在調用rand之前,使用srand函數來建立偽隨機數生成器。
我們先不看srand函數具體內容,通過剛才的rand函數使用一下
#include<stdio.h> #include<stdlib.h> int main() {int ret = rand() % 100 + 1;printf("ret=%d\n", ret);return 0; }通過這樣一個代碼,你在短時間內執行多次,發現生成的隨機數竟然一樣 !
那么我們實際正確的方法是:使用srand函數,而且我們在幫助文檔中也用到了srand函數
那么接下來學習一下srand函數
srand函數
這張圖片是srand函數的幫助文檔,我們大家一起閱讀一下
srand函數的作用:Sets a random starting point.
譯文:設置一個隨機的起點。
srand函數需要引頭文件:
#include <stdlib.h> #include <time.h>注意:The srand function sets the starting point for generating a series of pseudorandom integers. To reinitialize the generator, use 1 as the seed argument. Any other value for seed sets the generator to a random starting point. rand retrieves the pseudorandom numbers that are generated. Calling rand before any call to srand generates the same sequence as calling srand with seed passed as 1.
我從中提取了主要內容:在調用rand函數之前要調用srand函數,設置隨機數的生成器,而且不能頻繁調用,在主函數調用一回即可。
用法:調用一次srand( (unsigned)time( NULL ) );
實例一:生成10個隨機數(不限制大小)
#include <stdlib.h> #include <stdio.h> #include <time.h>int main() {int i = 0;int ret = 0;srand((unsigned)time(NULL));//調用一次即可for (i = 0; i < 10; i++){ret = rand();printf("%d\n", ret);}return 0; }實例二:生成10個隨機數并排序
#include <stdlib.h> #include <stdio.h> #include <time.h>int main() {int a[10] = { 0 };int i = 0;int ret = 0;srand((unsigned)time(NULL));//調用一次即可for (i = 0; i < 10; i++){a[i] = rand() % 100;}printf("打印前\n");for (i = 0; i < 10; i++){printf("%d\n", a[i]);}for (i = 0; i < 9; i++){int j = 0;for (j = 0; j < 9 - i; j++){if (a[j] > a[j + 1]){int t = a[j];a[j] = a[j + 1];a[j + 1] = t;}}}printf("打印后\n");for (i = 0; i < 10; i++){printf("%d\n", a[i]);}return 0; }實例三:猜數字游戲
先上代碼:
#include<stdio.h> #include <stdlib.h> #include <time.h>void menu() {printf("***************************\n");printf("***** 1. play ******\n");printf("***** 0. exit ******\n");printf("***************************\n"); }void game() {int guess = 0;//猜數字游戲的過程//生成隨機數int r = rand() % 100 + 1;//0~99-->1~100//猜數字while (1){printf("猜數字:>");scanf("%d", &guess);if (guess < r){printf("猜小了\n");}else if (guess > r){printf("猜大了\n");}else{printf("恭喜你,猜對了\n");break;}} }int main() {int input = 0;srand((unsigned int)time(NULL));//時間-設置隨機數的生成器do{//打印菜單menu();printf("請選擇:>");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戲\n");break;default:printf("選擇錯誤\n");break;}} while (input);return 0; }再上截圖:
再來講解:
首先,我們要在主函數中實現游戲的邏輯:
實現game函數給予玩家提示
void menu() {printf("***************************\n");printf("***** 1. play ******\n");printf("***** 0. exit ******\n");printf("***************************\n"); }進行游戲部分的實現
void game() {int guess = 0;//玩家所要猜測的值//猜數字游戲的過程//生成隨機數int r = rand() % 100 + 1;//0~99-->1~100//猜數字while (1){printf("猜數字:>");scanf("%d", &guess);if (guess < r)//注意不要寫反{printf("猜小了\n");}else if (guess > r){printf("猜大了\n");}else{printf("恭喜你,猜對了\n");break;//猜對退出即可}} }隨機數的生成以及三個實例已講解完畢,希望能給你帶來幫助,喜歡請多多支持
總結
以上是生活随笔為你收集整理的C语言随机数的生成及三个具体案例详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IxChariot 6.7 endpoi
- 下一篇: 问卷星 如何自动填写问卷