二維陣列

-葉子齊-

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,完成以下步驟

  1. 宣告一個2 * 3 的二維陣列
  2. 輸入你喜歡的任何數字,共6個
  3. 把陣列依序輸出,值與值中間要有空格

實作

#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