我正在尝试编码一个4乘4的矩阵并对所有矩阵求和。这是我用c ++编写的代码。
<system.serviceModel>
当我编译代码时,它表明它没有错误。但是当我执行它时, it gave me this error.
请帮忙。我是个菜鸟,我被困住了。我不知道任何其他解决方案。
答案 0 :(得分: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];
在代码中写的,它位于循环之外,只会将数组的最后一个元素添加到总和中。为了获得所有元素的总和,你必须在循环中完成它,如上所示。
答案 1 :(得分:-1)
内部循环中的此语句
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
。