【问题标题】:Calculate a 4 by 4 matrix and display sum of all elements?计算 4 x 4 矩阵并显示所有元素的总和?
【发布时间】:2016-12-18 06:21:21
【问题描述】:

我正在尝试编写一个 4 x 4 矩阵并对所有矩阵求和。这是我用 C++ 编写的代码。

#include <iostream>

using namespace std;

int main()
{
    const int size = 4;
    int sum, i, j;
    int SumMatrix[4][4];

    for (int i = 0; i < 4; i++)
    {
        cout << "Enter a  by 4 matrix row by row: \n";
        cin >> i;
        for (int j = 0; j < 4; j++)
        {
            cout << "\n";
            cin >> j;

        }
    }
    sum += SumMatrix[i][j];
    cout << "Sum of the matrix is" << sum << endl;

    return 0;
}

当我编译代码时,它显示它没有错误。但是当我执行它时, it gave me this error.

请帮忙。我是一个菜鸟,我被困住了。我不知道有任何其他方法可以解决这个问题。

【问题讨论】:

  • 你希望sum += SumMatrix[i][j]; 做什么?
  • 1) 更改cin &gt;&gt; j;,不要使用与for循环相同的变量。 2)将你读到的值放入SumMatrix。 3) 在 (2) 之后的循环内移动 sum += SumMatrix[i][j];。顺便说一句,您可能应该删除这个cin &gt;&gt; i; 并在循环之前移动cout &lt;&lt; "Enter a by 4 matrix row by row: \n";
  • 还有一件事将 int sum 更改为 int sum = 0;

标签: c++ arrays for-loop matrix multidimensional-array


【解决方案1】:

当我编译代码时,它显示它没有错误。但是当我执行它时,它给了我这个错误。

那是因为你的程序没有syntax errors,但是遇到了runtime error(s)

现在,关注外循环 (for(i...))。你已经写好了声明

cin >> i;

注意,i 是循环控制变量。因此,当您输入第一行的第一个元素时,它实际上进入了i,因此循环完全搞砸了。 (您可能会在此处收到array index out of bounds 错误。)所以您需要做的就是将整个嵌套循环结构修改为:

for(i = 0; i<4; i++){
    for(j=0; j<4; j++){
        cin >> SumMatrix[i][j];
        sum += SumMatrix[i][j]; //adding up the elements
   }
}
/*the array now has all the elements
  and sum stores the value of sum of all elements*/

基本上,您试图将元素读入数组,但不熟悉正确的语法。 ij不直接引用第i行第j列的元素;访问第 i 行和第 j 列的数组元素的正确语法是SumMatrix[i][j]

另外,请注意声明

sum += SumMatrix[i][j];

如您的代码中所写,在循环之外,仅将数组的最后一个元素添加到总和中。为了得到所有元素的总和,你必须像我上面展示的那样在一个循环中进行。

【讨论】:

    【解决方案2】:

    内循环中的这条语句

    cin >> j;
    

    没有意义。您必须输入矩阵的元素而不是更改索引。

    还有这个说法

    sum += SumMatrix[i][j];
    

    必须包含在循环中。

    您必须将变量 sum 初始化为 0。

    并且变量ij也没有初始化

    int sum, i, j;
             ^^^^^
    

    所以这个说法

    sum += SumMatrix[i][j];
    

    导致程序的未定义行为。

    您应该删除它们的声明,因为它们应该在循环中声明和使用。

    程序可以如下所示

    #include <iostream>
    
    int main() 
    {
        const size_t N = 4;
        int matrix[N][N] = {};
    
        std::cout << "Enter a " << N << " by " << N << " matrix row by row: \n";
    
        for ( size_t i = 0; i < N; i++ )
        {
            std::cout << "Enter row " << i << ": ";
            for ( size_t j = 0; j < N; j++ ) std::cin >> matrix[i][j];
        }
    
        long long int sum = 0;
    
        for ( size_t i = 0; i < N; i++ )
        {
            for ( size_t j = 0; j < N; j++ ) sum += matrix[i][j];
        }
    
        std::cout << "Sum of the matrix is " << sum << std::endl;
    
        return 0;
    }
    

    它的输出可能看起来像

    Enter a 4 by 4 matrix row by row: 
    Enter row 0: 1 2 3 4
    Enter row 1: 5 6 7 8
    Enter row 2: 9 10 11 12
    Enter row 3: 13 14 15 16
    Sum of the matrix is 136
    

    要计算总和,您还可以使用标准算法std::accumulate,而每行又使用std::accumulate

    【讨论】:

    • 为什么是 4 个循环?只需计算前 2 个循环中的 sum
    • @DimChtz 我尽量不显示错误的代码。有四个循环,程序的逻辑是透明的,程序本身可以拆分成函数,也可以使用标准算法。
    猜你喜欢
    • 2011-01-17
    • 1970-01-01
    • 2018-09-15
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2021-06-30
    • 2011-04-11
    相关资源
    最近更新 更多