---
slideOptions:
theme: serif
---
# 多維陣列與字元
###### 03.17 鄭余玄
###### 2018 資訊之芽 語法班
---
## 複習陣列
----
### 一維陣列
```c++
int fib[6] = {1, 1, 2, 3, 5, 8}
```
[0] | [1] | [2] | [3] | [4] | [5]
:-:|:-:|:-:|:-:|:-:|:-:
1 | 1 | 2 | 3 | 5 | 8
----
### 一維陣列操作
$\text{fib}(i) = \text{fib}(i - 1) + \text{fib}(i - 2)$
$\text{fib}(0) = \text{fib}(1) = 1$
```c++
// 初始化邊界條件
int fib[6]= {1, 1};
// i 從 2 開始
for (int i = 2; i < 6; ++i)
fib[i] = fib[i - 1] + fib[i - 2];
```
----
## 補充
- 儲存空間不同
```c++
int a[1000000];
```
---
## 多維陣列
----
### 二維陣列
![](https://i.imgur.com/jnFdNIu.png)
----
### 宣告方式
- 資料型態 陣列名稱[][]
```c++
int table[9][9];
double matrix[100][50];
char names[10][100];
```
----
## 存取
- 透過方括號中的索引值 (index) 存取
- 索引值也可以是變數
- 從 **0** 開始計數
```c++
int s[9][9];
s[1][1] = s[0][1] + s[1][0];
int i = 1, j = 2;
s[i][j] = 100;
```
----
## 初始化
```c++
int a2[3][4] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ,10, 11};
int a2[3][4] = {{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9 ,10, 11}};
int a3[3][4] = {};
```
----
## 99 乘法表
1. 將答案存入 2 維陣列
2. 讀入兩個整數
3. 利用乘法表,查詢並且輸出答案
- 挑戰:n * n 乘法表(!?
----
## 19 * 19 乘法表
![](https://i.imgur.com/Ig9EEgc.png)
----
## 補充:矩陣相乘
- 若 $A$ 為 $m\times n$ 矩陣,B 為 $n\times p$ 矩陣,則他們的**乘積** $AB$ 會是一個 $m\times p$ 矩陣
$(AB)_{ij}=\displaystyle\sum_{r=1}^n a_{ir}b_{rj}=a_{i1}b_{1j}+a_{i2}b_{2j}+\cdots+a_{in}b_{nj}$
----
## 三維?多維?
![](https://i.imgur.com/WhrNKgX.png)
---
## 字元
----
## 什麼是字元?
- 英文字母
- 數字
- 特殊符號
- #@sokjnbv$(qws*&)
----
## 宣告
```c++
// 宣告
char c;
// 初始化
char d = 'D';
```
----
## ASCII 編碼
![](https://i.imgur.com/3zgr7Ke.png)
----
## 字元運算(!?
```c++
char c;
c = 'A';
cout << c << endl;
c = 95;
cout << c << endl; // ?
c = c + 1;
cout << c << endl; // ???
```
----
## 特殊字元
- 不可見字元
- 換行 `'\n'`
- TAB `'\t'`
- 字串結尾 `'\0'`
- 用反斜線 `\` 輸出特殊字元
- `\"`
- `\'`
- `\\`