修改密码

【2024课程】零基础学会C++编程课程

成品课程

陈远龙老师主讲 & 答疑

课程题单 - T1000

未购买 · 可先试学20节课

课程目录展开/折叠

第32课 二维数组

播放快捷键

播放/暂停:空格(或鼠标单击)      全屏:F(或鼠标双击)      退出全屏:Esc

快进10 / 30 / 60秒:方向键→ / Ctrl + 方向键→ / Shift + 方向键→

快退10 / 30 / 60秒:方向键← / Ctrl + 方向键← / Shift + 方向键←

本节课讲解配套PPT&板书:

本节课讲解到的源代码

源代码下载:第32课 二维数组-源代码下载

1. 二维数组
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int a[3][4]; // double[3][4] scanf("%lf", &a[i][j]);

    // 从键盘输入数据
    for (int i = 0; i < 3; i ++)
    {
        for (int j = 0; j < 4; j ++)
        {
            scanf("%d", &a[i][j]); // scanf需要的是内存单元的地址 
            // cin >> a[i][j]; // C++风格 
        }
    }

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

    return 0;
} 
2. C语言输入格式控制符
#include <bits/stdc++.h>
using namespace std;

int main()
{
    // 测试学习 
    double d;
    scanf("%lf", &d); // float 输入 %f,double %lf 
    printf("%f", d); // float、double(%lf) 输出 %f 

    return 0;
}
3. 三维数组
#include <bits/stdc++.h>
using namespace std;

int main()
{
    /*
    int a[10]; // 一维数组 线性的
    int b[3][4]; // 二维数组 平面的 
    int c[2][3][4]; // 三维数组 立体的 
    // 单个元素初始化 
    c[0][0][0] = 1;
    c[0][0][1] = 2;
    c[0][0][2] = 3;
    c[0][0][3] = 4;

    c[0][1][0] = 5;
    c[0][1][1] = 6;
    c[0][1][2] = 7;
    c[0][1][3] = 8;

    c[0][2][0] = 9;
    c[0][2][1] = 10;
    c[0][2][2] = 11;
    c[0][2][3] = 12;
    */
    int c[2][3][4] = {
        {
            {1, 2, 3, 4},
            {5, 6, 7, 8}, 
            {9, 10, 11, 12},       
        },
        {
            {11, 22, 33, 44},
            {55, 66, 77, 88}, 
            {99, 1010, 1111, 1212},       
        },       
    };

    // 访问单个元素(读 + 写) 
    cout << c[1][1][1] << endl; 
    cout << c[1][1][2] << endl;
    c[1][1][3] = 8888;
    cout << c[1][1][3] << endl;

    // 遍历三维数组
    for (int i = 0; i < 2; i ++)
    {
        cout << "货架:" << i << endl;

        for (int j = 0; j < 3; j ++)
        {
            for (int k = 0; k < 4; k ++)
            {
                cout << c[i][j][k] << ' ';
            }
            cout << endl;
        }
    } 

    return 0;
}
4. P1110-对角线之和-1
#include <bits/stdc++.h>
using namespace std;

int a[105][105];
int n;

int main()
{
    cin >> n;
    for (int i = 0; i < n; i ++)
    {
        for (int j = 0; j < n; j ++)
        {
            cin >> a[i][j];
        }
    }

    // 计算对角线之和
    int ans1 = 0, ans2 = 0;
    for (int i = 0; i < n; i ++)
    {
        for (int j = 0; j < n; j ++)
        {
            if (i == j) // 第1根对角线的元素 
            {
                ans1 += a[i][j];
            }
            if (i + j == n - 1) // 第2根对角线的元素 
            {
                ans2 += a[i][j];
            }
        }
    }

    cout << ans1 << endl;
    cout << ans2 << endl; 

    return 0;
}
5. P1110-对角线之和-2
#include <bits/stdc++.h>
using namespace std;

int a[105][105];
int n;

int main()
{
    cin >> n;
    for (int i = 0; i < n; i ++)
    {
        for (int j = 0; j < n; j ++)
        {
            cin >> a[i][j];
        }
    }

    // 计算对角线之和
    int ans1 = 0, ans2 = 0;
    for (int i = 0; i < n; i ++)
    {
        // 第1对角线:i = j
        // 第2对角线: i + j = n - 1 
        // a[i][i]  a[i][n - 1 - i]
        ans1 += a[i][i];
        ans2 += a[i][n - 1 - i];
    }

    cout << ans1 << endl;
    cout << ans2 << endl; 

    return 0;
}
6. P1110-对角线之和-3
#include <bits/stdc++.h>
using namespace std;

int a[105][105];
int n;

int main()
{
    // 计算对角线之和
    int ans1 = 0, ans2 = 0;

    cin >> n;
    for (int i = 0; i < n; i ++)
    {
        for (int j = 0; j < n; j ++)
        {
            cin >> a[i][j];

            if (i == j) ans1 += a[i][j];
            if (i + j == n - 1) ans2 += a[i][j];
        }
    }

    cout << ans1 << endl;
    cout << ans2;

    return 0;
}
7. P1113-对角线之和2-1

#include <bits/stdc++.h>
using namespace std;

int a[1005];
int n;
// int idx; // index idx
int T;
int m;
int b[25][25];

int main()
{
    cin >> n;
    for (int i = 0; i < n; i ++)
    {
        cin >> a[i];
    }

    cin >> T;

    while (T--)
    {
        int idx = 0;
        int m;
        cin >> m;
        for (int i = 0; i < m; i ++)
        {
            for (int j = 0; j < m; j ++)
            {
                // cin >> b[i][j];
                b[i][j] = a[idx++]; // 一维数组访问越界?? 
            }
        }
        // 打印调试下
        /* 
        cout << endl;
        for (int i = 0; i < m; i ++)
        {
            for (int j = 0; j < m; j ++)
            {
                cout << b[i][j] << ' ';
            }
            cout << endl;
        }
        */

        int ans1 = 0, ans2 = 0;
        for (int i = 0; i < m; i ++)
        {
            ans1 += b[i][i];
            ans2 += b[i][m - 1 - i]; // m行m列 
        }
        cout << ans1 << ' ' << ans2 << endl;

    }

    return 0;
}

本节课答疑

建议大家有问题先通过AI答疑(比如:DeepSeek 等),AI时代需要学会使用AI辅助学习

陈远龙老师视频讲解:如何使用DeepSeek进行答疑?

通过AI未能获得满意解答的,可以联系陈远龙老师答疑

目录