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/

相关推荐
不会就选b1 小时前
数据结构之顺序表
数据结构
汉克老师1 小时前
GESP6级C++考试语法知识(三十四、二叉搜索树(BST)(四、BST的退化))
c++·二叉搜索树·bst·gesp6级·gesp六级
y_m_h1 小时前
llvm介绍
c++
吴可可1231 小时前
LibNester核心是C++实现
c++
z落落1 小时前
C# Hashtable 哈希表+SortedList 有序键值对集合
数据结构·散列表
Brilliantwxx2 小时前
【C++】 深入理解红黑树:实现与原理全解
数据结构·c++·笔记·算法·青少年编程·红黑树
人道领域2 小时前
【LeetCode刷题日记】108.将有序数组转换为二叉搜索树
java·算法·leetcode
Dlrb12112 小时前
数据结构-排序算法
数据结构·算法·排序算法·插入排序·堆排序·希尔排序·快速排序
过期动态2 小时前
【LeetCode 热题 100】无重复字符的最长子串
java·数据结构·spring boot·算法·leetcode·职场和发展
莫等闲-3 小时前
leetcode42. 接雨水 leetcode84.柱状图中最大的矩形
数据结构·c++·算法·leetcode