我正试图编码一个4 × 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;
}
当我编译代码时,它显示没有错误。但是当我执行它的时候,它给了我这个错误。
请帮助。我是个新手,我被困住了。我不知道还有什么别的方法可以解决这个问题。
当我编译代码时,它显示没有错误。但是当我执行它的时候,它给了我这个错误。
这是因为你的程序没有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*/
基本上,您试图将元素读入数组,但不熟悉正确的语法。i
和j
不直接引用第i行和第j列的元素;访问第i行第j列数组元素的正确语法是SumMatrix[i][j]
。
另外,注意语句
sum += SumMatrix[i][j];
代码中所写的在循环之外,只将数组的最后一个元素添加到总和中。为了获得所有元素的和,您必须像上面所示的那样在循环中执行。
内循环中的语句
cin >> j;
没有意义。您必须输入矩阵的元素,而不是更改索引。
还有这个语句
sum += SumMatrix[i][j];
必须用循环符括起来。
你必须初始化变量sum
为0。
变量i
和j
也没有初始化
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
来计算每一行。