简介:
二维数组可以理解为是由多个一维数组组成的数组,他的使用方式也与一维数组的方式一致,同样可以抽象为表格来帮助理解,如下图:
而他 创建、初始化、输入和输出 的方式也是与一维数组基本一致的的:
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[10][10] = {}; //创建二维数组并初始化
for(int i = 1;i <= 10;i++){
for(int j = 1;j <= 10;j++){ //区别于一维数组,二维数组的输入和输出都需要双层循环
cin >> a[i][j];//顺序输入,遵循先行后列的顺序
}
}
for(int i = 1;i <= 10;i++){
for(int j = 1;j <= 10;j++){
cout << a[i][j] << " ";//顺序输出
}
cout << endl;
}
return 0;
}
其中,这里的 ‘ i ’ 代表着行下标,而 ‘ j ’ 代表着列下标。
通过这些代码我们就可以创建出一个10*10的数组了,用图像表示就是一个10*10的表格,如:
下面我们就可以开始练习了:
实战演练
例题1:
题目描述
输入一个 n 行 m 列的矩阵A,输出它的转置形式。
输入格式
第一行包含两个整数n 和m,表示矩阵A 的行数和列数。1≤ n ≤ 100,1 ≤ m ≤ 100。
接下来n 行,每行m 个整数,表示矩阵A 的元素。相邻两个整数之间用单个空格隔开,每个元素均在1∼1000之间。
输出格式
m 行,每行n 个整数,为矩阵A 的转置。相邻两个整数之间用单个空格隔开。
输入输出样例
输入
3 3 1 2 3 4 5 6 7 8 9
输出
1 4 7 2 5 8 3 6 9
代码:
#include <bits/stdc++.h>
using namespace std;
int sz[101][101];
int main() {
int n, m;
cin >> n >> m; //输入行数n,列数m
for (int i = 1; i <= n; i ++) {
for (int j = 1; j <= m; j ++) {
cin >> sz[i][j]; //顺序输入
}
}
for (int i = 1; i <= m; i ++) {
for (int j = 1; j <= n; j ++) {
cout << sz[j][i] << " "; //转置输出
}
cout << endl; //换行
}
return 0;
}
例题2:
题目描述
给定一个 5×5的矩阵(数学上,一个r×c 的矩阵是一个由r行c列元素排列成的矩形阵列),将第n行和第m行交换,输出交换后的结果。
输入格式
输入共6行,前5行为矩阵的每一行元素,元素与元素之间以一个空格分开。
第6行包含两个整数m、n,以一个空格分开(1 ≤ m , n ≤ 5)。
输出格式
输出交换之后的矩阵,矩阵的每一行元素占一行,元素之间以一个空格分开。
输入输出样例
输入
1 2 2 1 2 5 6 7 8 3 9 3 0 5 3 7 2 1 4 6 3 0 8 2 4 1 5
输出
3 0 8 2 4 5 6 7 8 3 9 3 0 5 3 7 2 1 4 6 1 2 2 1 2
代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
int jz[5][5];
for (int i = 0; i < 5; i ++){
for (int j = 0; j < 5; j ++){
cin >> jz[i][j];
}
}
int a, b;
cin >> a >> b;
swap(jz[a - 1], jz[b - 1]);//swap为对调函数,实现对调
for (int i = 0; i < 5; i ++) {
for (int j = 0; j < 5; j ++){
cout << jz[i][j] << ' ';
}
cout << endl;
}
return 0;
}
题目来源:洛谷B2106 矩阵转置、B2099 矩阵交换行