Re: [問題] 撰寫一程式以產生亂數的問題

看板C_and_CPP (C/C++)作者 (mim)時間14年前 (2011/07/29 21:52), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《totoron10 (totoron)》之銘言: : 習題:撰寫一程式產生500個介於1-6之間的亂數,即1<= x <= 6,並統計各數字出現的次數. : 以下是程式碼: #include <stdio.h> #include <stdlib.h> #define randomize() srand((unsigned time(NULL)) int main() { int i,x,n; int ctr[6]={0, 0, 0, 0, 0, 0,}; //用來儲存各個數字的出現次數,從0開始記 //因為陣列宣告是從0開始,所以這個陣列是ctr[0] = 0, ctr[1] = 0, ...ctr[5] =0 puts("<<Random list>>"); randomize(); for(i = 0;i < 500; i++){ n= rand()% 6 +1; ctr[n-1]++; printf("%d ", n); } put(""); for(i = 0; i< 6,i++) print("times of %d = %d\n",i+1,ctr[i]); system("PAUSE"); return 0; } : ---------------------------------------------------------------- : 問題: : 1.設定一維陣列的用意? 為何都要先設定為0? 一維陣列是用來儲存各個數字的出現次數,所以一開始在還沒出現時都要設為0 : 2.印出亂數時的n為何是 rand()%6+1,且加1的用意何在? rand() % 6取出來的數字可能為0 1 2 3 4 5,但是你要的數字是1 2 3 4 5 6 所以需要加1 : 3.ctr[n-1]++ 的遞增運算為何要減1呢? 因為陣列宣告是從0開始 例如宣告int array[5]; 實際上會有array[0], array[1], array[2], array[3], array[4]五項 所以在儲存各個數字的出現次數時,要把n-1才能存到相應的位置 數字 1 2 3 4 5 6 次數 ctr[0] ctr[1] ctr[2] ctr[3] ctr[4] ctr[5] : 4.最後,為何靠ctr[i]就可計算出該數字出現的次數? 因為ctr這個陣列本來就是儲存各個數字出現的次數 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.170.196.95 ※ 編輯: kmeita 來自: 118.170.196.95 (07/29 21:53)

07/29 22:19, , 1F
非常感謝,解了我許多疑惑!
07/29 22:19, 1F
文章代碼(AID): #1EChikoL (C_and_CPP)
文章代碼(AID): #1EChikoL (C_and_CPP)