- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三章 数组和字符串 第一节 数组 第二节 矩阵 第三节 字符串 可以将高维数组转化为一维数组计算元素的地址。 高维数组有两种存放次序:按行优先顺序和按列优先顺序存储。 按行优先顺序,就是将数组元素按行向量的顺序存储,第i+1个行向量存储在第i个行向量之后。BASIC、PASCAL、C/C++等程序设计语言中,数组按行优先顺序存放; 按列优先顺序,就是将数组元素按列向量的顺序存储,第i+1个列向量存储在i第个列向量之后。FORTRAN语言、Matlab中,数组按列优先顺序存放。 [例] int x[2][3] /*有2×3个数组元素*/ x[0][0] x[0][1] x[0][2] x[1][0] x[1][1] x[1][2] 按行优先顺序存放 存储分配顺序为: x[0][0]-x[0][1]- x[0][2]-x[1][0]- x[1][1]-x[1][2] 二维数组可以看作是一种特殊的一维数组。 [例] float a[3][4]; b[0] a[0][0] a[0][1] a[0][2] a[0][3] b- b[1] a[1][0] a[1][1] a[1][2] a[1][3] b[2] a[2][0] a[2][1] a[2][2] a[2][3] 二维数组(m?n)中元素a[i][j]的地址: Loc(a [i][j]) = Loc(b[i]) +j*C Loc(b[i])=Loc(b[0])+i*C′ // C′=n*C Loc(a[i][j])=Loc(a[0][0])+i*n*C+j*C= Loc(a[0][0]) + (i*n+j)*C [例] float a[3][4] Loc(a[1][2]) = a+(i*n+j)*C = a+(1*4+2)*4 = a+24 多维数组元素在内存中的排列顺序为:第一维的下标变化最慢,最右边的维下标变化最快。 [例]float a[2][3][4] 三维数组A[m][n][p]中数组元素a[i][j][k]的地址计算公式为: Loc(a[i][j][k]) =Loc(a[0][0][0])+i*n*p*C+j*p*C+k*C [例] float D[3][3][4] Loc(D[1][2][2]) = d+ i*n*p*C+j*p*C+k*C = d+(1*3*4+2*4+2)*4 = d+88 如何计算按列优先顺序存储的数组元素地址? 将数组元素按列向量的顺序存储,第i+1个列向量存储在第i个列向量之后。请大家自己推导。 数组类型是高级程序设计语言所提供的基本数据类型之一,可定义一组相同类型的元素。但是直接创建的数组存在着一些问题,诸如: 无法对数组执行一些简单运算,如数组加法和数组减法等操作; 没有越界索引保护,不检查数组的下标索引值是否在0到arraysize-1范围内。例如一些高级程序设计语言对越界索引访问并不一定会产生异常。没有越界索引保护会直接给程序调试带来难以预料的困难。 为了弥补这些缺陷,可以自定义一个数组类。 在自定义的数组类中,不但需要重载一些必要的运算符,还需要对下标符号“[ ]”进行重载,以确保可提供越界索引保护。 3.2 矩 阵 矩阵是许多物理问题中出现的数学对象,是一种常用的数据组织方式。计算机工作者关心的是矩阵在计算机中如何存储,以及如何实现矩阵的基本操作。 二维数组与矩阵相比: 数组的基本操作是数组加减,而矩阵的基本操作还有矩阵相乘、矩阵转置等; 数组的下标从0开始, 而矩阵的下标一般从1开始; 数组元素用a[i][j]表示, 而矩阵元素通常用a(i, j)表示。 矩阵的乘法运算 对于矩阵Am×p和Bp×n的乘积Cm×n ,其第i行第j列元素cij的计算公式为 ,乘法运算的算法可描述如下: 算法Multi-1(A, B, C, m, p, n) FOR i=1 TO m DO FOR j=1 TO n DO ( Cij ? 0 . FOR k=1 TO p DO Cij ? Cij + Aik×Bkj . ) ? 算法Multi-2是对用一维数组所存放矩阵的乘法运算实现。该算法中,按行优先,用一维数组s存放Am×p,用一维数组t存放B
文档评论(0)