资源描述:
《二维及多维数组教案》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、二维数组及多维数组数组(array)是一种顺序容器(sequencecontainer),是由单一类型元素组成的一个有序集合。数组不仅有--维数组,还有二维、三维其至多维数组。C++中数组可以嵌套,就是多维数组。一维数组可用来表示向量,二维数组可用来表示行列式或矩阵,通常用一个二维数组来存储方程组的系数。而像玩具魔方这样的立方体结构就需要用三维数组来存储。1、二维及多维数组的定义和存储方式二维及多维数组定义的语法格式为;[存储类型]数据类型数组名[常量表达式1][常量表达式2]•••[常量表达式常量表达式1为数组
2、第一维的长度(最高维),常量表达式2为数组第二维的长度•••常量表达式n为数组第n维的长度(最低维)。1二维数组分析:例如,二维数组intmat⑶⑹就可存储图1所示的矩阵,数组第一维的长度表示矩阵行数,第二维长度表示矩阵列数。画图:135791124681012357111317因为计算机内存是一维编址的,所以二维数组和多维数组在内存中的存放仍然是一维的。二维数组的各个元素按行优先顺序存放,如数组mat各元素在内存中排序由低到高地址依次为(计算机内存是一维编址的,多维数组必须要转化为一维方式存储,越右的下标变化越
3、快,二维数组则按行排列,先排第一行,再排第二行,直到所有行排完):mat[0][0]—>mat[0][l]—►mat[0][2]—►mat[0][3]—>mat[0][4]—►mat[0][5]—►mat[l][01—►mat[l][l—►mat[ll[2]—►mat[l][3]—►mat[l][4]—>mat[l][5]—►mat[2][0]—►mat[2][l]—►mat[2][2]—►mat[2][3]—►mat[2][4]—>mat[2][5]即所谓按行排列。有了确定的关系后可以算岀多维数组任一元素在内存
4、的位置,设有a数组m行n列,每个元素占b个字节,a[i]fjl的首地址为:数组的首地址+(i*n+j)*b;1、2多维数组分析C/C++中的多维数组基本的定义是以数组作为元素构成的数组,二维数组的数组元素是一维数组,三维数组的数组元素是一个二维数组,依此类推。也就是说,多维数组用的是一个嵌套的定义。图2表示一个三维数组可定义为:inta3d⑹⑶[4];a3d是由6个二维数组构成的数组,其中第一个二维数组用a3d[0]表示,即图6.5立方体最上面的3*4大小的一片,也就是一个3*4的二维数组。而a3d[0][2]则
5、是a3d[0]的第3个元素,一个一维数组,立方体最上最右的一条,(阴影所示)即一个4元素的一维数组。画图:2、二维数组的初始化对于二维数组,其初始化形式有以下几种:(1)嵌套一维数组的初始化;intmat[3]⑹耳{1,3,5,7,9,11},{2,4,6,8,10,12},{3,5,7,11,13,17}};其中嵌套的第1个“{}”内的数据1、3、5、7、9、11依次赋给数组mat的第1行mat[0],第2个“{}”内的数据赋给第2行mat[l],依此类推。(2)按数组元素存储次序列出各元素的值,并只用一个“{
6、}”括起來,如:intmat[3][6]={1,3,5,7,9,11,2,4,6,&10,12,3,5,7,11,13,17);(3)可以对部分元素赋初值,没有明确初值的元素为0,如:intmat[3][6]二{{1,3},{2,4},{3,5,7}};其结果等效于:intmat[3][6]={{1,3,0,0,0,0},{2,4,0,0,0,0},{3,5,7,0,0,0}};(4)可由初始化数据的个数确定数组的最高维长度,如:intmat[][6]={1,3,5,7,9,11,2,4,6,8,10,12,3,
7、5,7,11,13,17};最终定义的mat是3行6列的数组。也可以如下定义:intmat[][6]二{{1,3},{2,4},{3,5,7}};同样这也是3行6列。注意这里只能省略数组的最高维。多维数组的初始化和二维数组类似。3、二维及多维数组元素的引用二维及多维数组的引用与一维的类似,其语法形式为:数组名[下标表达式1][下标表达式2〕•••[下标表达式m元素下标表达式的个数取决于数组的维数,N维数组就有N个下标表达式。二维及多维数组元素下标的起止值、下标表达式值的要求与一维数组相同。例:在3行4列的矩阵中,
8、找岀最大元素的位置。#include#includeusingnamespacestd;constintM=3;constintN=4;intmain(){inta[M][N],ij,max_row,max_col;max_row=max_col=0;cout«“输入3行4列矩阵”vvendl;for(i=0;i