用一維陣列處理二維表格,實際是可行的,但是會很復雜,特別是遇到二維表格的輸入、處理和輸出,
在你絞盡腦汁的時候,二維陣列(一維陣列的大哥)像電視劇里救美的英雄一樣顯現在你的面前,初識陣列的朋友們還等什么呢?讓我們認識一下這位武功高強的大哥吧!
1. 雙下標變數
聰明的你一定能夠顧名思義了吧,簡單舉個例子:Array [2] [3]
Array 是陣列名,后面的兩個方括號內分別放行下標和列下標,這里的行下標和列下標就是所謂的雙下標,
這里的下標規則和一維陣列的下標規則一模一樣:
(1)可以是正的整形變數:
eg:Array [2] [3];
(2)可以是字符常量:
eg:Array [‘A’] [‘B’] = Array [65] [66];(不清楚字符常量的同學可以點擊:
https://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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/36296.html
標籤:C
上一篇:藍橋杯-最大子陣
