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

二维数组的初识及初始化

二维数组定义的形式是数组名[常量表达式][常量表达式] 。本质上多维数组与一维数组是一样的,他们在内存中是线性排列的,这里对多维的定义实际上是反复递归对一维的定义,即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;
}

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值