本次课内容:二维数组 教学目的:掌握相关概念及其定义方法,掌握引用方法和初始化 方法,理解数组地址,了解多维数组。 重点:二维数组概念、定义方法、初始化方法和引用 难点:理解二维数组是一个一维数组,而每一个数组元素又是 个一维数组,如何用下标来确定二维数组中的元素值。 预习: 维数组的定义、初始化和引用。 定义: 类型标识符数组名[元素个数 初始化:(1)元素定义的初值个数不足时,用零补齐。 tm static int a[ 5]=1, 2, 3; 2)元素定义时赋初值,可以不指定数组个数; sy static int a[=(1, 2, 3, 4, 5]; (3)静态和外部存储类型的数组不进行初始化,隐含的初 值为零或空字符,自动类型数组未初始化,其值不确定。 static char chI5];/ch1|0~ch14中的值为空,即 static int n5;/m0}m4中的值为零* float p5l;/2p|0~p4中的值不确定
本次课内容:二维数组 教学目的:掌握相关概念及其定义方法,掌握引用方法和初始化 方法,理解数组地址,了解多维数组。 重点:二维数组概念、定义方法、初始化方法和引用。 难点:理解二维数组是一个一维数组,而每一个数组元素又是一 个一维数组,如何用下标来确定二维数组中的元素值。 预习: 一维数组的定义、初始化和引用。 定义: 类型标识符 数组名 [ 元素个数 ]; 初始化:(1) 元素定义的初值个数不足时,用零补齐。 如 static int a[ 5]={1,2,3}; (2)元素定义时赋初值,可以不指定数组个数; 如 static int a[ ]={1,2,3,4,5]; (3)静态和外部存储类型的数组不进行初始化,隐含的初 值为零或空字符,自动类型数组未初始化,其值不确定。 static char ch1[5]; /*ch1[0]~ch1[4]中的值为空,即 ‘’*/ static int m[5]; /*m[0]~m[4]中的值为零*/ float p[5]; /*p[0]~ p[4]中的值不确定*/
维数组举例: 按学号输入5个学生的C语言考试成绩,计算总成绩和平均成绩并 输出。 include“ stdio. h” void pvaer(int vI,int n) #define 6 i int j, veer=0; void pin(int[ l int n) for(j=1;<n;j++) void pout(int pl l, int m) var+=pi; void paver(int vl, int k) printf(“aver=%dn”,vaer/5); main {inta[M]={0}; void pout(int pl, itn n) pin(a, M); int paver(a, M); for(j-1;j<n;j++) pout(a, M) printf(“#%d: score=%dⅦm”,j,plj); void pin(int s[ l, int n) i int i; for(i-l; i<n; i++) scanf(%dⅦn”,&s[i);
一维数组举例: 按学号输入5 个学生的C语言考试成绩,计算总成绩和平均成绩并 输出。 #include “stdio.h” #define M 6 void pin(int s[ ],int n); void pout(int p[ ],int m); void paver(int v[ ], int k); main() { int a[M]={0}; pin(a,M); paver(a,M); pout(a,M); } void pin(int s[ ],int n) { int i; for (i=1;i<n;i++) scanf(“%d\n”,&s[i]); } void pvaer(int v[ ],int n) { int j , vaer=0; for ( j=1;j<n;j++) vaer+=p[j]; printf(“aver=%d\n”,vaer/5); } void pout(int p[ ],itn n) { int j; for ( j=1;j<n;j++) printf(“#%d:score=%d\n”,j,p[j] ); }
二维数组的概念及其定义 当数组中每个元素带有两个下标时,称这样的数组为二维 数组。逻辑上可以把二维数组看成是一份具有行和列的表格或 个矩阵。 二维数组的定义形式: 类型名数组名常量表达式1常量表达式2,…; 如:inta314]; 说明:定义了一个名为a的二维数组;a数组中每个元素都是整 型;a数组中共有3×4个元素;a数组的逻辑结构是一个具有3行4 列的矩阵(或表格) 第0列 第1列 第2列 第3列 第0行 al0[2 a[03 第1行 a1|0 a12 a[1|J3 第2行 「2]0 「2[1l a2|2 a2|l3] a数组中的元素在内在 氐列连续 元 a01l0 aj0lll a[02 a[03 a[10 a[1ll1]a[1[2 a13 a210 a211 a2[2 a[2 3
一、二维数组的概念及其定义 当数组中每个元素带有两个下标时,称这样的数组为二维 数组。逻辑上可以把二维数组看成是一份具有行和列的表格或一 个矩阵。 二维数组的定义形式: 类型名 数组名[ 常量表达式1][常量表达式2],… ; 如:int a[3][4] ; 说明:定义了一个名为 a 的二维数组;a 数组中每个元素都是整 型;a数组中共有3×4个元素;a数组的逻辑结构是一个具有3行4 列的矩阵(或表格) 第0列 第1 列 第2列 第3 列 第0行 a[0][0] a[0][1] a[0][2] a[0][3] 第1行 a[1][0] a[1][1] a[1][2] a[1][3] 第2行 a[2][0] a[2][1] a[2][2] a[2][3] a数组中的元素在内存中占一系列连续的存储单元。 a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3]
注:a数组可以看成是由a0、a(la2三个元素组成的一维数组。 其中每个元素又是由四个元素组成的一维数组。 a(0)a(] a[2] a[3] a lo a([2]a3 a(0][l a[]a[31 其中a[0、a[1l、a2]作为数组名来处理。 维数组元素的引用 引用二维数组元素时必须带有两个下标: 类型名数组名[下标表达式I下标表达式2 如: double w4[2l; w|0]]、wi[jl、wi+kIj+k是合法引用形式。 下标值是整数,且不得超出上界和下界,一但超出则值不确 定,同时带来对程序代码或其它数据的破坏 不可写成:w0,1、wj、wi+kj+k、w32]
注:a 数组可以看成是由a[0]、a[1]、a[2]三个元素组成的一维数组。 其中每个元素又是由四个元素组成的一维数组。 其中a[0]、a[1]、a[2]作为数组名来处理。 二、二维数组元素的引用 引用二维数组元素时必须带有两个下标: 类型名 数组名[下标表达式1][下标表达式2] 如:double w[4][2]; w[0][1]、w[i][j]、w[i+k][j+k]是合法引用形式。 下标值是整数,且不得超出上界和下界,一但超出则值不确 定,同时带来对程序代码或其它数据的破坏。 不可写成:w[0,1]、w[i,j]、w[i+k,j+k]、w[3][2]。 a [0] a [1] a [2] a [0] a [1] a[2] a [3] a [0] a [1] a[2] a [3] a [0] a [1] a[2] a [3]
、二维数驵的初始化 、所赋初值个数与数组元素个数相同 inta[43}={1,2,3},{4,5,6},{7,8,9},{10,11,12} 2、每行所赋初值个数少于元素个数 inta[43}={1,2},{4,5},{7},{9}; 对行数据不足的元素补初值0。 3、所赋初值行数少于数组行数 inta[43}={1,2},{4,5}; 对未赋值各行补初值0。 4、赋初值时省略行花括号 inta[43}={1,2,3,4,5}; 元素所赋初值按元素在内存中的排列顺序赋值,行列不足的 初值用0补充。 5、通过赋初值定义二维数组的大小 inta[]3}={1,2,3},{4,5},{6},{8}; 根据花括号对数决定了数组的行数,等价于a4l3] intb|2|={1,2,3,4,5}; 根据初值个数和数组列数决定数组的行数,等价于b32
三、二维数驵的初始化 1、所赋初值个数与数组元素个数相同 int a[4][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}}; 2、每行所赋初值个数少于元素个数 int a[4][3]={{1,2},{4,5},{7},{9}}; 对行数据不足的元素补初值0。 3、所赋初值行数少于数组行数 int a[4][3]={{1,2},{4,5}}; 对未赋值各行补初值0。 4、赋初值时省略行花括号 int a[4][3]={1,2,3,4,5}; 元素所赋初值按元素在内存中的排列顺序赋值,行列不足的 初值用0补充。 5、通过赋初值定义二维数组的大小 int a[ ][3]={{1,2,3},{4,5},{6},{8}}; 根据花括号对数决定了数组的行数,等价于a[4][3]。 int b[ ][2]={1,2,3,4,5}; 根据初值个数和数组列数决定数组的行数,等价于b[3][2]