南陽做網站aokuo臨沂網站建設方案服務
數組(中)
二維數組
定義
?二維數組本質上是一個行列式的組合,也就是說二維數組是有行和列兩部分構成。二維數組數據是通過行列進行解讀。
?二維數組可被視為一個特殊的一維數組,相當于二維數組又是一個一維數組,只不過它的元素是一維數組。
語法
類型 數組名[行數][列數];
舉例:
int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; // 等價于以下寫法
int arr[][3] = {{1,2,3},{4,5,6},{7,8,9}}; // 柔性數組
int arr[3][] = {{1,2},{4,5,6},{7}} // 等價于 {{1,2,0},{4,5,6},{7,0,0}}
應用場合
?主要應用于數據有行列要求的情況。
特殊寫法
下標可以是整型表達式,如: a[2-1][2*2-1]
下標可以是已經有值的變量或數組元素, 如 a[2*x-1][b[3][1]]
數組元素可以出現在表達式中, 如: b[1][2]=a[2][3]/2
初始化
-
分行給二維數組賦初值
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
-
可將所有數據寫在一個花括號內,按照排列順序對元素賦值。
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; // 等價于上面的寫法
-
可對部分元素賦初值,其余未賦值部分自動填充 0 | \0 | 0.0…
int a[3][4] = {{1},{5,6},{9}}; // 等價于 int a[3][4] = {{1,0,0,0},{5,6,0,0},{9,0,0,0}}
-
若對全部元素賦初值,自定義數組時可以省略第1為數組的長度,第2維數組的長度必須指明。
int a[][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
-
在分行賦初值是,也可以省略第1維的長度。
int a[][4] = {{1,2,3},{0},{0,10}}; // 等價于 int a[][4] = {{1,2,3,0},{0,0,0,0},{0,10,0,0}}
案例
?案例1:
/**
* 案例:二維數組的遍歷
*/
#include <stdio.h>
int main()
{int arr[][3] = {{1},{2,4},{5,6,7}};// 經過論證:二維數組我們必須指明第2維的數組的長度// 獲取行元素的大小int length = sizeof(arr) / sizeof(arr[0]); // 如果是二維數組,第1維的長度,應該是如左側這樣獲取printf("length:%d\n",length);// 遍歷二維數組,需要使用雙層for循環(huán),外層遍歷行,內層遍歷每一行的列for(int row = 0;row < length;row++){// 獲取列元素的總大小int len = sizeof(arr[row]) / sizeof(int);for(int col = 0; col < len; col++){// 獲取列元素printf("%3d",arr[row][col]);// 意思是獲取數組arr 第row行第col列}printf("\n");}return 0;
}
// 數據類型,分支結構,循環(huán)結構,數組
?案例2:
/**
* 需求:二維數組案例-矩陣的轉置(就是將一個2行3列的數組轉換為3行2列的數組)
*/
#include <stdio.h>
int main()
{// 準備2個數組,存放轉前和轉后的數據int arr_before[2][3] = {1,2,3,4,5,6};int arr_after[3][2] = {0};// 初始化,每一列上都是0// 遍歷arr_beforefor(int i = 0;i < sizeof(arr_before)/sizeof(arr_before[0]);i++){for(int j = 0;j < sizeof(arr_before[i])/sizeof(int);j++){// 轉置arr_after[j][i] = arr_before[i][j];}}// 遍歷arr_afterfor(int i = 0;i < sizeof(arr_after)/sizeof(arr_after[0]);i++){for(int j = 0;j < sizeof(arr_after[i])/sizeof(int);j++){// 輸出printf("%4d",arr_after[i][j]);}printf("\n");}return 0;
}
?案例3
/**
* 需求:二維數組案例-準備一個int類型的二維數組,求該數組中大的最大值,以及對應的行號,列號
*/
#include <stdio.h>
int main()
{// 準備一個二維數組int arr[3][4] = {{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};// 創(chuàng)建變量,用保存最大值、行號、列號int max = arr[0][0],row=0,col=0;// 遍歷集合for(int i = 0;i < sizeof(arr) / sizeof(arr[0]);i++){for(int j = 0;j < sizeof(arr[i]) / sizeof(arr[i][0]);j++){// 判斷最大值if(arr[i][j] > max){max = arr[i][j];row = i;col = j;}}}printf("max=%d,row=%d,col=%d\n",max,row,col);return 0;
}