学习笔记:二维数组的使用

mac2025-02-27  17

二维数组的初识及初始化

二维数组定义的形式是数组名[常量表达式][常量表达式] 。本质上多维数组与一维数组是一样的,他们在内存中是线性排列的,这里对多维的定义实际上是反复递归对一维的定义,即N维数组是一个集合,包含多个元素,每个元素又是一个N-1维数组。 对于多维数组,我们约定方括号越往左边成为高维,越往右边称为低维,最左边的是第一维,其每一维的长度由方括号内的常量表达式决定,如a[3][4],表示有三个一维数组,每个一位数组里有4个元素. 让我们看下面的这个例子:

#include<stdio.h> int b[4][4]; //在函数体外定义的全局变量自动初始化为零 int main(void) { int a[4][4] = {{1},{1,2},{1,2,3},{1,2,3,4}}; //在函数体内定义的变量需要自己初始化,注意多维数组初始化的格式 int i , j ; for(i = 0; i <= 3; i++ ) {for(j = 0; j <= 3; j++ ) printf("a[%d][%d] %d ", i , j, a[i][j] ); } for(i = 0; i <= 3; i++ ) {for(j = 0; j <= 3; j++ ) printf("b[%d][%d] %d ", i , j, b[i][j] ); } return 0; }

对于多维数组的初始化,我们有两种方法一种是按多维数组初始化,另外一种是按一维数组初始化。 另外,在函数体内初始化和在函数体外初始化也是不同的,在上面的例子中,在函数体外定义的b数组自动初始化为零,不需额外操作,而在函数体内定义的a数组则需要自己初始化,要注意多维数组初始化的格式。并且,在函数体内定义的数组如果只初始化了一部分,剩下的元素都会被初始化为零。 在已经给出初值列表的情况下,定义多维数时可以不用说明第一维数组的长度,编译器会根据列出的元素自动给出能容纳元素的最小数组长度。

二维数组的引用与遍历

#include<stdio.h> int main(void) { int i , j , n ; printf("Please input how many dimensional array you want to create\n"); scanf("%d",&n); int a[n][n] ; printf("Please input your Multidimensional array\n"); for(i =0 ; i < n ; i++ ) for(j =0 ; j < n ; j++ ) scanf("%d",&a[i][j]); printf("\n"); for(i =0 ; i < n ; i++ ) {for(j =0 ; j < n ; j++ ) {printf("%d ",a[i][j]); if(j == n-1) printf("\n"); } } return 0; }

在引用二维数组时,和一维数组一样,我们不能直接引用整个数组,而是只能引用其中的元素,要注意每个元素的下标。

#include<stdio.h> int main(void) { int a[4][4] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16} ; int i , j , sum ; //主对角线元素遍历 for( sum = 0 , i = 0 ; i < 4 ; i++ ) {j = i ; printf("%d ", a[i][j] ); sum += a[i][j] ; } printf("\n主对角线元素之和为%d\n",sum) ; //副对角线元素遍历 for( sum = 0 , i = 0 ; i < 4 ; i++ ) {j = 3-i ; printf("%d ", a[i][j] ); sum += a[i][j] ; } printf("\n副对角线元素之和为%d\n",sum) ; //左上三角元素遍历 for( sum = 0 , i = 0 ; i < 4 ; i++ ) {for( j = 0 ; j < 4-i ; j++ ) {printf("%d ", a[i][j] ); sum += a[i][j] ; } } printf("\n左上三角元素之和为%d\n",sum) ; //左下三角元素遍历 for( sum = 0 , i = 0 ; i < 4 ; i++ ) {for( j = 0 ; j < i+1 ; j++ ) {printf("%d ", a[i][j] ); sum += a[i][j] ; } } printf("\n左下三角元素之和为%d\n",sum) ; //右下三角元素遍历 for( sum = 0 , i = 0 ; i < 4 ; i++ ) {for( j = 3-i ; j < 4 ; j++ ) {printf("%d ", a[i][j] ); sum += a[i][j] ; } } printf("\n右下三角元素之和为%d\n",sum) ; //右上三角元素遍历 for( sum = 0 , i = 0 ; i < 4 ; i++ ) {for( j = i ; j < 4 ; j++ ) {printf("%d ", a[i][j] ); sum += a[i][j] ; } } printf("\n右上三角元素之和为%d\n",sum) ; //内部元素遍历 for( sum = 0 , i = 1 ; i < 3 ; i++ ) {for( j = 1 ; j < 3 ; j++ ) {printf("%d ", a[i][j] ); sum += a[i][j] ; } } printf("\n内部元素之和为%d\n",sum) ; //外部元素遍历 for( sum = 0 , i = 0 ; i < 4 ; i++ ) {for( j = 0 ; j < 4 ; j++ ) {printf("%d ", a[i][j] ); sum += a[i][j] ; } } printf("\n外部元素之和为%d\n",sum) ; return 0; }

通过对下表的条件限制,我们可以实现对二维数组中元素的遍历,进而实现求和求积等操作。

最新回复(0)