-->
当前位置:首页 > 题库 > 正文内容

程序填空题:认识二维数组

Luz4年前 (2021-11-13)题库1009
每一个二维数组其实都可以被看作由特定数量的一维数组组成。比如通过如 int matrix[2][3]的形式进行声明。 在声明二维数组时,在第一个方括号内写的数字可以被视为一维数组的个数(如这里的[2]),我们也可以称之为二维数组的“行数”;在第二个方括号内写的数字可以被视为是每个一维数组内的元素个数(如这里的[3]),我们也可以称之为二维数组的“列数”。

我们在访问数组元素时,方括号内的数字分别表示数组中的元素在行和列的编号,在二维数组matirx[2][3]总的元素,可以通过matrix[0][0],matrix[0][1],matrix[0][2],matrix[1][0],matrix[1][1],matrix[1][2]进行访问。

那下面我们就做一个简单的矩阵翻转操作吧。 给定一个m行、n列的矩阵,对这个矩阵进行根据要求将它水平翻转或者竖直翻转。

比如对于矩阵

![1.png](~/fcb711e1-290e-4a1a-b20e-ea7f35f76e56.png)

如果对A进行水平翻转,将得到

![2.png](~/273191f7-e034-47dd-baea-2269fb5de741.png)

如果对A进行竖直翻转,将得到

![3.png](~/0e0da1cd-aa15-48ba-a9a2-c4e4ad20202e.png)

提示:如果是水平翻转,则需要对矩阵每一行进行逆置,思考,外循环是对行索引还是列索引?

如果是垂直翻转,则对矩阵每一列进行逆置。
### 输入格式:
首先在第一行输入2个整数,分别对应题目中描述的m和n(1<=m,n<=100),两个整数之间用一个空格分隔。

接下来输入m行,每行包含n个整数,每两个整数之间用一个空格分隔。

接下来输入一行,输入一个整数为1或0,当输入为1时,对矩阵进行水平翻转;当输入为0时对矩阵进行竖直翻转。
### 输出格式:

输出m行,每行包含n个整数,按要求输出翻转后的矩阵,每行任意两个整数之间用一个空格分隔,每行最后一个整数之后没有空格。

### 输入样例1:


2 3
1 2 3
4 5 6
1


### 输出样例1:


3 2 1
6 5 4

### 输入样例2:


3 2
1 2
3 4
5 6
0


### 输出样例2:


5 6
3 4
1 2

c++
#include <stdio.h>
int main() {
int matrix[100][100];
int m;
int n;
scanf("%d%d",&m,&n);
for(int i=0;i<m;i++)//输入矩阵元素值
for(int j=0;j<n;j++)
scanf("%d",&matrix[i][j]);
int flag;
scanf("%d",&flag);
if(flag==1)
{
for(int i=0;i<m;i++) //水平翻转,对每一行进行逆置
for(int j=0, k=n-1;j<k;j++,k--)
{
int t;
t=matrix[i][j];
matrix[i][j]=matrix[i][k];
matrix[i][k]=t;
}
}
else
{
for(int j=0;j<@@[n](1);j++) //垂直翻转,对每一列进行逆置
for(int i=0,k=m-1;@@[i<k](1);i++,k--)
{
int t;
t= matrix@@[[i][j]](1);
matrix@@[[i][j]](1)=matrix@@[[k][j]](1);
matrix@@[[k][j]](1)=t;
}
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n-1;j++)//输出前n-1个元素
{
printf("%d ",matrix[i][j]);
}
printf("%d\n",matrix[i][n-1]);//输出该行中第n个元素
}
return 0;
}







答案:
第1空:n

第2空:i<k

第3空:[i][j]

第4空:[i][j]

第5空:[k][j]

第6空:[k][j]

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。