C语言 第四章 数组(4)
目录
多维数组
理解
举例:
二维数组的定义方式
定义方式1:
定义方式2:
二维数组的内存分析
成员的调用
举例
代码示例1
代码示例2
代码示例3
多维数组
理解
二维数组、三维数组、...都称为多维数组。
本节主要讲解二维数组,三维及以上的数组,以此类推即可。
举例:
公司有3个攻坚小分队,每队有6名同事,要把这些同事的工资用数组保存起来以备查看。
队员1 | 队员2 | 队员3 | 队员4 | 队员5 | 队员6 | |
第一分队 | 10000 | 11000 | 12000 | 13000 | 14000 | 15000 |
第二分队 | 16000 | 17000 | 18000 | 19000 | 20000 | 21000 |
第三分队 | 22000 | 23000 | 24000 | 25000 | 26000 | 27000 |
注:
- 此时建立数组salary用于存储工资,它应当是二维的。
- 第一维用来表示第几分队,第二维用来表示第几个同事。
- 例如用salary[2,3]表示角标2对应分队的角标3对应队员的工资。
- 对于二维数组的理解,可以看作是由一维数组嵌套而成的。即一维数组array1又作为另一个一维数组array2的元素而存在。
二维数组的定义方式
定义方式1:
eg.
int a[3][4];
该二维数组a由三个一维数组a[0]、a[1]、a[2]构成,每个一维数组有4个元素,共12个成员(3×4 = 12)。
二维数组,常称为矩阵,把二维数组按行(row)和列(column)的排列,可以形象的理解二维数组的逻辑结构。
定义方式2:
声明与初始化同时进行
eg.
int a[3][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
相当于将第一维的每个成员写成一个数组。
二维数组的内存分析
C语言中,二维数组元素按行存放,最右边的下标变化最快,第一维的下标变化最慢。
举例,整型数组 b[3][3] 内存存放展示。关于长度示例:
int b[3][3];
printf("%d\n",sizeof(b)); //36
printf("%d\n",sizeof(b)/sizeof(int)); //9
成员的调用
格式:
数组名[下标][下标] ,多维数组每个维度的第一个成员从0开始编号。
举例:
给指定索引位置的元素赋值:
int arr1[3][5];
arr1[0][0] = 12;
arr1[2][4] = 5;
举例
遍历二维数组获取所有元素的和,提示使用for的嵌套循环。
代码示例1
// 二维数组声明定义方式1
int arr[3][4];
// 二维数组初始化及遍历求和示例
int a[3][4] = { {0: { 0: 1, 1: 2, 2: 3, 3: 4} },
{1: { 0: 5, 1: 6, 2: 7, 3: 8} },
{2: { 0: 9, 1: 10, 2: 11, 3: 12} } };
int sum = 0;
for (int i = 0; i < sizeof(a)/sizeof(int); ++i) {
for (int j = 0; j < sizeof(a[i])/sizeof(int); ++j) {
printf("%d\t",a[i][j]);
sum+=a[i][j];
}
printf("\n");
}
代码示例2
int main(){
// 使用二维数组实现杨辉三角
// 1. 创建二维数组
int row = 10;// 行数
int arr[row][row*2+1];
// 2. 初始化二维数组
for (int i = 0; i < sizeof(arr)/sizeof(arr[0]); ++i) {
for (int j = 0; j < sizeof(arr[i])/sizeof(int); ++j) {
arr[i][j] = 0;
}
}
// 部分计算杨辉三角元素的代码(截取部分)
for (int j = 1; j < sizeof(arr[i])/sizeof(int)-1; ++j) {
arr[i][j] = arr[i-1][j-1]+arr[i-1][j+1];
}
// 4. 打印杨辉三角
for (int i = 0; i < sizeof(arr)/sizeof(arr[0]); ++i) {
for (int j = 0; j < sizeof(arr[i])/sizeof(int); ++j) {
if(arr[i][j]==0){
printf("\t");
}else{
printf("%d\t",arr[i][j]);
}
}
printf("\n");
}
代码示例3
int main (){
// 定义并初始化二维数组a
int a[3][4] = { {0: { 0: 1, 1: 2, 2: 3, 3: 4} },
{1: { 0: 5, 1: 6, 2: 7, 3: 8} },
{2: { 0: 9, 1: 10, 2: 11, 3: 12} } };
int sum = 0;
// 计算二维数组a所有元素的和并打印
for (int i = 0; i < sizeof(a)/sizeof(a[0]); ++i) {
for (int j = 0; j < sizeof(a[i])/sizeof(int); ++j) {
printf("%d\t",a[i][j]);
sum+=a[i][j];
}
printf("\n");
}
printf("总和为%d",sum);
}