没有细看,是不是维数问题。
给你一个程序,计算:
a[a_row][a_col] * b[b_row][b_col]=c[a_row][b_col]
注意 b_row==a_col
DEBUG 为 1 输出中间结果,方便查错。 可以改为 0。
动态分配数组。
含输入例子。
#include<stdio.h>
#include <stdlib.h>
#define DEBUG 1
void show_array(int *a, int row,int col);
/*---------------------
c[j]][i] = a[j][k] * b[k][i] = c[j][i]
a[c_row][nk]: a[3][2]={1,2,3,4,5,6}
b[nk][c_col]: b[2][3]={1,2,3,4,5,6}
c[c_row][c_col]: c[3][3]={9,12,15,19,26,33,29,40,51}
*---------------------*/
void matrix2(int *a,int *b, int *c, int a_row, int b_col, int b_row)
{
int i,j,k;
int a_col,c_row,c_col;
a_col=b_row; c_row=a_row; c_col=b_col;
if (DEBUG==1){
printf("A[%d][%d]:\n",a_row,a_col);
show_array(a,a_row,a_col);
printf("B[%d][%d]:\n",b_row,c_col);
show_array(b,b_row,b_col);
};
for(j=0;j<c_row;j++){
for(i=0;i<c_col;i++){
c[j*c_col+i]=0;
for(k=0;k<a_col;k++) c[j*c_col+i]+= a[j*a_col+k] * b[k*b_col+i];
};
};
}
main()
{
int i,j,k,tmp;
int a_row,a_col,b_row,b_col,c_row,c_col;
int *a,*b,*c;
printf("please enter a_row a_col of matrix_A: 3 2\n");
scanf("%d %d",&a_row,&a_col);
b_row = a_col;
printf("please enter b_col of matrix_B: 3\n");
scanf("%d",&b_col);
c_row = a_row;
c_col = b_col;
a = (int *) malloc(sizeof(int *) * a_row * a_col);
b = (int *) malloc(sizeof(int *) * b_row * b_col);
c = (int *) malloc(sizeof(int *) * c_row * c_col);
if (!c) { printf("no enought memory for alloc\n");return 0; }
printf("Please input int matrix a[%d][%d] 1 2 3 4 5 6\n",a_row,a_col);
for (j=0;j<a_row;j++)
for (i=0;i<a_col;i++){
scanf("%d",&tmp);
a[j*a_col+i] = tmp;
}
printf("Please input int matrix b[%d][%d] 1 2 3 4 5 6\n",b_row,b_col);
for (j=0;j<b_row;j++)
for (i=0;i<b_col;i++){
scanf("%d",&tmp);
b[j*b_col+i] = tmp;
}
if (DEBUG==1){
printf("A[%d][%d]:\n",a_row,a_col);
show_array(a,a_row,a_col);
printf("B[%d][%d]:\n",b_row,c_col);
show_array(b,b_row,b_col);
};
matrix2( a,b,c, a_row, b_col, b_row);
show_array(c,c_row,c_col);
free(a);free(b);free(c);
return 0;
}
void show_array(int *a, int row,int col)
{
int i,j;
for (j=0;j<row;j++){
for (i=0;i<col;i++) printf("%d ",a[j*col+i]);
printf("\n");
}
printf("--------------------\n");
}
温馨提示:答案为网友推荐,仅供参考