C++二维数组行列逆序输出:循环实现及动态适配问询
二维数组逆序输出:循环实现与扩展性优化
需求说明
将指定数量的整数读入二维整型数组,随后按行和列的逆序输出该数组,要求每个整数后输出一个空格(包括每行末尾的整数)。
示例输入
5 7 3 6 4 3 5 6 9 5 2 8
示例输出
8 2 5 9 6 5 3 4 6 3 7 5
当前硬编码实现
目前通过硬编码数组下标完成逆序输出,代码如下:
#include <iostream> using namespace std; int main() { const int ROWS = 4; const int COLS = 3; int arr[ROWS][COLS]; int i, j; for(i = 0; i < ROWS; i++){ for(j = 0; j < COLS; j++){ cin>>arr[i][j]; } } cout << arr[3][2] << " " << arr[3][1] << " " << arr[3][0] << " " << endl; cout << arr[2][2] << " " << arr[2][1] << " " << arr[2][0] << " "<< endl; cout << arr[1][2] << " " << arr[1][1] << " " << arr[1][0] << " "<< endl; cout << arr[0][2] << " " << arr[0][1] << " " << arr[0][0] << " "<< endl; return 0; }
问题解答
1. 能否使用for循环实现二维数组的逆序输出?
完全可以。只需调整循环的起始与终止条件,让行从最后一行遍历到第一行,列从最后一列遍历到第一列即可。
修改后的代码如下:
#include <iostream> using namespace std; int main() { const int ROWS = 4; const int COLS = 3; int arr[ROWS][COLS]; int i, j; // 读取数组 for(i = 0; i < ROWS; i++){ for(j = 0; j < COLS; j++){ cin >> arr[i][j]; } } // 逆序输出:行逆序+列逆序 for(i = ROWS - 1; i >= 0; i--){ for(j = COLS - 1; j >= 0; j--){ cout << arr[i][j] << " "; } cout << endl; // 每行结束换行 } return 0; }
逻辑说明:
- 行循环
i从ROWS-1(最后一行下标)开始递减到0,实现行的逆序遍历 - 列循环
j从COLS-1(最后一列下标)开始递减到0,实现列的逆序遍历 - 每个元素输出后添加空格,每行元素输出完成后换行,完全符合需求
2. 修改行列数后,程序能否正确输出对应的数组内容?
可以。代码中使用ROWS和COLS常量定义数组大小、控制循环边界,所有遍历逻辑都依赖这两个常量而非硬编码数字。
比如需要改为5行4列时,只需修改const int ROWS = 5;和const int COLS = 4;,程序就能自动适配新的数组大小,完成读取和逆序输出,无需修改循环逻辑。
内容的提问来源于stack exchange,提问作者Cris
相关产品推荐
相关产品推荐

