用for循环在C++中打印矩阵二次对角线?
Posted
技术标签:
【中文标题】用for循环在C++中打印矩阵二次对角线?【英文标题】:Print matrix secondary diagonal in C++ with for loop? 【发布时间】:2017-12-24 10:54:42 【问题描述】:我有一个简单的程序,我想在其中打印矩阵次对角线中的所有元素 - 这些是数字 5、9、13、-21、12,但程序无法按预期工作。我做错了什么?
#include <iostream>
#define SIZE 5
int a[SIZE][SIZE]=
1,2,3,4,5,
6,7,8,9,10,
11,12,13,14,15,
100,-21,-70,345,77,
12,17,765,98,55
;
for(int i=0;i<5;i++)//The first index increases
for(int k=5;k>0;k--)//The second index decreases
cout<<a[i][k]<<endl;//Printing the element
【问题讨论】:
一些关于你的代码的cmets:如果你使用SIZE之类的东西,那么使用是一致的。它应该说for(int i=0;i<SIZE;...
。如果您稍后将 SIZE 更改为 4,您的 for 循环将迭代到错误的边界。此外,您应该始终使用缩进。而且我建议始终使用方括号,即使您只有一个命令 - 如果您稍后在忘记省略括号时添加另一个命令,事情就会变糟。
【参考方案1】:
不需要第二个for loop。你可以只用一个:
for (int i = 0; i < SIZE; i++)
std::cout << a[i][SIZE - i - 1] << ' ';
这样,您可以使用单个 for
循环来获得两个相反方向的索引。
【讨论】:
@Y.Ivanov 换句话说,对角线是一维的,因此迭代它只涉及一个循环。您不会尝试使用两个循环来迭代列。【参考方案2】:嗯,你做到了
for (k=5; k>0; k--)
但是没有a[0][5]
第一行的最后一个元素是a[0][4]
所以你的数组应该从 4 开始并下降到 0
for (k=4; k>=0; k--)
顺便说一句,只需 1 个循环即可完成。
对于第二条对角线的每个元素,索引之和为 4。
0+4=4
1+3=4
2+2=3
3+1=4
4+0=4
所以你可以写成a[i][4-i]
for(i=0; i<5; i++)
cout<<a[i][4-i]<<endl;
【讨论】:
【参考方案3】:尝试这样做:
for(int i=0; i<5; i++)
cout << a[i][4-i] << endl;
【讨论】:
为什么我的答案是第一个正确答案时我得到一个减号?以上是关于用for循环在C++中打印矩阵二次对角线?的主要内容,如果未能解决你的问题,请参考以下文章