文章目录
文档视频讲解链接地址
- 腾讯课堂链接 : 42_数组_二维数组
- 腾讯课堂链接 : 43_数组_杨辉三角
- 腾讯课堂链接 : 44_数组_小节复习
5.5 二维数组
二维数组的定义
数据类型 数组名[常量表达式1][常量表达式2]
- 常量表达式1 : 表示行数
- 常量表达式2 : 表示列数
- 元素个数 = 行数*列数
- 例如:
int a[3][4]; // 3行4列的数组 float b[2][5]; // 2行5列的数组 int c[2][3][4]; // 2个3行4列的数组 , 看成一本书
数组在内存中存放的顺序
- 内存是一维线性的
- 二维数组存放可以分为
- 行序优先
- 列序优先
- 例如:
a[3][2]
按照行序优先存放如图:
按照列序优先存放如图:
结论: 二维数组使用行序优先的方式把二维数组存放在一维的内存中
二维数组的理解 - 核心点降维理解
首先把二维数组理解成一个有三个元素的一维数组,分别是 a[0],a[1],a[2]
每一个元素又有4个子元素 ,分别是
a[x][0],a[x][1],a[x][2],a[x][3]
因此 a[0]是一个数组, 里面有4个子元素 , 分别是
a[0][0] , a[0][1] , a[0][2] , a[0][3]
a[1]也是一个数组, 里面有4个子元素 , 分别是
a[1][0] , a[1][1] , a[1][2] , a[1][3]
a[2]也是一个数组, 里面有4个子元素 , 分别是
a[2][0] , a[2][1] , a[2][2] , a[2][3]
二维数组元素的引用
形式: 数组名[下标][下标]
二维数组的初始化
分行初始化
不分行初始化
省略第一维定义初始化 , 行可以省略 , 列不能省略
部分数组元素初始化, 可以省略行数, 列数不能省略
实例56
从键盘输入一个3行3列的整型数组并且打印出来。- 源文件
01-cbase\56-array.c
- 源代码
#include <stdio.h> int main(int argc, char const *argv[]) { int a[3][4] = {0}; for (int i = 0; i < 3; i++) // 外层循环控制行数 { for (int j = 0; j < 4; j++) // 内存循环控制列数 { printf("请输入 a[%d][%d] 元素的值 >:", i, j); scanf("%d", &a[i][j]); } } printf("数组的内容为:\n"); for (int i = 0; i < 3; i++) // 外层循环控制行数 { for (int j = 0; j < 4; j++) // 内存循环控制列数 { printf("%2d ", a[i][j]); } printf("\n"); } return 0; }
- 运行结果
请输入 a[0][0] 元素的值 >:1 请输入 a[0][1] 元素的值 >:2 请输入 a[0][2] 元素的值 >:3 请输入 a[1][0] 元素的值 >:5 请输入 a[1][1] 元素的值 >:6 请输入 a[1][2] 元素的值 >:7 请输入 a[1][3] 元素的值 >:8 请输入 a[2][0] 元素的值 >:9 请输入 a[2][1] 元素的值 >:10 请输入 a[2][2] 元素的值 >:11 请输入 a[2][3] 元素的值 >:12 数组的内容为: 1 2 3 4 5 6 7 8 9 10 11 12
实例57
- 输出下图的杨辉三角的前10行
// 第一种 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1 // 第二种 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1
- 源文件
01-cbase\57-yanhui.c
- 源代码
#include <stdio.h> #define N 10 // 输出 前10行的杨辉三角 int main(int argc, char const *argv[]) { int a[N][N] = {0}; for(int i=0;i<N;i++ ) // 控制显示行数 { for(int j=0;j<N-1-i;j++) // 控制显示列数 { printf(" "); } for(int j=0;j<=i;j++) // 控制显示列数 { //j==0 第0列都是1 if( j==0) { a[i][0] = 1; } // i==j 表示是最后一列, 也显示为1 if(i==j) { a[i][j] = 1; } if(i >= 2) // 第2行以后 { a[i][j] = a[i-1][j-1] + a[i-1][j] ; } printf("%3d ",a[i][j]); } printf("\n"); } return 0; }
- 运行结果
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1