題目:
讓使用者輸入s,s為srand的seed,宣告一個int陣列有100個int,並利用亂數產生100~1000亂數100個
計算這一百個亂數的下列數值,且平均標準差為實數(double)
最大值\n
最小值\n
平均\n
標準差\n

解法
1 | #include <iostream> |
解釋與詳細介紹
第一部分:陣列(array)介紹
這一題中我們會運用到一個新的技巧”陣列(array)”,他的寫法範例如下
1 | string cars[4] = {"Volvo", "BMW", "Ford", "Mazda"};//字串的陣列 |
上述陣列是以中括號[]內的數字作為陣列大小(可以理解為”項數”)、中括號前面的”名字”就是這個陣列的名字,且陣列裡的成員我們會以大括弧{},且運用逗號區隔每個成員。那在提到對應的順序時,便會輸出應對值。以cars與myNum為例
cars[0]=”Volvo”、cars[1]=”BMW”、cars[2]=”Ford”、cars[3]=”Mazda”
myNum[0]=10、myNum[1]=20、myNum[2]=30
並且也可以看到他的順序記位是從0開始到”陣列大小-1”(若陣列大小為”n”,那起始範圍便是”0~n-1”)這點比較需要注意。而本題會以”將亂數定義到我們所創建陣列的方式來計算其大小、平均與標準差值。
第二部分:主功能解析-變數、陣列定義與初始化
1 | int arr[100]={}; |
首先我們定義了陣列arr的大小為100且令他的初始值為空陣列{}(代表裡面值為空,我們又稱為initialize,”初始化”)若不這樣先行初始化的條件,會產生報錯。
並且我們令s為使用者輸入的seed值、i迴圈使用的變數、max與min分別代表最大最小值,aver與sd代表平均與標準差,且在亂數範圍介於100~1000的規定下,定義max設為99、min設為1001作為初始條件(稍後解析原因)。
第二部分:主功能解析-迴圈講解
1 | for(i=0;i<100;i++) |
第一個迴圈中,我們將arr[i]依序由arr[0]~arr[100]放入了100~1000的隨機變數,且t作為每一項arr[i]值的總和(t +=arr[i];便是將每項累加的意思),最後便可以得到平均數(除數為100.0代表除完的結果為浮點數值)。
1 | for(i=0;i<100;i++) |
第二部分的迴圈中,我們將arr由0~99再跑過一次,且將其中經過>max(初始值為99)的值做為新的max值、< min(初始值為1001)的值做為新的min值。因為max與min值的初始值分別為99(也就是100~1000的範圍內皆比99大)、1001(100~1000的範圍內皆比1001小)因此if迴圈必定成立,待迴圈結束後便可以得到真正的最大最小值。
再來我們定義了兩個a,b變數以方便計算標準差值,a代表題目算式中”Xi-μ”、b為計算根號內運算的輔助變數。
1 | cout<< max<<endl; |
最後就只要再輸出值便可以達到目的了!
第三部分:成果展示

若是不確定答案的正確性,也可以先將陣列的項數變小,並先輸出每一個階段目前陣列與變數的值,來方便debug與驗證喔~那我們明天見!