C++ 矩阵乘法-C++; 无效幂(int a[][21],int n,int d){ int e[21][21],k,i,j,l; 如果(d==1){ 对于(i=1;i
这段代码C++ 矩阵乘法-C++; 无效幂(int a[][21],int n,int d){ int e[21][21],k,i,j,l; 如果(d==1){ 对于(i=1;i,c++,matrix,C++,Matrix,这段代码 void power(int a[][21], int n, int d) { int e[21][21], k, i, j, l; if (d == 1) { for (i = 1; i <= n; i++) { for (j = 1; j <= n; j++) cout << a[i][j] << " "; cout <<
void power(int a[][21], int n, int d) {
int e[21][21], k, i, j, l;
if (d == 1) {
for (i = 1; i <= n; i++) {
for (j = 1; j <= n; j++)
cout << a[i][j] << " ";
cout << endl;
}
} else {
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
e[i][j] = 0;
for (l = 1; l < d; l++)
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
for (k = 1; k <= n; k++)
e[i][j] = e[i][j] + (a[i][k] * a[k][j]);
for (i = 1; i <= n; i++) {
for (j = 1; j <= n; j++)
cout << e[i][j] << " ";
cout << endl;
}
}
}
在循环中:
e = a;
……等等
大致如下:
temp = e;
e = temp * a;
temp = e;
e = temp * a;
(i=0;i
{
对于(j=0;j
PS我使用了基于0
的索引来访问矩阵。我不确定您为什么使用基于1
的索引。“但我不知道如何修复它”很容易。你可以使用调试器,逐行检查代码,并检查值是如何变化的。如果你发现了值以意外方式变化的地方,你就抓住了逻辑错误的来源。这不是很好吗?为什么你在每个循环中都从索引1迭代?对于2之后的幂,你仍然只使用a
,而不是同时涉及e
的结果ῥεῖ's关于调试的建议;它要求您知道值将如何更改,因此您应该从计算(在纸上)如何继续开始。很可能,此练习将显示您的代码如何不使用以前的结果(如您所说)@LogicStuff…还有一个扩展:你为什么要用i@RaduGheorghiu来描述问题。“它不起作用”不是一个问题陈述。告诉我们预期的行为应该是什么。
temp = e;
e = temp * a;
temp = e;
e = temp * a;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
e[i][j] = a[i][j];
}
}
for (l = 1; l < d; l++)
{
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
temp[i][j] = e[i][j];
}
}
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
e[i][j] = 0;
for (k = 0; k < n; k++)
{
e[i][j] += (temp[i][k] * a[k][j]);
}
}
}
}