4.21二维数组的引出 例:假设考试共有5个科目,一个班有4名学生。输入所有学 生的各科成绩,求出每名学生的总成绩。 maino i int i,j; float s 4015], sum; for(i=0;i<40;i++) i sum i=0 for(=0;j<5;i++) { scanf(“%f,&sl sum[i=sum[i+sil前j; for(i=0;i40;i++ i for(j=0; j<5; i++) printf("%o-8f,siliD printf(%o-8fn",sumi; 心U
例:假设考试共有5个科目,一个班有40名学生。输入所有学 生的各科成绩,求出每名学生的总成绩。 main ( ) { int i,j; float s[40][5], sum[i]; for(i=0; i<40; i++) { sum[i]=0; for(j=0; j<5; i++) { scanf(“%f”,&s[i][j]); sum[i]=sum[i]+s[i][j]; } } for(i=0; i<40; i++) { for(j=0; j<5; i++) printf(“%-8f”,s[i][j]); printf(“%-8f\n", sum[i]); } } 4.2.1 二维数组的引出
4.22二维数组的定义和引用 1二维数组的定义 2000a00 (1)、格式 2002|ao1l 类型说明符数组名[常量表达式常量表达式; 2004a012 2006a03 int a 34]; float b5[]; 2008a101 a[0I[0]a[01]a[o[2]a0j[3] 2010 a[ll[ll a[1jo] a[1]1] a[12] a[1]]- 2012 alI2I 2014a[13 a[2]0]a[2[1]a[2[2]a[2][3] 2016a[2][o (2)、存储方式: 2018a2[1 在内存中按行存放,即先顺序存放第一行的2020|-22 元素,再存放第二行的元素。 2022a2|3
1 二维数组的定义 (1)、格式: 类型说明符 数组名[常量表达式][常量表达式]; int a[3][4]; float b[5][10]; 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] (2)、存储方式: 在内存中按行存放,即先顺序存放第一行的 元素,再存放第二行的元素。 2000 a[0][0] 2002 a[0][1] 2004 a[0][2] 2006 a[0][3] 2008 a[1][0] 2010 a[1][1] 2012 a[1][2] 2014 a[1][3] 2016 a[2][0] 2018 a[2][1] 2020 a[2][2] 2022 a[2][3] 4.2.2 二维数组的定义和引用
(3)、说明: 根据数组的定义方式,可以将二维数组看作是一种特殊的 维数组,它的每一个元素又是一个一维数组。 int a[3|l4]; a(01 a(01101a(011] a|012]a03 alu allua1121a1131 a[2]|a2|10a2 a212]2|3 2二维数组的引用 二维数组元素的表示形式:数组名I下标下标 其中行号和列号可以是整型表达式或整型常量,其值从0开 始,不能超过数组定义的范围 static int a3川4]; a[12]a[2-1 [2*2-1 a[ijl b|12F=a(2131/2 a[3114=5;
(3)、说明: 根据数组的定义方式,可以将二维数组看作是一种特殊的 一维数组,它的每一个元素又是一个一维数组。 int a[3][4]; a[0] a[1] a[2] 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] 2 二维数组的引用 二维数组元素的表示形式: 数组名[下标][下标] 其中行号和列号可以是整型表达式或整型常量,其值从0开 始,不能超过数组定义的范围 a[1][2] a[2-1][2*2-1] a[i][j] b[1][2]=a[2][3]/2 static int a[3][4]; …… a[3][4]=5; ×
3二维数组的初始化 1234 5678 (1)、按行给二维数组赋初值:则结果为:9101112 static int a|34={1,2,3,4},{5,6,7,8},{9,10,11,12}: (2)、按数组存储顺序依次给各元素赋初值: static int a|34={1,2,3,4,56,7,8,9,10,11,12}; 注意:此方法数据没有明显的界限,当数据较多时容易出错 (3)、可以对部分元素赋初值:(其余赋缺省值)10 00 5000 static int al34-{1},{5},9}则结果为:9000 (4)、只对数组各行中的某些元素赋初值: 1000 static int a3]4={{1},{0,5},{0,0,9}; 0500 则结果为:0090 O分
3 二维数组的初始化 (1)、按行给二维数组赋初值: static int a[3][4]={{1,2,3,4}, {5,6,7,8}, {9,10,11,12}}; 1 2 3 4 5 6 7 8 则结果为: 9 10 11 12 (2)、按数组存储顺序依次给各元素赋初值: static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 注意: 此方法数据没有明显的界限, 当数据较多时容易出错 (3)、可以对部分元素赋初值:(其余赋缺省值) static int a[3][4]={{1}, {5}, {9}}; 1 0 0 0 5 0 0 0 则结果为: 9 0 0 0 (4)、只对数组各行中的某些元素赋初值: static int a[3][4]={{1}, {0,5}, {0,0,9}}; 1 0 0 0 0 5 0 0 则结果为: 0 0 9 0
(5)、只对数组中前面几行赋初值,后面各行的100 元素自动赋缺省值 3500 static int a|3l4|={,3,5};则结果为:0000 (6)、当对全部数组元素赋初值时,第一维的长度 123 可以不说明,但第二维长度不能省: 456 static int all3={1,2,3,4,5,6,7,8,9};则结果为:789 (⑦)、按行对部分元素赋初值,可以省略第一维的长度说明 static int a[3]= 0,0, 33,0, 23, 1y 003 020 (8)、同一维数组一样,不允许所提供的则结果为:100 初值个数多于数组的元素个数。 心U
(5)、只对数组中前面几行赋初值,后面各行的 元素自动赋缺省值: static int a[3][4]={{1}, {3,5}}; 1 0 0 0 3 5 0 0 则结果为: 0 0 0 0 (6)、当对全部数组元素赋初值时,第一维的长度 可以不说明,但第二维长度不能省: static int a[ ][3]={1,2,3,4,5,6,7,8,9}; 1 2 3 4 5 6 则结果为: 7 8 9 (7)、按行对部分元素赋初值,可以省略第一维的长度说明: static int a[ ][3]={{0,0,3}, {0,2}, {1}}; 0 0 3 0 2 0 (8)、同一维数组一样,不允许所提供的 则结果为: 1 0 0 初值个数多于数组的元素个数