Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 矩阵乘法-C++; 无效幂(int a[][21],int n,int d){ int e[21][21],k,i,j,l; 如果(d==1){ 对于(i=1;i_C++_Matrix - Fatal编程技术网

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]);
         }
      }
   }
}