二維陣列
-葉子齊-

who am i

- 姓名:葉子齊
- 職位:副社長兼教學兼美宣
- 綽號:葉子
宣傳time!

春遊 -- 最後一個活動🥳🥳😭
3/30(日) 9:40 - 17:00
遊戲、野餐、桌遊店🍙🍕🍰🍪
考完段考乃一起玩
截止到禮拜五23:59
一維陣列(複習)
宣告
int a[5] = {50, 10, 25, 30, 1};
陣列型態
陣列名稱
陣列大小
內容物(不一定要設)
賦值
int a[5] = {50, 10, 25, 30, 1};
int b[3] = {10};(一)宣告同時賦值
int a[4];
a[0] = 100;
a[1] = 200;
a[2] = 300;
a[3] = 400; int a[3];
for(int i=0 ;i<3 ;i++){
a[i] = 55;
}(二)單格
(三)迴圈
輸入 & 輸出
(一)單格
int a[3];
for(int i=0 ;i<3 ;i++){
cin>>a[i];
}int a[3] = {7,8,9};
for(int i=0 ;i<3 ;i++){
cout<<a[i]<<' ';
}int a[3];
cin>>a[0]>>a[1]>>a[2];int a[3] = {7,8,9};
cout<<a[0]<<a[1]<<a[2];(二)迴圈
輸入: 10 20 30
輸出:7 8 9
| [0] | [1] | [2] |
|---|---|---|
| 10 | 20 | 30 |
a
上次沒講到的補充
若有給定初始值,可省略陣列元素個數(陣列大小)
#include <iostream>
using namespace std;
int main()
{
int arr[] = {1,2,3,4,5};
cout<<arr[0];
char chr[] = {'z','s','i','s','c'};
cout<<chr[0];
return 0;
}
宣告 & 概念
宣告 & 概念
- 一維陣列
int a[3] = {9,8,7};
| [0] | [1] | [2] |
|---|---|---|
| 9 | 8 | 7 |
a
宣告 & 概念
- 二維陣列
陣列名稱
int a[2][3] = {{9,8,7},{6,5,4}};
陣列型態
陣列大小
內容物(不一定要設)
宣告 & 概念
- 二維陣列
列 , 行 (三行兩列)
int a[2][3] = {{9,8,7},{6,5,4}};| [0] | [1] | [2] | |
|---|---|---|---|
| [0] | 9 | 8 | 7 |
| [1] | 6 | 5 | 4 |
a
列
行
宣告 & 概念
| [0] | [1] | [2] | |
|---|---|---|---|
| [0] | |||
| [1] |
- 二維陣列
int a[2][3] = {{9,8,7},{6,5,4}};[0][0] = 9
[0][1] = 8
[0][2] = 7
[1][0] = 6
[1][1] = 5
[1][2] = 4
9
6
8
7
4
5
宣告 & 概念
- 二維陣列
這兩種寫法都可以
#include <iostream>
using namespace std;
int main()
{
int arr[2][3]={{9, 8, 7},{6, 5, 4}};
int ARR[2][3]={
{9, 8, 7},
{6, 5, 4}
};
return 0;
}基本操作
賦值 & 輸入
(一)單格
(二)迴圈
#include <iostream>
using namespace std;
int main()
{
int arr[2][3];
arr[0][0]=100;
arr[0][1]=200;
arr[0][2]=300;
arr[1][0]=400;
arr[1][1]=500;
arr[1][2]=303;
return 0;
}#include <iostream>
using namespace std;
int main()
{
int arr[2][3];
for(int i=0;i<2;i++){
for(int t=0;t<3;t++){
cin>>arr[i][t];
}
}
return 0;
}賦值 & 輸入
(一)單格
#include <iostream>
using namespace std;
int main()
{
int arr[2][3];
arr[0][0]=100;
arr[0][1]=200;
arr[0][2]=300;
arr[1][0]=400;
arr[1][1]=500;
arr[1][2]=600;
return 0;
}| [0] | [1] | [2] | |
|---|---|---|---|
| [0] | |||
| [1] |
200
300
500
100
400
600
賦值 & 輸入
(二)迴圈
#include <iostream>
using namespace std;
int main()
{
int arr[2][3];
for(int i=0;i<2;i++){
for(int j=0;j<3;j++){
cin>>arr[i][j];
}
}
return 0;
}300
600
| [0] | [1] | [2] | |
|---|---|---|---|
| [0] | |||
| [1] |
200
500
100
400
i = 0
i = 1
j = 0
j = 1
j = 2
j = 0
j = 1
j = 2
cin>>arr[0][0]
cin>>arr[0][2]
cin>>arr[1][0]
cin>>arr[1][1]
cin>>arr[1][2]
cin>>arr[0][1]
輸入 & 輸出
(一)單格
(二)迴圈
#include <iostream>
using namespace std;
int main()
{
int arr[2][3];
cin>>arr[0][0];
cout<<arr[0][0];
return 0;
}#include <iostream>
using namespace std;
int main()
{
int arr[2][3] = {{9,8,7},{6,5,4}};
for(int i=0;i<2;i++){
for(int j=0;j<3;j++){
cout<<arr[i][j];
}
}
return 0;
}賦值 & 輸入
(一)單格
#include <iostream>
using namespace std;
int main()
{
int arr[2][3];
cin>>arr[0][0];
cout<<arr[0][0];
return 0;
}跟一維陣列一樣的用法
輸入:31
輸出:31
賦值 & 輸入
(二)迴圈
#include <iostream>
using namespace std;
int main()
{
int arr[2][3] = {{9,8,7},{6,5,4}};
for(int i=0;i<2;i++){
for(int j=0;j<3;j++){
cout<<arr[i][j];
}
}
return 0;
}跟使用迴圈輸入一樣
只是從cin改為cout
實作
實作
寫一段code,完成以下步驟
- 宣告一個2 * 3 的二維陣列
- 輸入你喜歡的任何數字,共6個
- 把陣列依序輸出,值與值中間要有空格

實作
#include <iostream>
using namespace std;
int main()
{
int arr[2][3]; //step1
for(int i=0;i<2;i++){ //step2
for(int j=0;j<3;j++){
cin>>arr[i][j];
}
}
for(int i=0;i<2;i++){ //step3
for(int j=0;j<3;j++){
cout<<arr[i][j]<<" ";
}
}
return 0;
}
可讀性更高?
如果我想讓他可讀性更高?
像前面圖解的表格一樣
->換行
300
600
| [0] | [1] | [2] | |
|---|---|---|---|
| [0] | |||
| [1] |
200
500
100
400
拿這個表格舉栗子
可讀性更高?
300
600
| [0] | [1] | [2] | |
|---|---|---|---|
| [0] | |||
| [1] |
200
500
100
400
原本的寫法會輸出:
100 200 300 400 500 600
我想讓它變成:
100 200 300
400 500 600
可讀性更高?
i = 0
j = 0
j = 2
j = 1
cin>>arr[0][1]
cin>>arr[0][2]
cin>>arr[0][0]
i = 1
j = 0
j = 2
j = 1
cin>>arr[1][1]
cin>>arr[1][2]
cin>>arr[1][0]
400
500
600
100
200
300
在這裡換行
->在跑完j迴圈後換行
可讀性更高?
#include <iostream>
using namespace std;
int main()
{
int arr[2][3];
for(int i=0;i<2;i++){
for(int j=0;j<3;j++){
cin>>arr[i][j];
}
}
for(int i=0;i<2;i++){
for(int j=0;j<3;j++){
cout<<arr[i][j]<<" ";
}
cout<<endl; //在跑完j迴圈後換行
}
return 0;
}
實作
#include <iostream>
using namespace std;
int main()
{
int row, column;
while(cin>>row>>column){
int arr[row][column];
for(int i=0;i<row;i++){
for(int j=0;j<column;j++){
cin>>arr[i][j];
}
}
for(int i=0;i<column;i++){
for(int j=0;j<row;j++){
cout<<arr[j][i]<<" ";
}
cout<<endl; //在跑完j迴圈後換行
}
}
return 0;
}->翻轉矩陣(二維陣列)
line 8:
也可以直接
int arr[100][100];
(因為此題題目有限制)
- i & j迴圈次數互換
- 索引值(i & j)互換
多組測資

範例輸入:
2 3 3 1 2 8 5 4 3 3 5 8 6 4 7 2 1 9 5 ...
第一組
第二組
...
while(cin>>變數){
//code
}題目說多組測資就要用這種寫法:
二維陣列
By strange_swing
二維陣列
- 123