用一維陣列處理二維**,實際是可行的,但是會很複雜,特別是遇到二維**的輸入、處理和輸出。
在你絞盡腦汁的時候,二維陣列(一維陣列的大哥)像電視劇集裡救美的英雄一樣顯現在你的面前,初識陣列的朋友們還等什麼呢?讓我們認識一下這位武功高強的大哥吧!
聰明的你一定能夠顧名思義了吧,簡單舉個例子:array [2] [3]
array 是陣列名,後面的兩個方括號內分別放行下標和列下標,這裡的行下標和列下標就是所謂的雙下標。
這裡的下標規則和一維陣列的下標規則一模一樣:
(1)可以是正的整形變數:
eg:array [2] [3];
(2)可以是字元常量:
eg:array [『a』] [『b』] = array [65] [66];(不清楚字元常量的同學可以點選:
(3)可以是有確定值的表示式:
eg:array [i+1] [j+2]、array [ a[1] ] [ a[2] ];
總而言之,這裡的下標分別表示行數和列數。
接下來和小編一起感受一下雙下標變數的威力。
上下標變數可以使方程組的計算更簡單,比如:
計算乙個二元一次線性方程組:
$$\left\7*x_-4*x_=7\\-2*x_+3*x_=-1\end\right.$$
它的一般表示式為:
$$\left\a11*x1+a12*x2=b1\\a21*x1+a22*x2=b2\end\right.$$
我們可以寫出乙個該方程組的增廣矩陣:
$$\begina11& a12& b1\\a21& a22& b2\end$$
運用克拉默法則可得:
$$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]中的元素賦值,便可以輕鬆解決方程組的問題。
另外,通過雙下標變數來表示一張二維數表,使下標變數的行列下標正好與資料在**中的位置相對應,形象直觀地反映了二維**。
很簡單,由雙下標變數定義的陣列就稱為二維陣列,雙下標變數就是陣列的元素。
二維陣列定義的一般形式和一維陣列大同小異,只是下表中的常量表示式多了乙個(維度加一):
《型別識別符號》 《陣列名識別符號》 [《常量表示式》] [《常量表示式》]例如: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] 的區別哦!
對二維陣列的初始化有一下幾種辦法:
(1)分行給二維陣列賦值
這個方法用到了我們前面講的對二維陣列的降維理解,比如:
int a [2] [3] = , };此語句先將第一行元素依次賦值為:1、2、3,然後將第二行元素賦值為:4、5、6,因此說是按行賦值。
(2) 可以只有乙個花括號,按二維陣列元素的排列順序對各元素依次賦值
比如:
int a [2] [3] = ;(3)對部分元素賦初值①
int a [2] [3] = , };此語句表示只給第一行第乙個元素賦值為2,第二行第乙個元素賦值為4,而其他元素都為0。
②
int a [2] [3] = };此語句表示只給第一行三個元素分別賦值為:1、2、3。
③
int a [2] [3] = ,};此語句表示只給第二行三個元素分別賦值為:1、2、3。
(4)定義陣列時對第一維的長度可以不定義,但必須定義第二維的長度
例:
int a [3] = ;系統會根據輸入的總個數分配儲存空間,易知這個二維陣列有二行;
再如:
有關二維陣列的知識就講到這裡啦,歡迎小夥伴來交流哦!
預告:二維陣列的應用
2020-04-21
17:26:54
C語言二維陣列
int main int argc,const char argv int array 5 建立乙個二維陣列 型別修飾符陣列名 包含幾個小陣列 每個小陣列有多少個元素 初始值如何寫?int array 3 4 一維陣列可以省略元素個數,二維陣列只能省略第一位 第乙個 3 可以不寫 第二種初始值寫法 ...
C語言 二維陣列
c語言之二維陣列 1 定義的基本格式 int a 1 2 1代表一行,2代表二列 難點 二維陣列的行列下標。字串結束標誌的實用。2 一維陣列和二維陣列的聯絡。一維陣列如同千層面一樣一層一層的,而二維陣列,只是給千層面切了幾刀 3 int a 2 3 a 0 0 是1,a 0 1 是2,a 0 2 是...
C語言 二維陣列
1 陣列名稱不可以代表儲存區 2 陣列名稱可以代表陣列裡第乙個儲存區的位址 3 可以對陣列名稱進行sizeof計算,結果是陣列裡所有儲存區的總大小 4 c99規範裡可以使用變長陣列,宣告變長陣列的時候可以用變數表示陣列裡的儲存區個數 5 某一次程式執行過程中變長陣列裡儲存區個數不會變化 6 如果程式...