Re: [問題] 撰寫一程式以產生亂數的問題
※ 引述《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
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章