到目前为止,我一直在尝试使多维矩阵乘法的代码工作不大成功。
该代码适用于相同维度的矩阵之间的任何给定乘法,但是当我运行2x3 * 3x4之类的代码时,它仅将所得值的一半存储在结果矩阵中,因此我经历了程序的多次迭代,包括从头重写或从以前的程序进行重写,该操作会执行相同的操作,但没有指针符号且无法进行工作。它是用于分配的,因此我有使用指针表示法而不使用动态内存的限制。即使浏览了文档和示例,我也不确定在这里缺少什么。你们能给我一些建议吗?
#include<stdio.h>
int main(){
int i, j, k, l, n1=1, n2=1, n3=1, n4=1, m1;
int p1[11][11], p2[11][11], p3[11][11];
printf("\n\nInput first matrix number of rows and columns : \n");
scanf("%d %d", &n1, &n2);
printf("\n\nInput second matrix number of rows and columns : \n");
scanf("%d %d", &n3, &n4);
printf("\n\nInput your values for the first matrix: \n");
for(i=0; i<n1; i++){
for(j=0; j<n2; j++){
printf("\n Input element of Row [%d] and Colunm[%d] = ", i+1, j+1);
scanf("%d", (*(p1+i)+j));
}
}
printf("\n\nInput your values for the second matrix : \n");
for(i=0; i<n3; i++){
for(j=0; j<n4; j++){
printf("\n Input element of Row [%d] and Colunm[%d] = ", i+1, j+1);
scanf("%d", (*(p2+i)+j));
}
}
printf("\n\n\n");
for(i=0;i<n1;i++){
for(j=0;j<n4;j++){
m1=0;
for(k=0;k<n3;k++){
m1+=(*(*(p1 + i) + k)) * (*(*(p2 + k) + j));
}
*(*(p3+j)+i)=m1;
printf("[%d][%d][%d][%d] ", *(*(p1+i)+j), *(*(p2+i)+j), *(*(p3+i)+j), m1);
}
}
printf("\n\n");
printf("\n\nThe result is: \n\n\n\t");
for(i=0; i<n1; i++){
printf("\n\t");
for(j=0; j<n4; j++){
printf("[%d]\t", *(*(p3+i)+j));
}
printf("\t\n\n\n\t");
}
printf("\n");
system("pause");
}
我没有收到消息错误,但是对于给定的2x3 * 3x4尺寸的矩阵乘法,结果是:
12 12 0 0
12 12 9 2508544
或类似,但预期输出是:
12 12 12 12
12 12 12 12
同样适用于任何具有不同维数的矩阵,但是平方矩阵很好。
答案 0 :(得分:1)
在您的计算循环中,您首先使用内部for循环变量寻址GreetButton
。
在打印循环中,您使用*(*(p3 + j) + i)
,首先使用外部for循环变量。
因此,您的打印循环将在结果矩阵的转置上打印。