8.3.1二维数组的定义—P166 ,行数 列数 >定义方式: 数据类型 数组名[常量表达武1]川常量表达式2]; >二维数组理解: 元素个数=行数*列数 二维数组a是由 3个元素组成 例 int a[3][4]; a[o]a[ol[o] a[o][1] a[o][2]a[0][3] a山 a12 a131 a[2 a[2][0] a21 a21l2 a23 元素a[叮是一维数组名,例如 a[2]是一维数组的名字,它又 有4个int类型的元素
二维数组a是由 3个元素组成 元素a[i]是一维数组名,例如 a[2]是一维数组的名字,它又 有4个 int 类型的元素 行数 列数 元素个数= 行数*列数
二维数组的存储:按行存放 int a[3][3]; >二维数组中元素存放顺序:先在内存中存放第 2000 a[o][o] 一行元素,再存放第二行元素-一按行存放。 2004 a[][1] >例1:inta[3][3]; int型-4个字节 2008 a[o][2] 数组a的首地址是a,则: 2012 a[1][0] ◆a[i][j]的地址是:a+(i*3+j)*sizeof(int) 2016 a[1][1] ◆a[i]的首地址 2020 每行3个元素 a[1][2] 是:a+i*3*4 2024 a[2]r] aoo do1 do2 2028 a[2][1] 若a的首地址是2000 2032 a[2][2] a10a11 a12 a[1]的首地址?2012 ②a[1][2]的首地址? 2020 020 Q21 022 7
二维数组的存储:按行存放 7 Ø 二维数组中元素存放顺序:先在内存中存放第 一行元素,再存放第二行元素.-按行存放。 Ø例1:int a[3][3]; 数组a的首地址是 a,则: ua[i][j]的地址是:a+(i*3+j)*sizeof(int) int a[3][3]; 2000 a[0][0] 2004 a[0][1] 2008 a[0][2] 2012 a[1][0] 2016 a[1][1] 2020 a[1][2] 2024 a[2][0] 2028 a[2][1] 2032 a[2][2] int型- 4个字节 ua[i]的首地址 每行3个元素 是:a+i*3*4 若a的首地址是2000 ① a[1]的首地址? ② a[1][2]的首地址? 2020 2012
inta2][34; a[o][o][o] 扩展:多维数组的存储 a[o][o[1)] a[o][o] ao]0jr2☒ >用和二维数组相同的角度看待多维数组 a[o][o][3] a[o][1][o >例:inta[2][3][4]; a0][1][1] a0] a[0]r1] a0][1][2☒ ◆int型三维数组a,有2*3*4=24个元素 a[o][1][3] a[o][2][0] ◆a[0]、a[1]是二维数组 ao][2r1] a[0][2] a0][2[2) ◆a[0][0]、a[0][1]是一维数组 a[o][2]3] a[1][o][o] ◆多维数组元素在内存中的排列顺序仍是按行 a[1][o][1] a[1][o] 存放:第一维的下标变化最慢,最右边的下标 a1]I0]r2 a[1][o][3] 变化最快。 a[1][1ro] a[1][1[1) a[1] a[1][1] a1][1][2☒ a1[1][3) a1][2o af1][2[1] a1[2] af1][22 恩 a1[23)5
扩展:多维数组的存储 8/115 Ø 用和二维数组相同的角度看待多维数组 Ø 例:int a[2][3][4]; uint 型三维数组a,有2*3*4=24个元素 ua[0]、a[1]是二维数组 ua[0][0]、a[0][1]是一维数组 u多维数组元素在内存中的排列顺序仍是按行 存放:第一维的下标变化最慢,最右边的下标 变化最快。 int 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]
8.3.1二维数组的引用一变换下标 例如:inta[2][3]; 数组名[行下标][列下标] ①可以引用元素:a[0][0]、a[0][1]、a[0][2]、 a[1][0]、a[1][1]、a[1][2] 注意:下标必须是整型值。 ② 每个二维数组元素是一个变量,能参加它的类型规定的所 有操作。 例1:a[0][0]=100;scanf("%d",&a[1][1]); ③不能“越界引用数组” 例2:a[2][3]=10;/错,最多可以用到a[1][2] 恩 9
9 例如:int a[2][3]; ① 可以引用元素:a[0][0]、a[0][1]、a[0][2]、 a[1][0]、a[1][1]、a[1][2] 注意:下标必须是整型值。 ② 每个二维数组元素是一个变量,能参加它的类型规定的所 有操作。 例1:a[0][0]=100; scanf( %d ,&a[1][1]); ③ 不能“越界引用数组” 例2:a[2][3]=10; //错,最多可以用到a[1][2]
【例8.14】成绩统计:有三门考试课,每门课有5人参加考 试,成绩如下表。求各门课的平均成绩和每人的平均成绩。 要求:用定义二维数组存放3个课程5个学生成绩并显示。 张三 王五 李四 赵四 周正 课程平均 Math 80 64 50 85 76 c 75 65 63 87 77 ? Java 92 71 40 78 85 ? 每人平均 q ? 2 ? ??? 10
10 【例8.14】成绩统计: 有三门考试课,每门课有5人参加考 试,成绩如下表。求各门课的平均成绩和每人的平均成绩。 要求:用定义二维数组存放3个课程5个学生成绩并显示。 张三 王五 李四 赵四 周正 Math 80 64 50 85 76 C 75 65 63 87 77 Java 92 71 40 78 85 张三 王五 李四 赵四 周正 课程平均 Math 80 64 50 85 76 ? C 75 65 63 87 77 ? Java 92 71 40 78 85 ? 每人平均 ? ? ? ? ? ???