import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner W = new Scanner(System.in);
int m,n,p;
int i,j,k;
m= W.nextInt();
n=W.nextInt();
int[][] a=new int[m][n];//数组m行n列
for(i=0;i0;jW.nextInt();//输入数组a[][]
}
}
n=W.nextInt();
p=W.nextInt();
int b[][] = new int[n][p];
for(i=0;i0;jW.nextInt();
}
}
int[][] c=new int[m][p];//C的m行p列即A的行数B的列数
for(i=0;i0;j0;kA的列标,B的行标
{
c[i][j]+=a[i][k]*b[k][j];
}
System.out.print(c[i][j]+" ");
}
System.out.println();
}
}
}//我想把 c[i][j]+=a[i][k]*b[k][j];换成c[i][j]=a[i][k]*b[k][j]+a[i+1][k+1]*b[k+1][j+1];为什么非零返回了?求解惑,非常感谢
把 c[i][j]+=a[i][k]*b[k][j] 换成 c[i][j]=a[i][k]*b[k][j]+a[i+1][k+1]*b[k+1][j+1],可能会得到错误的结果,因为这样会使用到 a 和 b 数组中超出索引范围的元素,导致数组越界。如果需要使用两个元素的乘积来计算 c[i][j],可以尝试使用 (a[i][k]*b[k][j]) + (a[i+1][k+1]*b[k+1][j+1]) 的方式来计算。具体来说,将原来的计算方式:
c[i][j] += a[i][k] * b[k][j];
替换为:
c[i][j] = a[i][k] * b[k][j] + a[i+1][k+1] * b[k+1][j+1];
注意这里的下标 i+1、k+1、j+1 需要确保不超出数组范围。
将 c[i][j]+=a[i][k]*b[k][j]; 替换为 c[i][j]=a[i][k]*b[k][j]+a[i+1][k+1]*b[k+1][j+1]; 可能会导致非零返回,原因是在计算 c[i][j] 时,您正在将两个不同的乘积相加。原来的代码使用嵌套的循环来计算两个矩阵的乘积,并正确地将结果存储在 c 数组中。但是,新代码中,您正在计算两个不同的乘积并将它们相加,这不是矩阵乘法的正确定义,因此结果可能不是您所期望的。如果您想尝试使用不同的算法来计算矩阵乘积,请确保它是正确的,并且您正在使用正确的变量来存储结果。