
程序设计基础 第8章数组 1/14
程序设计基础 第 8 章 数 组 1/14

本章知识点 8.0数组的概念 8.1一维数组用“数组名+一维下标”来表示数据 8.2一维数组的应用 8.3二维数组用“数组名+二维下标”来表示数据 8.4数组与函数数组元素与数组名做函数参数 小结 冯 2/14
本章知识点 8.0 数组的概念 8.1 一维数组 用“数组名+一维下标”来表示数据 8.2 一维数组的应用 8.3 二维数组 用“数组名+二维下标”来表示数据 8.4 数组与函数 数组元素与数组名做函数参数 小结 2/14

8.3二维数组 ■8.3.1二维数组的定义 ■8.3.2二维数组的3引用 ■8.3.3二维数组的初始化 ■8,3,4二维数组程序举例 恩 3/14
8.3 二维数组 ◼ 8.3.1 二维数组的定义 ◼ 8.3.2 二维数组的引用 ◼ 8.3.3 二维数组的初始化 ◼ 8.3.4 二维数组程序举例 3/14

例8.15有一个3×4的矩阵,要求编程序求出其中值 0 2 3 最大的那个元素的值,以及其所在的行号和列号。 2 3 4 解题思路:采用“打擂台算法” 1 9 8 7 6 2 -10 10 -5 2 max=a[0][0],row=0,colum=0 fori=0 to 2 inta[3][4]={K1,2,3,4}, for j=0 to 3 {9,8,7,6}, 真 a[i][j]>max 假 {-10,10,-5,2 max=a[0][0];row=0;colum=0; max=a叮叮 row=j for (i=0;imax) 输出: max,row,colum (max=a[叮]; row=i; max=10 记行号 colum=j; 0w=2 记列号 colum=1 恩 4/14
例8.15 有一个3×4的矩阵,要求编程序求出其中值 最大的那个元素的值,以及其所在的行号和列号。 解题思路:采用“打擂台算法” for i=0 to 2 for j=0 to 3 max=a[i][j] row=i colum=j a[i][j]>max 真 max=a[0][0], row=0,colum=0 输出:max,row,colum 假 0 1 2 3 0 1 2 3 4 1 9 8 7 6 2 -10 10 -5 2 记行号 int a[3][4]={{1,2,3,4}, {9,8,7,6}, {-10,10,-5,2}}; max=a[0][0];row=0;colum=0; for (i=0;imax) { max=a[i][j]; row=i; colum=j; } 记最大值 记列号 4/14

8.3二维数组 8.3.1二维数组的定义 类型标识符数组名[常量表达式1][常量表达式2]; ■例:f1oata3]4;/定义一个二维数组a,3行4列, 共12个元素 二维数组a a[0]- a[o][o] a[o][1] a[0][2] a[0][3] a af1]- a[1][o] a[1][1] a[1][2] a[1][3] a[2]- a[2][0] a[2][1] a[2][2] a[2][3] 有3个元素,每个元素 a叮是一维数组名,例如a[2]是一维数组 是一个一维数组 的名字,它又有4个float类型的元素 8.3.2二维数组的3引用 数组名下标]下标] a[2][3]a[2-1][2*2-1] 行数 列数 不可“越界引用数组”a[3][4]=15; 5/14
8.3.1 二维数组的定义 a[0]- a[0][0] a[0][1] a[0][2] a[0][3] a a[1]- a[1][0] a[1][1] a[1][2] a[1][3] a[2]- a[2][0] a[2][1] a[2][2] a[2][3] ◼ 例: float a[3][4]; //定义一个二维数组a,3行4列,共12个元素 类型标识符 数组名[常量表达式1][常量表达式2]; 二维数组a 有3个元素,每个元素 是一个一维数组 a[i]是一维数组名,例如a[2]是一维数组 的名字,它又有4个float类型的元素 8.3.2 二维数组的引用 数组名[下标][下标] 行数 列数 a[2][3] a[2-1][2*2-1] 不可“越界引用数组”a[3][4]=15; 8.3 二维数组 5/14

二维数组的存储:按行存放 float a[3][4]; 2000 a[o][o] ■设数组a的首地址是a 2004 a[o][1] float?型,4字节 2008 a[o][2] ◆a的首地址是2000 ◆a[1]的首地址? 2012 a[o][3] doo a01a02a03 ◆a[1][2]的首地址? 2016 a[1][0] ◆a[1]的首地址2016 2020 a[1][1] aj0 411412a13 ◆a[1][2]的首地址:2024 2024 a[1][2] 2028 a[1][3] 20 021022a23 2032 a[2][0] 2036 a[2][1] 2040 a[2][2] 2044 a[2[3] example6 2 1 6/14
二维数组的存储:按行存放 ◼设数组a的首地址是a float a[3][4]; 2000 a[0][0] 2004 a[0][1] 2008 a[0][2] 2012 a[0][3] 2016 a[1][0] 2020 a[1][1] 2024 a[1][2] 2028 a[1][3] 2032 a[2][0] 2036 a[2][1] 2040 a[2][2] 2044 a[2][3] float型,4字节 ◆a的首地址是2000 ◆a[1]的首地址? ◆a[1][2]的首地址? ◆a[1]的首地址 2016 ◆a[1][2]的首地址:2024 example6_2_1 6/14

float a[2][3][4]; a[o][o][o] 扩展:多维数组的存储 a[o][o][1] a[o][o] a[0]ro][2] ■用和二维数组相同的角度看待多维数组 a[o][o][3] a[o][1][o] ■例:f1oata[2][3][4]: a[0[1][1] a[o] a0][1] a[0][1]r2 ◆定义f1oat型三维数组a,有2*3*4=24 a[0][1][3] a[o][2][0] 个元素 a[0][2][1] a[0]r2] ◆a[0]、a[1]是二维数组 a[0][2][2 a0[2][3] ◆a[0][0]、a[1][2]等是一维数组 a[1][o][o] a[1][o]r1) ◆多维数组元素在内存中的排列顺序仍 a[1][o] a1]0]2 是按行存放:第一维的下标变化最慢 a[1][o][3] a[1][1][o] ,最右边的下标变化最快。 a1][1][1] a[] a[1][1] a1][1][2 a[1][1]3] a]2][0] a1][2]1] a1][2] a1[2]2 恩 af1]2784
扩展:多维数组的存储 ◼ 用和二维数组相同的角度看待多维数组 ◼ 例:float a[2][3][4]; ◆定义float型三维数组a,有2*3*4=24 个元素 ◆a[0]、a[1]是二维数组 ◆a[0][0]、a[1][2]等是一维数组 ◆多维数组元素在内存中的排列顺序仍 是按行存放:第一维的下标变化最慢 ,最右边的下标变化最快。 float a[2][3][4]; a[0] a[0][0] a[0][0][0] a[0][0][1] a[0][0][2] a[0][0][3] a[0][1] a[0][1][0] a[0][1][1] a[0][1][2] a[0][1][3] a[0][2] a[0][2][0] a[0][2][1] a[0][2][2] a[0][2][3] a[1] a[1][0] a[1][0][0] a[1][0][1] a[1][0][2] a[1][0][3] a[1][1] a[1][1][0] a[1][1][1] a[1][1][2] a[1][1][3] a[1][2] a[1][2][0] a[1][2][1] a[1][2][2] a[1][2][3] 7/14

8,3,3二维数组的初始化 ■按行分段赋初值,例如: 直观、方便 ◆inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; ■按行连续赋值,将所有数据写在一个花括号内,按数组排列的 顺序对各元素赋初值,例如: ◆inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12; 界限不清楚,容易遗漏,不易检查 8/14
8.3.3 二维数组的初始化 ◼按行分段赋初值,例如: ◆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}; 直观、方便 界限不清楚,容易遗漏,不易检查 8/14

二维数组的初始化 1 ■只对部分元素赋初值,其余元素值自动为0 5 ◆inta[3][4]={{1},{5},{9}}; 9 ■如果对全部元素都赋初值(即提供全部初始数据),第一维长 度可以不指定,但第二位长度不能省,例如: ◆inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12}; ·系统会根据数据总个数分配存储空间,一共12个数据,每 行4列,则可以确定有3行。 ■也可以只对部分元素赋初值而省略第一维长度,但应分行赋 初值,例如: ◆inta[][4幻={0,0,3},0,{0,10}}; 0 ◆编译系统可以识别:数组共有3行。 0 0 10 0 恩 9/14
二维数组的初始化 ◼只对部分元素赋初值,其余元素值自动为0,例如: ◆int a[3][4]={{1},{5},{9}}; 1 0 0 0 5 0 0 0 9 0 0 0 ◼如果对全部元素都赋初值(即提供全部初始数据),第一维长 度可以不指定,但第二位长度不能省,例如: ◆int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12}; ◆系统会根据数据总个数分配存储空间,一共12个数据,每 行4列,则可以确定有3行。 ◼也可以只对部分元素赋初值而省略第一维长度,但应分行赋 初值,例如: ◆int a[][4]={{0,0,3},{},{0,10}}; ◆编译系统可以识别:数组共有3行。 0 0 3 0 0 0 0 0 0 10 0 0 9/14

8.3.4二维数组程序举例 例8.16将一个二维数组行和列的元素互换,存到另 一个二维数组中。 1 a b= 2 5 3 ·解题思路: -可以定义两个数组:数组a为2行3列,存放指定的6个数。 数组b为3行2列,开始时未赋值。 -4a[0][1]->b[1][0]6a[1][2]->b[2][1] -将a数组中的元素a[们存放到b数组中的b们[元素中。 -用嵌套的for循环完成。 恩 10/14
例8.16 将一个二维数组行和列的元素互换,存到另 一个二维数组中。 8.3.4 二维数组程序举例 = 4 5 6 1 2 3 a = 3 6 2 5 1 4 b • 解题思路: – 可以定义两个数组:数组a为2行3列,存放指定的6个数。 – 数组b为3行2列,开始时未赋值。 – 4 a[0][1]->b[1][0] 6 a[1][2]->b[2][1] – 将a数组中的元素a[i][j]存放到b数组中的b[j][i]元素中。 – 用嵌套的for循环完成。 10/14