C语言二维数组-学习十三
C语言二维数组-学习十三
2022-02-05 / 0评论 / 262阅读 / 0点赞
-- XG.孤梦

C语言二维数组-学习十三

XG.孤梦
2022-02-05 / 0 评论 / 262 阅读 / 正在检测是否收录...

二维数组

  • 一般形式:

    • 类型说明符 数组名 [常量表达式] [常量表达式];
  • 例如

    • int a[3][4]; 说明了一个三行四列的数组,数组名为a,其下标变量的类型为整型。
  • 二维数组在内存中的存放

    • 二维数组在概念上是二维的,但是,实际的硬件存储器却是连续编址的也就是说存储器单元是按一维线性排列的。
    • 在C语言中,二维数组是按行排列,即放完一行之后顺次放入第二行。

二维数组的引用

  • 一般形式:

    • 数组名 [下标] [下标]
  • 例如

    • b[1][2]=a[2][3]/2;
  • 下标可以是整型表达式。

    • 例如:a[2][3], a[2-1][2*2-1]
  • 下标值应在已定义的数组大小的范围内。

    • 例如: int a[3][4]; a[3][4]=3;错误 定义a为3行4列的数组,下标从0开始,行的最大下标为2,列最大下标为3

二维数组的初始化

  • 分行给二维数组赋初值。

    • 例如:int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
  • 将所有数据写在一个花括弧内,按数组排列的顺序对各元素赋初值。

    • 例如:int a[3][4]={{1,2,3,4,5,6,7,8,9,10,11,12};
  • 对部分元素赋初值。

    • 例如:int a[3][3]={{1},{2},{3}}; 对每一行的第一列元素赋值,未赋值的元素取0值。
    • 赋值后
    • 1 0 0
    • 2 0 0
    • 3 0 0
  • 对所有元素赋初值,则定义数组时,对第一维的长度可以不指定,但第二维长度不能省略

    • 例如:int a[3][4]={{1,2,3,4,5,6,7,8,9,10,11,12};
    • 可以写成:int a[][4]={{1,2,3,4,5,6,7,8,9,10,11,12};

例子

有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。
#include<stdio.h>

main()
{
    int max, a[3][4],i,j,x,y; 
    max = a[0][0];
    printf("请输入数据\n");
    for (i = 0; i <= 2; i++){
        for (j = 0; j <= 3; j++) {
            scanf_s("%d", &a[i][j]);
        }
    }
    for (i = 0; i <= 2; i++) {
        for (j = 0; j <= 3; j++) {
            if (max < a[i][j]) {
                max = a[i][j];
                x = i+1;
                y = j+1;
            }
        }
    }
    printf("max=%d,在第%d行,第%d列", max, x, y);

}

38391-czoopkiddqk.png


将一个二维数组行和列的元素互换,存到另一个二维数组中。

1.png

#include<stdio.h>

main()
{
    int a[2][4],b[4][2],i,j; 

    printf("请输入数据\n");
    for (i = 0; i <= 1; i++){
        for (j = 0; j <= 3; j++) {
            scanf_s("%d", &a[i][j]);
            
        }
    }
    printf("\n");

    for (i = 0; i <= 1; i++) {
        for (j = 0; j <= 3; j++) {
            b[j][i] = a[i][j];
            printf("%d ", a[i][j]);
            }
        printf("\n");
    }
    printf("\n");

    for (i = 0; i <= 3; i++) {
        for (j = 0; j <= 1; j++) {
            printf("%d ", b[i][j]);
        }
        printf("\n");
    }
}

41155-s9qjfa2cupd.png


二维数组a10的对角线为1,其他为0。
#include<stdio.h>

void main()
{
    int a[10][10],i,j; 

    for (i = 0; i <= 9; i++){
        for (j = 0; j <= 9; j++) {
            if (i == j||i+j==9) {
                a[i][j] = 1;
            }
            else
            {
                a[i][j] = 0;
            }
        }
    }
    printf("\n");

    for (i = 0; i <= 9; i++) {
        for (j = 0; j <= 9; j++) {
            printf("%d ", a[i][j]);
            }
        printf("\n");
    }
}

21188-tzr6ky07b9s.png

打印出以下的杨辉三角形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
#include<stdio.h>

void main()
{
    int a[10][10],i,j; 

    for (i = 0; i <= 9; i++){
        for (j = 0; j <= i; j++) {
            if (j == 0 || j == i) {
                a[i][j] = 1;
            }
            else
            {
                a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
            }
        }
    }
    printf("\n");

    for (i = 0; i <= 9; i++) {
        for (j = 0; j <= i; j++) {
            printf("%d ", a[i][j]);
            }
        printf("\n");
    }
}

36271-b0xo2hs41zt.png


0

评论

博主关闭了所有页面的评论