数组a,b分别是n行m列和m行n列二维数组,编程求a*b放入c数组中。

如题所述

第1个回答  2015-12-31
这是 b[j][k] * c[k][i] = a[j][i] 的程序。
你可以修改成 a*b=c 或 b*a=c; (矩阵乘法交换律不成立!)
#include<stdio.h>
/*---------------------
b[j][k] * c[k][i] = a[j][i]
*---------------------*/
void matrix(int **b,int **c, int **a, int nx, int ny, int nk)
{
int i,j,k;
for (j=0;j<ny;j++)for(i=0;i<nx;i++)a[j][i]= 0;
for(j=0;j<ny;j++){
for(i=0;i<nx;i++){
for(k=0;k<nk;k++)a[j][i]+= b[j][k]*c[k][i];
};
};
}

int main(){
int i,j,k,tmp;
int b_row,b_col;
int c_row,c_col;
int a_row,a_col;
int **b,**c,**a;
printf("please enter m n of matrix B\n");
scanf("%d %d",&b_row,&b_col);
c_row = b_col; // n
c_col = b_row; // m
a_row = b_row;
a_col = c_col;
a = (int **) malloc(sizeof(int *) * a_row);
for (j=0;j<a_row;j++){
a[j] = (int *) malloc(sizeof(int) * a_col);
}
b = (int **) malloc(sizeof(int *) * b_row);
for (j=0;j<b_row;j++){
b[j] = (int *) malloc(sizeof(int) * b_col);
}
c = (int **) malloc(sizeof(int *) * c_row);
for (j=0;j<c_row;j++){
c[j] = (int *) malloc(sizeof(int) * c_col);
}
if (!c[c_row-1]) {
printf("no enought memory\n");exit(0);
}

printf("Please input int matrix b[%d][%d]\n",b_row,b_col);
for (j=0;j<b_row;j++)
for (i=0;i<b_col;i++){
scanf("%d",&tmp);
b[j][i] = tmp;
}
printf("Please input int matrix a[%d][%d]\n",c_row,c_col);
for (j=0;j<c_row;j++)
for (i=0;i<c_col;i++){
scanf("%d",&tmp);
c[j][i] = tmp;
}
matrix( b ,c,a, a_col, a_row, b_col);
printf("results:\n");
for(j=0;j<a_row;j++)
{
for (i=0;i<a_col;i++) printf("%d ",a[j][i]);
printf("\n");
};

for(i=0;i<a_row;i++) free((void *)a[i]); free((void *)a);
for(i=0;i<b_row;i++) free((void *)b[i]); free((void *)b);
for(i=0;i<c_row;i++) free((void *)c[i]); free((void *)c);

return 0;
}本回答被提问者和网友采纳
相似回答