C++基础21 二维数组及相关问题详解

这是《C++算法宝典》C++基础篇的第21节文章啦~

如果你之前没有太多C++基础,请点击👉C++基础,如果你C++语法基础已经炉火纯青,则可以进阶算法👉专栏:算法知识和数据结构👉专栏:数据结构

目录

📕二维数组的概念

📕二维数组的定义

📕引用数组元素

📕注意事项

📕二维数组的输入

📕二维数组的输出

🧠二维数组输入输出

🧠二维数组输入输出参考代码

🧠注意事项

🧠找货物

🧠找货物参考代码

🧠有两列火车停反了位置该如何解决?


二维数组的概念

在上篇文章中我们提到,一维数组就像是一列火车。假设我们来到火车站,看见有很多辆长度一样的火车。为了区别这些火车,我们尝试分别命名为a1,a2,a3...那么a1[2]就可以用来表示第一辆火车2号车厢。

如果把火车当做一个元素,那么这些火车就会组成一个一维数组,而这个一维数组里面的每一个元素都是一个小的一维数组。这样就是二维数组,即一个数组需要使用两个数字来控制位置。

二维数组的定义

维数组就是用一个名字后面跟着两个数字,分别表示数组的行和列。二维数组就是一个矩阵------长方形方阵,有行有列。

定义:

数据类型 数组名[常量表达式1] [常量表达式2]

例如:int a[5][9]; //定义一个5行9列的二维整型数组a

引用数组元素

如果需要使用二维数组中的某个元素,就需要找到具体位置:

<数组名>[行下标][列下标]

如:a[1][2]

表示二维数组a中的第2行第3列元素。

注意事项

和一维数组一样,行下标和列下标都是从0开始编号的。

每个下标表达式取值不应超出下标所指定的范围。

例如,设有定义:int a[2][3];则表示a是2行3列的二维数组,共有2*3=6个元素,它们是:

a[0][0] a[0][1] a[0][2]

a[1][0] a[1][1] a[1][2]

因此可以看成一个矩阵(表格),a[1][2]即表示第2行第3列的元素,而a[2][3]就已经越界了。

二维数组的输入

int  a[10][10];  //定义一个10行10列的二维数组 a
for(i=1;i<=3;i++)  //控制行下标
{
    for(j=1;j<=4;j++)   //控制列下标
     cin>>a[i][j];
} 

二维数组的输出

for(i=1;i<=3;i++)             
{
    for(j=1;j<=4;j++)
    cout<<a[i][j]<<" ";  //每个元素之间用空格隔开
    cout<<endl;             //每一行输出结束之后需要手动换行
}    

二维数组输入输出

给定一个m行n列的二维数组,请原样输出这个二维数组(m和n范围为2-20)

【输入描述】

m+1行:

第一行:m和n,分别表示二维数组的行数和列数

接下来m行,每行n个数字,表示二维数组中每个元素

【输出描述】

m行,每行n个数字,二维数组原样输出

【输入样例】

2 3
1 3 4
2 6 8

【输出样例】

1 3 4
2 6 8

二维数组输入输出参考代码

#include<iostream>
using namespace std;
int a[22][22],m,n;
int main()
{
    cin>>m>>n;
    for(int i=1;i<=m;i++){
        for(int j=1;j<=n;j++)
         cin>>a[i][j];
    }
    for(int i=1;i<=m;i++){
     for(int j=1;j<=n;j++)
          cout<<a[i][j]<<" ";
          cout<<endl;
     }
    return 0;
}

注意事项

二维数组定义的时候尽量在主函数之外定义,因为一般情况下二维数组较大,占的空间较多。定义在主函数之外可以定义的比较大,且数组里面的所有元素都会默认赋值为0。(一维数组和变量也可以定义在主函数之外)。这样的定义叫做全局数组(变量)。

找货物

有m列火车,每列火车有n节车厢,车厢装有很多货物,需要对第x列火车第y节车厢进行抽查,请问这节车厢里有多少货物?(最多有20列火车,每列火车20节车厢)

【输入描述】

m+1行:

第一行:m,n,x,y,分别表示二维数组的行数、列数和要找的元素的所在行和列

接下来m行,每行n个数字,表示二维数组中每个元素

【输出描述】

一个数字,表示x行y列的元素

【输入样例】

3 4 2 2
1 2 3 4
4 5 6 7
7 8 9 10

【输出样例】

5

找货物参考代码

#include<iostream>
using namespace std;
int m,n,x,y,a[30][30];
int main()
{
    cin>>m>>n>>x>>y;
    for(int i=1;i<=m;i++)
        for(int j=1;j<=n;j++)
            cin>>a[i][j];
            cout<<a[x][y];
    return 0;
}

有两列火车停反了位置该如何解决?

for(i=1;i<=n;i++)     //对二维数组两行进行交换。
{
    t=a[x][i];
    a[x][i]=a[y][i]; //因为每行都有n个元素,所以一共需要交换n次。(循环n次)
    a[y][i]=t;
}

从入门到算法,再到数据结构,查看全部文章请点击此处http://www.bigbigli.com/

相关推荐
passer__jw76720 分钟前
【LeetCode】【算法】283. 移动零
数据结构·算法·leetcode
Ocean☾27 分钟前
前端基础-html-注册界面
前端·算法·html
顶呱呱程序35 分钟前
2-143 基于matlab-GUI的脉冲响应不变法实现音频滤波功能
算法·matlab·音视频·matlab-gui·音频滤波·脉冲响应不变法
爱吃生蚝的于勒1 小时前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法
羊小猪~~1 小时前
数据结构C语言描述2(图文结合)--有头单链表,无头单链表(两种方法),链表反转、有序链表构建、排序等操作,考研可看
c语言·数据结构·c++·考研·算法·链表·visual studio
王哈哈^_^1 小时前
【数据集】【YOLO】【VOC】目标检测数据集,查找数据集,yolo目标检测算法详细实战训练步骤!
人工智能·深度学习·算法·yolo·目标检测·计算机视觉·pyqt
星沁城1 小时前
240. 搜索二维矩阵 II
java·线性代数·算法·leetcode·矩阵
脉牛杂德2 小时前
多项式加法——C语言
数据结构·c++·算法
legend_jz2 小时前
STL--哈希
c++·算法·哈希算法
CSUC2 小时前
【C++】父类参数有默认值时子类构造函数列表中可以省略该参数
c++