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

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

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

目录

📕二维数组的概念

📕二维数组的定义

📕引用数组元素

📕注意事项

📕二维数组的输入

📕二维数组的输出

🧠二维数组输入输出

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

🧠注意事项

🧠找货物

🧠找货物参考代码

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


二维数组的概念

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

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

二维数组的定义

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

定义:

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

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

引用数组元素

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

<数组名>行下标列下标

如:a12

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

注意事项

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

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

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

a00 a01 a02

a10 a11 a12

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

二维数组的输入

复制代码
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/

相关推荐
Angle.寻梦7 分钟前
数据结构--链表
数据结构·链表
网站优化(SEO)专家8 分钟前
SEO核心算法拆解:网站排名快速提升的武林秘籍!
算法·搜索引擎·网站排名·核心算法
惊讶的猫22 分钟前
CLGSI
人工智能·算法·机器学习
ykdcdc31 分钟前
DC-DC隔离和非隔离怎么选?工控/监控/医疗分别用哪种
数据结构·汽车·推荐算法
Angle.寻梦1 小时前
数据结构--堆
数据结构
ysa0510301 小时前
【板子】二分答案(最大最小?)
c++·笔记·算法·板子
科技之门2 小时前
百公里管网漏损分级定位实战方案2026
前端·人工智能·算法
木木子222 小时前
# 猜数字游戏 — HarmonyOS交互逻辑与随机算法实现
算法·游戏·华为·交互·harmonyos
stolentime2 小时前
SP8549 MAIN75 - BST again题解
c++·算法·二叉树·深度优先·图论·记忆化搜索·组合数学
ziguo11223 小时前
C/C++ 错误处理全解:从 errno 到 C++ 异常
linux·c语言·c++·windows·visual studio