## 陣列
----
<style>
.reveal .slides {
text-align: left;
}
</style>
相同用途的數字...,可以擺在一起...。
----
### 一維陣列
----
變數只能儲存一個值,那當我們想儲存很多**相同型態且用途相近**的資料時怎麼辦呢?
這時候我們就可以利用**陣列**。
----
簡單的介紹一下,陣列是一種資料結構,可以儲存相同資料型態的變數。如此一來,我們就不需要宣告一堆變數名稱,只要有一個陣列就可以搞定。
----
宣告:
```c=
int num[10]; //宣告一個整數型態的陣列,叫做num,大小是10。
```
由上述可知,在變數名稱後面我們會利用 **[]** ,來宣告陣列的大小
文言一點,便是:
```
資料型態 陣列名稱[大小];
```
----
那型態其實也跟宣告變數一樣。
陣列的值跟變數一樣都是可以先宣告的,例如:
```c=
int num[5] = {1, 2, 3, 4, 5};
char c[5] = {'a', 'b', 'c', 'd', 'e'};
int special_array[3] = {0}; //這個是比較特別的宣告方法,能把裡面的元素都宣告為0
```
----
那我們要先了解資料存入陣列後他們的位置,其實你可以把陣列想成分了很多格的箱子,而每隔都有編號,而編號就是 **name[n]** 裡面的 **n**,而且n是從0開始數的,所以一個大小只有10的陣列,n是0~9,例如:
----
```cpp=
#include<iostream>
int main(){
int number[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
printf("%d %d %d", number[0], number[5], number[10]);
}
/*輸出:
1 6 亂數
*/
```
我們來看number[n] :
* n = 0 -> number[0] = 1
* n = 5 -> number[5] = 6
* n = 10 -> number[10] = 亂數
----
```cpp=
#include<iostream>
int main(){
int number[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
printf("%d %d %d", number[0], number[5], number[10]);
}
```
因為當n=10時已是第11個數,但我們的大小只有10,所以並不知道那裡放了些什麼數(指標會更深入講解),因此在宣告時要小心!
----
那輸入也跟輸入變數一樣,利用**scanf**函數即可。
Example : 輸入10個數,並利用陣列儲存起來。
```c=
int number[10];
for(int i=0;i<10;i++){ //i:0~9
scanf("%d", &number[i]); //輸入編號0~9的值
}
```
----
Example : 輸入五科成績,並輸出平均。
```c=
#include<stdio.h>
int main(){
float grade[5], sum = 0.0, avg; //五科成績分別存在grade[0~4], sum是總和, avg是平均
for(int i=0;i<5;i++){
scanf("%f", &grade[i]);//輸入五科成績
sum = sum + grade[i];
}
avg = sum / 5;
printf("%f\n", avg);
}
/*輸出
30
20
30
10
50
28.000000
*/
```
----
### 二維陣列
----
如果要大量儲存同一種型態、而且彼此又有密切關係的「表格式」資料,例如數學中的矩陣,這時候就能將其宣告並設定為「二維陣列」。
可以把二維陣列想像成一個平面的**表格或棋盤**,用來儲存資料。
----
宣告範例:
```
資料型態 陣列名稱[大小][大小]
```
例如新增一個 2x3 大小的二維陣列:
```c=
int number[2][3];
char ch[2][3];
```
----
賦予值我們可以這樣寫:
```c=
int num[2][3] = {{1, 2, 3}, {4, 5, 6}};
char ch[2][3] = {{'a', 'b', 'c'}, {'d', 'e', 'f'}};
int special_array[2][3] = {0};
```
----
如果還是不太理解,我們直接把他拆開來看:
```c=
int num[2][3] = {{1, 2, 3}, {4, 5, 6}};
for(int i=0;i<3;i++){
printf("%d ", num[0][i]);
printf("\n");
for(int j=0;j<3;j++){
printf("%d ", num[1][j]);
}
return 0 ;
}
/*輸出:
1 2 3
4 5 6
*/
```
可以發現其實我們可以用**行跟列**的方式來理解。
----

----
```cpp=
#include<iostream>
using namespace std;
int main()
{
int nine[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
printf("%d ", nine[i][j]);
}
printf("\n");
}
return 0;
}
```
----
{"metaMigratedAt":"2023-06-17T04:36:54.868Z","metaMigratedFrom":"YAML","title":"程式設計培訓 - (5)","breaks":true,"slideOptions":"{\"theme\":\"solarized\",\"transition\":\"fade\"}","contributors":"[{\"id\":\"1dfd0d36-665c-414c-a3ba-995f194a8cb9\",\"add\":2972,\"del\":0}]"}