在c++中,
如果陣列的元素又是陣列,則稱為二維陣列,其每一維對應乙個下標,第一維通常稱為行(row),第二維則稱為列(
column
)。例如
int a[2][3];
可以將二維陣列a看成是乙個2行
3列的矩陣。
可以使用花括號括起來的初始化式列表來初始化二維陣列的元素。
int a[2][3] =
, };
也可以不使用花括號,而是將二維陣列中的每個元素排列後進行初始化。
int a[2][3] = ;
通常情況下,如果要將二維陣列中所有的元素都置零時,可以使用如下方法:
int a[2][3] = ;
可以使用下標運算子來訪問二維陣列的元素,此時陣列的每個維度對應乙個下標運算子。如
int i = a[0][1];
表示將i的值賦值成二維陣列中第1行第
2列的元素值。
蛇形填數指的是從1開始,以
1為步進,按照蛇形排列,將指定的位置填上指定的數。下圖為
5*5矩陣時的蛇形填數排列。
定義乙個維數為20*20的二維陣列,並且將該陣列的第
1行,第
20列的元素設定為
1,即蛇形排列的起始位置。
#define max_n 20
int a[max_n][max_n] = ;
int x = 0;
int y = max_n -1;
int value = a[x][y] = 1;
如上圖所示,將蛇形排列,頭尾連線看成是乙個迴圈,即從1-16是乙個迴圈,從
17-24
是另乙個迴圈,
25是最後乙個迴圈。每個迴圈都由
4個步驟組成,即由上向下、由右向左,由下向上,由左向右,最後形成頭尾相連。因此,有如下**
while (value < n*n)
其中,外面的while()語句的迴圈條件就是判斷是否將二維陣列中所有的位置都設定了值,每迴圈一次就完成上述的四個步驟,而裡面的四個
while()
語句就對應了一次迴圈的四個步驟。這四個
while()
語句的迴圈條件是乙個邏輯與操作符。邏輯與操作符中第乙個表示式保證了行數或者列數不超過二維陣列最大的行數或者列數;第二個表示式判斷了下乙個要賦值的位置上的值是否是
0,如果是
0,則說明該位置沒有被賦值,可以對其進行賦值;如果不是
0,則說明該位置已經被賦過值,就不必再進行賦值了。
通過for迴圈語句的巢狀實現二維陣列的列印。
for (x = 0; x < n; x++)
其中,第乙個printf()中的引數「
5」是將所有輸出的數字寬度指定為
5,保證了輸出的矩陣行和列是對齊的;第二個
printf()
的作用是換行,即每輸出完一行,則需要換行繼續輸出下一行。
5 完整**
以下為實現蛇形輸出的完整**。
#include "stdafx.h"
#include #define max_n 20
int main()
int a[max_n][max_n] = ;
value = a[x = 0][y = n - 1] = 1;
while (value < n*n)
printf("維數為%d的蛇形排列陣列為:\n", n);
for (x = 0; x < n; x++)
}return 0;
}
C 中二維陣列
一 為什麼要使用多維陣列 生活中,有很多事物,僅僅用一維陣列,將無法恰當地被表示。還是說學生成績管理吧。乙個班級30個學員,你把他們編成1到30號,這很好。但現在有兩個班級要管理怎麼辦?人家每個班級都自有自的編號,比如一班學生編是1 30 二班的學生也是1 30。你說,不行,要進行計算機管理,你們兩...
中 二維陣列查詢
在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。這道題可以直接用for暴力迴圈來做,但是不確定時間會不會超時。我也考慮過有序集用雙重二分查詢,但是這種查詢需要...
c 中二維陣列與二維向量的長度
對於乙個二維陣列 int mm 3 5 int toatlnums sizeof mm sizeof int 元素總個數 int cols sizeof mm 0 sizeof int 行 int raws totalnums cols 列對於乙個二維向量 vector matrix int raw...