# 【3-1】一維陣列
你今天是數學小老師,老師要你幫忙登記這次的小考成績,你會怎麼做?
那還不簡單,畫表格,照座號登記。
在程式中,有沒有這種表格,來儲存資料呢?當然有,就是我們接下來要介紹的「一維陣列」
## 一維陣列
先不用管什麼是陣列,我們先畫表格就好,假設班上的成績如下:
| 1號 | 2號 | 3號 | 4號 | 5號 | 6號 | 7號 | 8號 | 9號 | 10號 |
| ---- | ---- | ---- | --- | --- | --- | --- | --- | --- | --- |
| 84分 | 57分 | 91分 | 47分 | 63分 | 88分 | 21分 | 98分 | 74分 | 78分 |
要怎麼儲存成績,你可能想到變數宣告:
```cpp
int a=84;
int b=57;
int c=91;
int d=47;
int e=63;
int f=88;
int g=21;
int h=98;
int i=74;
int j=78;
```
但這樣如果變50個學生、300個學生,不就弄到瘋掉,還很難直接找到這是誰的成績。
所以,我們來學一個新的資料儲存方式:陣列
### 陣列的宣告
```cpp
int a[n]; // 宣告一個名稱為 a,可以存放 n 個整數的陣列
```
### Python對照
```python
a = [0] * n # 宣告一個長度為 n,初始值都是 0 的 list
```
或者已經知道陣列要存放什麼,也可以直接寫成這樣:
```cpp
int a[10] = {84,57,91,47,63,88,21,98,74,78};
```
### Python對照
```python
int a[10] = {84,57,91,47,63,88,21,98,74,78};
```
但是!要注意!
### 陣列的編碼
陣列的編號是 0-index,所以第一格叫做 `a[0]`,第二間叫 `a[1]`,以此類推。
剛才的表格就可以被改寫成這樣:
| `a[0]` | `a[1]` | `a[2]` | `a[3]` | `a[4]` | `a[5]` | `a[6]` | `a[7]` | `a[8]` | `a[9]` |
| ---- | ---- | ---- | --- | --- | --- | --- | --- | --- | --- |
| 84 | 57 | 91 | 47 | 63 | 88 | 21 | 98 | 74 | 78 |
所以,一個大小為 n 的陣列 `a`,最後一項是 `a[n-1]` 而不是 `a[n]` 喔!
### 陣列的遍歷
我們可以配合 `for` 迴圈來做到陣列的遍歷,舉例如下:
### 輸入
題目中常常會需要讀取資料,我們可以根據資料的數量先建立一個大小合適的陣列,再依序讀入。
```cpp=
int n;
cin >> n; // n 代表有幾筆資料
int a[n]; // 建立一個大小為 n 的陣列
for(int i=0;i<n;i++){
cin >> a[i]; // 輸入每一格的數字
}
```
### Python對照
```python=
n = int(input())
a = []
for i in range(n):
a.append(int(input()))
```
透過 `i`,我們會從 `i=0`,也就是第一格 `a[0]`,一路指到 `i=n-1`,也就是最後一格 `a[n-1]`。
### 輸出
假設陣列中已經有資料了,這時候就一樣用 `for` 迴圈遍歷,只是改成 `cout` 而已。
```cpp=
for(int i=0;i<n;i++){
cout << a[i] << endl;
}
```
### Python對照
```python=
for i in range(n):
print(a[i])
```
如果只需要特定一格的資料,也可以直接 `cout` 那一格的編號就好。
像是剛才的舉例:
```cpp
int a[10]={84,57,91,47,63,88,21,98,74,78};
```
| `a[0]` | `a[1]` | `a[2]` | `a[3]` | `a[4]` | `a[5]` | `a[6]` | `a[7]` | `a[8]` | `a[9]` |
| ---- | ---- | ---- | --- | --- | --- | --- | --- | --- | --- |
| 84 | 57 | 91 | 47 | 63 | 88 | 21 | 98 | 74 | 78 |
這時候要查 7 號的成績,就輸出 `a[6]` 就可以了。為什麼不是 `a[7]`,因為陣列是 0-index 編碼。
---
聯絡方式:codecodefunny@gmail.com
最後編修時間:2025/07/10 子柚筆