第5章 C语言的二维数组 (五)

发布于:2023-01-04 ⋅ 阅读:(591) ⋅ 点赞:(0)

文档视频讲解链接地址

  1. 腾讯课堂链接 : 42_数组_二维数组
  2. 腾讯课堂链接 : 43_数组_杨辉三角
  3. 腾讯课堂链接 : 44_数组_小节复习

5.5 二维数组

  1. 二维数组的定义

    数据类型 数组名[常量表达式1][常量表达式2]
    
    • 常量表达式1 : 表示行数
    • 常量表达式2 : 表示列数
    • 元素个数 = 行数*列数
    • 例如:
    int a[3][4];       // 3行4列的数组
    float b[2][5];     // 2行5列的数组 
    int c[2][3][4];    // 2个3行4列的数组 , 看成一本书
    
  2. 数组在内存中存放的顺序

    • 内存是一维线性的
    • 二维数组存放可以分为
      • 行序优先
      • 列序优先
    • 例如:
    a[3][2] 
    
    • 按照行序优先存放如图:
      01-c-58

    • 按照列序优先存放如图:
      01-c-59

    • 结论: 二维数组使用行序优先的方式把二维数组存放在一维的内存中

  3. 二维数组的理解 - 核心点降维理解

    01-c-59

    01-c-59

    • 首先把二维数组理解成一个有三个元素的一维数组,分别是 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]
      
  4. 二维数组元素的引用

    形式: 数组名[下标][下标]
    
  5. 二维数组的初始化

    • 分行初始化
      01-c-62

    • 不分行初始化
      01-c-63

    • 省略第一维定义初始化 , 行可以省略 , 列不能省略
      01-c-64

    • 部分数组元素初始化, 可以省略行数, 列数不能省略

    image-20220804090246440

  6. 实例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
    
  7. 实例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
    

网站公告

今日签到

点亮在社区的每一天
去签到

热门文章