C語言二維數組超細講解

  用一維數組處理二維表格,實際是可行的,但是會很複雜,特別是遇到二維表格的輸入、處理和輸出。

  在你絞盡腦汁的時候,二維數組(一維數組的大哥)像電視劇里救美的英雄一樣顯現在你的面前,初識數組的朋友們還等什麼呢?讓我們認識一下這位武功高強的大哥吧!

1. 雙下標變數

  先來認識一下雙下標變數,聰明的你一定能夠顧名思義了吧,簡單舉個例子:Array[2][3]

  Array是數組名,後面的兩個方括弧內分別放行下標和列下標,這裡的行下標和列下標就是所謂的雙下標。

這裡的下標規則和一維數組的下標規則一模一樣:

(1)可以是正的整形變數:

    eg:Array[2][3];

(2)可以是字元常量:

    eg:Array[『A』][『B』] = Array[65][66];(不清楚字元常量的同學可以點擊:

//baike.baidu.com/item/%E5%AD%97%E7%AC%A6%E5%B8%B8%E6%95%B0?fromtitle=%E5%AD%97%E7%AC%A6%E5%B8%B8%E9%87%8F&fromid=103245)

(3)可以是有確定值的表達式:

    eg:Array[i+1][j+2]、Array[A[1]][A[2]];

  總而言之,這裡的下標分別表示行數和列數。

  接下來和小編一起感受一下雙下標變數的威力。

  上下標變數可以使方程組的計算更簡單,比如:

  計算一個二元一次線性方程組:

$$\left\{\begin{matrix}7*x_{1}-4*x_{2}=7\\-2*x_{1}+3*x_{2}=-1\end{matrix}\right.$$

  它的一般表達式為:

$$\left\{\begin{matrix}a11*x1+a12*x2=b1\\a21*x1+a22*x2=b2\end{matrix}\right.$$

  我們可以寫出一個該方程組的增廣矩陣:

$$\begin{pmatrix}a11& a12& b1\\a21& a22& b2\end{pmatrix}$$

  運用克拉默法則可得:

$$x1=(b1*a22-b2*a12)/(a11*a22-a21*a12)$$

$$x2=(a11*b2-a21*b1)/(a11*a22-a21*a12)$$

  因為矩陣的本質其實就是二維數表,我們可以用二維數組來表示這個方程組的係數。

  我們先定義一個二維數表:a[2][2],和一個一維數表:b[2]

  那麼a11可以寫成:a[0][0],a12可以寫成 a[0][1],a21,a22同理。則:

$$x1=(b[0]*a[1][1]-b[1]*a[0][1])/(a[0][0]*a[1][1]-a[1][0]*a[0][1])$$

  x2道理一樣。

  所以,通過雙下標變數,我們只需要為a[i][j],b[i]中的元素賦值,便可以輕鬆解決方程組的問題。

  另外,通過雙下標變數來表示一張二維數表,使下標變數的行列下標正好與數據在表格中的位置相對應,形象直觀地反映了二維表格。

 

2. 二維數組定義

 

  很簡單,由雙下標變數組成的數組就稱為二維數組,雙下標變數就是數組的元素。

  二維數組定義的一般形式和一維數組大同小異,只是下表中的常量表達式多了一個(維度加一):

<類型標識符> <數組名標識符> [<常量表達式>] [<常量表達式>]

  例如:float a [3] [4] ,b [5] [6] ;

  這裡的float表示二維數組中元素的類型是單精度浮點型, a、b 就是給數組取的名字。

  注意:a [3] [4] 千萬千萬不要寫成 a [3 , 4] !

 

  上面我們把二維數組理解成二維圖表,我們也可以將二維數組看成元素是一維數組的一維數組,將維數降低。

  比如 a [3] [4],我們可以把 a 看成一個一維數組,裡面有三個元素:a [0]、a [1]、a[2],每個元素又包含4個元素:

 

a [0]           a [0] [1] a [0] [2] a [0] [3] a [0] [4]
a [1] a [1] [1] a [1] [2] a [1] [3] a [1] [4]
a [2] a [2] [1] a [2] [2] a [2] [3] a [2] [4]

 

  這種理解方法在數據初始化和用指針表示時顯得很方便。

 

  在C語言中,二維數組中元素排列的順序是按行存放的,就是說先排列第一行的數據,再排列下第二行的數據,以此類推。如圖:

 

  

  數組元素可以出現在表達式中也可以被賦值,例如:b [1] [2] = a [1] [3] / 2。

  小編在這裡想提醒一下:要嚴格區分定義數組時用的 a [5] [6] 和引用元素時的 a [5] [6] 的區別哦!

3. 二維數組的初始化

  對二維數組的初始化有一下幾種辦法:

(1)分行給二維數組賦值

  這個方法用到了我們前面講的對二維數組的降維理解,比如:

int a [2] [3] = {{1, 2, 3}, {4, 5, 6}};

  此語句先將第一行元素依次賦值為:1、2、3,然後將第二行元素賦值為:4、5、6,因此說是按行賦值。

(2) 可以只有一個花括弧,按二維數組元素的排列順序對各元素依次賦值

  比如:

int a [2] [3] = {1, 2, 3, 4, 5, 6};

(3)對部分元素賦初值

  ①

int a [2] [3] = {{2}, {4}};

  此語句表示只給第一行第一個元素賦值為2,第二行第一個元素賦值為4,而其他元素都為0。

  ②

int a [2] [3] = {{1, 2, 3}};

  此語句表示只給第一行三個元素分別賦值為:1、2、3。

  ③

int a [2] [3] = {{},{1, 2, 3}};

  此語句表示只給第二行三個元素分別賦值為:1、2、3。

(4)定義數組時對第一維的長度可以不定義,但必須定義第二維的長度

  例:

int a [] [3] = {1, 2, 3, 4, 5, 6};

  系統會根據輸入的總個數分配存儲空間,易知這個二維數組有二行;

  再如:

  有關二維數組的知識就講到這裡啦,歡迎小夥伴來交流哦!

  預告:二維數組的應用

  2020-04-21 17:26:54