本次课内容:二维数组 教学目的:掌握相关概念及其定义方法,掌握引用方法和初始化 方法,理解数组地址,了解多维数组。 重点:二维数组概念、定义方法、初始化方法和引用 难点:理解二维数组是一个一维数组,而每一个数组元素又是 个一维数组,如何用下标来确定二维数组中的元素值。 预习: 维数组的定义、初始化和引用。 定义: 类型标识符数组名[元素个数 初始化:(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]
四、二维数组举例 通过键盘给2×3的二维数组输入数据,第一行为1、2、3,第二 行为10,20,30。 main t int a2 3],i,j; for(i=0;i<2;i++) for(=0j<3:j++) scanf("od,, &ailiD; for(i=0;<2;i++) {for(j=0;j<3;j++) printf("%4d, ai[iD; printf("“n”)
四、二维数组举例 1、通过键盘给2×3的二维数组输入数据,第一行为1、2、3,第二 行为10,20,30。 main() { int a[2][3],i,j; for(i=0;i<2;i++) for(j=0;j<3;j++) scanf(“%d”,&a[i][j]); for (i=0;i<2;i++) { for (j=0;j<3;j++) printf(“%4d”,a[i][j]); printf(“\n”); } }
2、有n个学生,每个学生m门课,已知所有学生的各门课的成绩, 分别求每门课的平均成绩和每个学生的平均成绩。设有如下成绩: j数学英语语言 897856 a|0]a[la[2 al 897856 ao a 1 a 2 897856 a[0 a[ 1] a 2 计算第一个学生的总成绩:当i0时for(=0:3;+)s+=alij; 计算所有学生的平均成绩: for(i=0;<3;i++) for(j=0j<3;j++) s+=aj[jl; printf(“#%d:aver=%dn”,i+1,/3)
2、有n个学生,每个学生m门课,已知所有学生的各门课的成绩, 分别求每门课的平均成绩和每个学生的平均成绩。设有如下成绩: 计算第一个学生的总成绩:当i=0 时 for (j=0;j<3;j++) s+=a[i][j]; 计算所有学生的平均成绩: for (i=0;i<3;i++) { s=0; for (j=0;j<3;j++) s+=a[i][j]; printf(“#%d : aver=%d\n”,i+1,s/3); } a[0] a[1] a[2] a 89 78 56 a [0] a [1] a[2] 89 78 56 89 78 56 a[0] a [1] a [2] a[0] a [1] a[2] i j 数学 英语 语言
计算某科总成绩: j数学英语语言 当j=0(数学) 897856 for(i=0;i<3;i++) cour+=ali a|0]a[1]a[2 所有课程的平均成绩|a[ 897856 for(i=0;i<3;i+) a 1 a 2 i cour=0 a[2] 897856 for(j=0; j<3; j++ aol i cour+=a [l|jl; printf“aver=%小n,cou[21 所以,求某科平均成绩的函数为: void cour ave(inta,intb, loat scorel3]3)/*a为行数,b为列数 i int i,j; float cour; for(i=0; i<a; i++) i cour=0 for(j=0; j<b;j++) {cour+=a[il[jl; printf(“aver=%dⅦm”,cour/3);}
计算某科总成绩: 当j=0 (数学) for(i=0;i<3;i++) cour+=a[i][j] 所有课程的平均成绩 for(i=0;i<3;i++) { cour=0 for(j=0;j<3;j++) { cour+=a[j][i]; printf(“aver=%d\n”,cour/3); } 所以,求某科平均成绩的函数为: void cour_ave(int a,int b,float score[3][3] ) /*a为行数,b为列数*/ { int i,j; float cour; for(i=0;i<a;i++) { cour=0 ; for(j=0;j<b;j++) { cour+=a[i][j]; printf(“aver=%d\n”,cour/3); } } } a[0] a[1] a[2] 89 78 56 a [0] a [1] a[2] 89 78 56 89 78 56 a[0] a [1] a [2] a[0] a [1] a[2] i j 数学 英语 语言
小结 1、二维数组通过两个下标定义,第一个下标一般表示行,第二个 下标表示列。 2、二维数组可看作是一个一维数组,每个数组元素又是一个一维 数组。 3、二维数组初始化可用一对花括号将一行的数据括起来,也可去 掉每行的花括号,此时将所有数据按数组元素在内存的排列顺序存 放。 4、二维数组元素引用时,一般采用双重循环结构,外循环变量一 般表示行下标,内循环变量一般表示列下标。 5、二维数组一般处理表或矩阵数据。 6、二维数组作为实参时,形参也应是二维数组(目前)。 作业:P1755.3
小结: 1、二维数组通过两个下标定义,第一个下标一般表示行,第二个 下标表示列。 2、二维数组可看作是一个一维数组,每个数组元素又是一个一维 数组。 3、二维数组初始化可用一对花括号将一行的数据括起来,也可去 掉每行的花括号,此时将所有数据按数组元素在内存的排列顺序存 放。 4、二维数组元素引用时,一般采用双重循环结构,外循环变量一 般表示行下标,内循环变量一般表示列下标。 5、二维数组一般处理表或矩阵数据。 6、二维数组作为实参时,形参也应是二维数组(目前)。 作业:P175_5.3