C语言 给定2个矩阵A和B,请计算A * B.(题目测试数据会确保A*B有意义)

输入描述:输入数据首先给出4个正整数A1,A2,B1,B2(1<=A1,A2,B1,B2<=10),然后是A1行A2列的整数,再然后是B1行B2列的整数,分别表示矩阵A和B.
输出描述:请计算并输出矩阵A和B相乘的结果(结果的每个元素都在32位整数范围之内),输入和输出格式参见样例.
输入样例:
2 3 3 2
1 2 0
2 0 4
1 4
0 2
3 0
输出样例:
1 8
14 8

这是我编的程序,反正是错的,求大神指导一下哪里出错了,我知道不能用变量定义数组长度,但真心不知道该如何表示数组长度了。。

#include<stdio.h>
#include<stdlib.h>
main(){
int A1,A2,B1,B2;
int **a,**b,**c;
int i,j,x,y,z;
scanf("%d %d %d %d",&A1,&A2,&B1,&B2);
a = (int **) malloc(sizeof(int *) * A1);
for (j=0;j<A1;j++){
a[j] = (int *) malloc(sizeof(int) * A2);
}
b = (int **) malloc(sizeof(int *) * B1);
for (j=0;j<B1;j++){
b[j] = (int *) malloc(sizeof(int) * B2);
}
c = (int **) malloc(sizeof(int *) * A1);
for (j=0;j<A1;j++){
c[j] = (int *) malloc(sizeof(int) * B2);
}

for (i=0;i<A1;i++) for(j=0;j<A2;j++) scanf("%d",&a[i][j]);
for (i=0;i<B1;i++) for(j=0;j<B2;j++) scanf("%d",&b[i][j]);

for (i=0;i<A1;i++)
{ x=i;
for (j=0;j<B2;j++)
{
y=j; c[i][j]=0;
for (z=0;z<A2;z++) {
c[i][j] += a[x][z] * b[z][y];
};
}
};

for (i=0;i<A1;i++) {
for (j=0;j<B2;j++) printf("%d ",c[i][j]);
printf("\n");
}
return 0;
}
输入输出:
2 3 3 2
1 2 0
2 0 4
1 4
0 2
3 0
1 8
14 8
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答