【发布时间】:2016-02-03 03:32:49
【问题描述】:
我正在使用 Cygwin、Windows Vista、Norton 防病毒软件(以前有人问过我这个问题)。我之前问过一个关于奇怪的 C++ 行为的问题,没有人能回答。这是另一个。简单的矩阵乘法练习。下面这个表格给出了奇怪(和错误)的结果:
#include <iostream>
#include <string>
#include<cmath>
using namespace std;
int main(int argc, char* argv[])
{
int A[3][3]={{1,5,0},{7,1,2},{0,0,1}};
int B[3][3]={{-2,0,1},{1,0,0},{4,1,0}};
int D[3][3];
for (int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
for (int k=0;k<3;k++)
{
D[i][j]+=A[i][k]*B[k][j];
}
}
}
for (int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
cout<<D[i][j]<<"\n";
}}
return 0;
}
但是一个非常小的变化给出了正确的结果:(我所做的只是将初始化的矩阵移到 main() 之外)。
#include <iostream>
#include <string>
#include<cmath>
using namespace std;
int A[3][3]={{1,5,0},{7,1,2},{0,0,1}};
int B[3][3]={{-2,0,1},{1,0,0},{4,1,0}};
int D[3][3];
int main(int argc, char* argv[])
{
for (int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
for (int k=0;k<3;k++)
{
D[i][j]+=A[i][k]*B[k][j];
}
}
}
for (int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
cout<<D[i][j]<<"\n";
}}
return 0;
}
【问题讨论】:
-
什么是“奇怪(和错误)的结果”?什么是“正确结果”?
-
我同意。错误的结果是非常大的数字,正确的结果是更“合理”的数字,我并不希望如此。不管问题在下面得到解答。