之前有看到有人在寫“擲骰子100次,打印出擲骰子”的代碼
便找空寫了一下代碼,不是很好,僅供大家討論
因為擲骰子的結果是在1~6之間隨機產生的,因此代碼也必須要模擬隨機的情況
但是電腦是無法真正的產生隨機數,只能以函數近似生成的方式得到,因此我的代碼也是基於這種方式寫出的
得到隨機數的方式有兩步,第一步是設置產生隨機數的種子,第二步才是根據種子得到隨機數
這兩步分別對應了兩個函數:srand()和rand()
並且由於是函數生成,函數的特性決定了如果種子一樣,會得到相同的結果,也就不存在隨機的情況了
為了避免這種情況,使用時間來作為隨機數的種子,這里使用了time()函數
代碼如下:
#include <stdio.h> #include <stdlib.h> // 使用了srand和rand函數 #include <time.h> // 使用了time函數 int main() { // 按時間設置生成隨機數的種子 srand((unsigned)time(NULL)); // 設置一個長度為6的int數組,存放擲色子的結果 int numbers[6] = {0, 0, 0, 0, 0, 0}; // 循環擲色子100次 for (int i = 0 ; i < 100; i++) { // 生成隨機結果,控制在1~6之間 int num = rand() % 6 + 1; // 根據結果進行對應統計 switch (num) { case 1: // 骰子結果為1時的計數 numbers[0]++; break; case 2: // 骰子結果為2時的計數 numbers[1]++; break; case 3: // 骰子結果為3時的計數 numbers[2]++; break; case 4: // 骰子結果為4時的計數 numbers[3]++; break; case 5: // 骰子結果為5時的計數 numbers[4]++; break; case 6: // 骰子結果為6時的計數 numbers[5]++; default: break; } } // 擲色子完成后遍歷數組輸出結果 for (int j = 0; j < 6; j++) { // 輸出結果 printf("%d", numbers[j]); if (j < 5) { printf(" - "); } else { printf("\n"); } } return 0; }
需要注意的是,由於計算機的運行速度非常快,因此設置種子是不能在for循環中進行的
否則會造成很多次種子是一樣的,造成產生的值也一樣的后果
本文參考了如下文章: