前面介绍了一维数组,一维数组也引出了二维数组。下面会介绍二维数组。
目录
1.定义
如果一维数组的每个元素都是一维数组时,就变成了二维数组,“数组的数组”。二维数组的定义格式如下:
数据类型 数组名[常量表达式1] [常量表达式2];
例如:
int a[3][4];
注意:二维数组的两个下标也是从0开始的。
如上面的代码的元素如下:
a[0][0] | a[0][1] | a[0][2] | a[0][3] |
a[1][0] | a[1][1] | a[1][2] | a[1][3] |
a[2][0] | a[2][1] | a[2][2] | a[2][3] |
可以看作一个三行四列的表格。
2.引用
二维数组的引用与一维数组的引用非常相似。
引用格式如下:
数组名 [下标1][下标2]
如:
a[7][8];
b[i][j];
3.初始化
二维数组的初始化与一维数组的初始化也非常相似。
格式有两种:
3.1 格式一
类型标识符 数组名[常量表达式]={{值1,值2,···},{值1,值2,···},···}
如:
int c[2][3]={{23,52,98},{36,35,92}}
3.2 格式二
类型标识符 数组名[常量表达式]={值1,值2,···}
如:
int r[2][2]={1,2,3,4}
4.例题
图像模糊处理
【题目描述】
给定n行m列的图像各像素点的灰度值,要求用如下方法对其进行模糊化处理:
1.四周最外侧的像素点灰度值不变;
2.中间各像素点新灰度值为该像素点及其上下左右相邻四个像素点原灰度值的平均(舍入到最接近的整数)。
【输入】
第一行包含两个整数n和m,表示图像包含像素点的行数和列数。1≤n≤100,1≤m≤100。
接下来n行,每行m个整数,表示图像的每个像素点灰度。相邻两个整数之间用单个空格隔开,每个元素均在0∼255之间。
【输出】
n行,每行m个整数,为模糊处理后的图像。相邻两个整数之间用单个空格隔开。
【输入样例】
4 5
100 0 100 0 50
50 100 200 0 0
50 50 100 100 200
100 100 50 50 100【输出样例】
100 0 100 0 50
50 80 100 60 0
50 80 100 90 200
100 100 50 50 100
以下分析中,行列从1开始数。该二维矩阵有n行m列,行号为1~n,列号为1~m。
上下左右四边灰度值不变,对于元素a[i][j]在各位置时的条件:第1行i == 1,最后一行i == n,第1列j == 1,最后一列j == m。
对于不在上下左右四边的元素a[i][j],其上下左右位置的元素分别为:上a[i-1][j],下a[i+1][j],左a[i][j-1],右a[i][j+1]
将上下左右位置的元素和自身加起来,除以5,结果取四舍五入到整数,即为该点的灰度值。
#include<bits/stdc++.h>
using namespace std;
#define N 105
int main()
{
int n, m, a[N][N], b[N][N];
cin>>n>>m;
for(int i = 1; i <= n; ++i)//输入矩阵
for(int j = 1; j <= m; ++j)
cin >> a[i][j];
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= m; ++j)
{
if(i == 1 || i == n || j == 1 || j == m)//如果是四边,灰度值不变
b[i][j] = a[i][j];
else
b[i][j] = round((double)(a[i-1][j] + a[i+1][j] + a[i][j-1] + a[i][j+1] + a[i][j]) / 5);//中心的位置灰度值是上下左右中数字的平均
}
for(int i = 1; i <= n; ++i)//输出矩阵
{
for(int j = 1; j <= m; ++j)
cout << b[i][j] << ' ';
cout << endl;
}
return 0;
}
创作不易,白嫖不好,各位的支持和认可,就是我创作的最大动力,如果喜欢我的文章,给个关注吧!
冰焰狼 | 文
如果本篇博客有任何错误,请批评指教,不胜感激 !