奧林匹亞資訊班
11/16
講師:吳崇維(wayne)
今日目標~
- 陣列
- 陣列
- 陣列 (x
陣列(array)
什麼是陣列
你可以把陣列想像成一排房子(記憶體)
裡面住著不同的人 (各自不同的值)
一個陣列有以下的屬性
- 類別 ( int , char , ...)
- 名字
- 長度
- 各自的值
宣告一個陣列
如同宣告一個整數,我們可以宣告一個陣列,不同的是我們需要指定陣列的大小。
int a;
int b[10];
使用中括號 []
宣告b[10] 代表這個陣列名字為b
並且長度為10。
取用陣列元素
如果我們宣告:
則我們可以取用 a[0] , a[1] ... a[9] 這些變數
我們並不能取用a[10]!會導致程式錯誤
註:在工程師眼裡,數字是從0開始的!
int a[10];
讀入10個數字,接著輸出他們
不會陣列之前...
int a;
int b;
int c;
...
int i;
int j;
cin >> a;
cin >> b;
...
cin >> j;
cout << a; ... (趴)
讀入10個數字,接著輸出他們
會陣列之後!
int a[10];
for (int i = 0; i < 10; i++) {
cin >> a[i];
}
for (int i = 0; i < 10; i++) {
cout << a[i] << '\n';
}
細看上面的code
int a[10];
for (int i = 0; i < 10; i++) {
cin >> a[i];
}
for (int i = 0; i < 10; i++) {
cout << a[i] << '\n';
}
其中 i 被稱為註標 (index) , 使用迴圈可以
明瞭的表示陣列『從頭到尾』的值!
陣列小技巧
如同宣告變數,若是沒有初始陣列,則他的值會亂飄!
以下是變數 / 陣列的初始技巧
int a = 0;
int a[10] = {0};
注意我們只能初始0,不能初始其他的數
可以初始為任意數
更精確來說
一個陣列把相同類別
的變數串在一起 :
Ex : int a[10]; 串起10個整數
觀念釐清:
int a[10]; // 陣列宣告
a[1] = 3; // 這時候a[1]是一個整數變數
細談陣列初始化
如果想把全部的數值設為0
int a[10] = {};
-----------------
int a[10] = {0};
-----------------
for (int i = 0; i < 10; i++) {
a[i] = 0;
}
如果已經知道陣列全部的數值
可以簡單的初始:例如需要1,2,3,4,5
int a[5] = {1,2,3,4,5};
-----------------
int a[] = {1,2,3,4,5}; // 不建議
-----------------
int a[5];
a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 4;
a[4] = 5;
-----------------
for (int i = 0; i < 5; i++) {
a[i] = i+1;
}
陣列技巧
技巧 I : 計數
int a[10] = {};
每一個元素 (a[2]) 代表這個元素代表的狀況出現過幾次!
技巧 II : 標記
int a[10] = {};
每一個元素代表這個元素代表的狀況有沒有出現過!
陣列技巧
來個練習
費氏數列:
1 , 1, 2, 3, 5, 8, 13, 21, ....
第一二項都是1
接著每一項都是前兩項的和
試著用陣列達成:
求出這個數列第20項的值
多維陣列
或是巢狀陣列(雖然沒人這樣說~)
示意圖
如果宣告 : int a[3][5];
多維陣列
多維的維:我們所在三維空間
我們可以宣告一個
一層又一層~的陣列
int a[2][3][4];
問:我們這樣一共宣告多少整數呢?
int a[2][3][4];
1) 我們一共宣告了2*3*4 = 24個整數
2) a[1][2][2] 就是裡面其中一個整數
3) a[1][2] 是一個一維陣列 !
4) a[1] 是一個二維陣列
5) a 就是個三維陣列啦~
小範例~
目標:把99乘法表的元素記進
陣列中
例如 a[1][3] = 1*3 = 3
用迴圈達成這件事!
int a[9][9];
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
a[i][j] = i*j;
}
}
記住:多層迴圈的變數宣告不能重複~我們使用 i 以及 j
小範例~
目標:把99乘法表的元素記進
陣列中
例如 a[1][3] = 1*3 = 3
用迴圈達成這件事!
int a[10][10];
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
a[i][j] = i*j;
}
}
記住:多層迴圈的變數宣告不能重複~我們使用 i 以及 j
然後注意陣列的宣告大小
Homework~~
利用上課所學的技巧~
有不懂都可以提問~
FeedBack!
一起努力快樂寫程式吧!
class 11/16 陣列!
By Wayne Wu
class 11/16 陣列!
- 57