C语言程序设计教程 高等教育出版社第二版 第五章 数组
三维数组:float a[2][3][4]在内存中的存放顺序:
a[0][0][0]→a[0][0][1]→a[0][0][2]→a[0][0][3]→ a[0][1][0]→a[0][1][1]→a[0][1][2]→a[0][1][3]→ a[0][2][0]→a[0][2][1]→a[0][2][2]→a[0][2][3]→ a[1][0][0]→a[1][0][1]→a[1][0][2]→a[1][0][3]→ a[1][1][0]→a[1][1][1]→a[1][1][2]→a[1][1][3]→ a[1][2][0]→a[1][2][1]→a[1][2][2]→a[1][2][3]
5.2.2 二维数组和多维数组的引用 二维数组元素的引用形式为: 数组名[下标1][下标2] 【例】:float a[2][3];
有6个元素,按如下方式引用各元素: a[0][0]、a[0][1]、a[0][2]、a[1][0]、a[1][1]、a[1][2] 注意:数组float a[2][3]中无元素a[2][3]。(下标从0始)
5.2.3 二维数组和多维数组的初始化 ㈠二维数组的初始化
第 13 页 共 30 页
C语言程序设计教程 高等教育出版社第二版 第五章 数组
1、分行对各元素赋值,如:
static int a[3][4] =
{{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}};
仅对a[0][0]、a[1][0]、a[2][0]赋值,其余元素未赋值(对于静态数组,未赋值元素指定初值0;对于动态数组,未赋值元素的初值是随机的)。
4、如果对全部元素赋初值,则第一维的长度可以不指定,但必须指定第二维的长度。 【例】:static int
a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 与下面定义等价:
static int
a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12}; ㈡多维数组的初始化
与二维数的初始化相似。
第 14 页 共 30 页
C语言程序设计教程 高等教育出版社第二版 第五章 数组
5.2.4 二维数组程序举例
【例1】:将一个二维数组行和列交换,存到另一个二维数组中。如:
算法: b[j][i] = a[i][j] 程序: main()
{ static int a[2][3] = {{1,2,3},{4,5,6}}; static int b[3][2], i,j; printf(\
for(i=0;i<=1;i++) /* 0~1行 */ { for(j=0;j<=2;j++) /* 0~2列 */ { printf(\ b[j][i] = a[i][j]; /* 行、列交换 */ }
printf(\ /*输出一行后换行
*/
}
第 15 页 共 30 页
C语言程序设计教程 高等教育出版社第二版 第五章 数组
printf(\for(i=0;i<=2;i++)
{ for(j=0;j<=1;j++)
printf(\ printf(\ }
}
【例2】:有一个3×4的矩阵,编程序求出其中值最大的那个元素的值及其所在的行号和列号。 算法:
⑴把第一个元素a[0][0]作为临时最大值max; ⑵把临时最大值max与每一个元素a[i][j]进行比较,若a[i][j]>max,把a[i][j]作为新的临时最大值,并记录下其下标i和j。当全部元素比较完后,max是整个矩阵全部元素的最大值。 流程:
第 16 页 共 30 页