奧林匹亞資訊班

11/16

講師:吳崇維(wayne)

今日目標~

 

  • 陣列
  • 陣列
  • 陣列 (x

陣列(array)

什麼是陣列

 

你可以把陣列想像成一排房子(記憶體)

裡面住著不同的人 (各自不同的值)

 

一個陣列有以下的屬性

  1. 類別  ( int , char , ...)
  2. 名字
  3. 長度
  4. 各自的值

宣告一個陣列

 

如同宣告一個整數,我們可以宣告一個陣列,不同的是我們需要指定陣列的大小。

 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] = {};

每一個元素代表這個元素代表的狀況有沒有出現過

 

 

陣列技巧

 

陣列可以作為記住狀態的好方法

也就是我們說的標記!

 

範例題目 : b004

 

來個練習

 

費氏數列:

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!

一起努力快樂寫程式吧!

Made with Slides.com