C++ 二维数组4x4,对角线的乘积?

C++ 二维数组4x4,对角线的乘积?,c++,arrays,multidimensional-array,C++,Arrays,Multidimensional Array,我试图取4x4数组中所有对角线数的乘积。我知道如何获取数字并打印它们,但我不确定如何获取它们的乘积,如何让它计算8个数字的乘积 #include <iostream> using namespace std; for (int row = 0; row < 4; row++) { for (int column = 0; column < 4; column++) { if (row==column || row == 3 - column) {

我试图取4x4数组中所有对角线数的乘积。我知道如何获取数字并打印它们,但我不确定如何获取它们的乘积,如何让它计算8个数字的乘积

#include <iostream>
using namespace std;

for (int row = 0; row < 4; row++)
{
for (int column = 0; column < 4; column++)
{
    if (row==column || row == 3 - column)
    {
        double product = 1;
        product *= arr[row][column] 
        cout << product << ".";
    }
}
}
#包括
使用名称空间std;
用于(int行=0;行<4;行++)
{
for(int列=0;列<4;列++)
{
如果(行==列| |行==3-列)
{
双积=1;
产品*=arr[行][列]
cout注意:

  • 只有
    7个
    对角元素。您在矩阵中心计算元素两次
  • 为了了解对角线,您不需要迭代整个数组。正如您所观察到的,对角线有一个很好的属性
    row==column
    ,您只需要沿着对角线迭代
为了使事情更清楚、更容易,请分别计算两个对角线乘积:

double product = 1;
for (int row = 0; row < 4; row++) {
    product *= arr[row][row]
}
for (int row = 0; row < 4; row++) {
    product *= arr[row][4 - (row + 1)]
}
double乘积=1;
用于(int行=0;行<4;行++){
产品*=arr[行][行]
}
用于(int行=0;行<4;行++){
产品*=arr[行][4-(行+1)]
}

如果您一次考虑每一行中的两个条目,则还必须说明中间元素出现在两个对角线中,这使得代码不必要地混乱。

为什么在循环内定义变量<代码>产品< /代码>,这就是为什么存储在变量中的先前数据在超出范围时丢失的原因。

#include <iostream>
using namespace std;

double product = 1; // var product should be defined out of the loop

for (int row = 0; row < 4; row++)
{
for (int column = 0; column < 4; column++)
{
    if (row==column || row == 3 - column)
    {
        product *= arr[row][column];
    }
}
}

cout << product << ".";
#包括
使用名称空间std;
double product=1;//应在循环外定义var product
用于(int行=0;行<4;行++)
{
for(int列=0;列<4;列++)
{
如果(行==列| |行==3-列)
{
产品*=arr[行][列];
}
}
}

无法将
product
移出for循环?既然我用if语句定义了特定的数字,我如何从循环中获取对角线?只需将声明移到if语句中。仍然要在if语句中进行乘法。@kаССа,您有2个数组,比如说A和B,每个数组都是4x4数组,您要生成数组A的对角数与数组B的对角数的乘积,这就是你要找的吗?是的。我试着取数组A中的数的乘积,然后乘以数组B中的数的乘积。Nathan说的很有效,虽然在我运行的脚本中我看到了8个对角数,但我不知道怎么做有7个,因为他们似乎没有在中心交叉。