C语言矩阵相乘问题, 为什么结果不对呢

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int matrix(int **MatrixA, int **MatrixB, int **MatrixC, int N)
{

int i,j,k;

MatrixA = (int **) malloc(sizeof(int *) * N);
MatrixB = (int **) malloc(sizeof(int *) * N);
MatrixC = (int **) malloc(sizeof(int *) * N);
for (j=0;j<N;j++)
{
MatrixA[j] = (int *) malloc(sizeof(int) * N);
MatrixB[j] = (int *) malloc(sizeof(int) * N);
MatrixC[j] = (int *) malloc(sizeof(int) * N);
}

if (N < 1)
{
return -1;
}
if ((NULL == MatrixA) || (*MatrixA == NULL))
{
return -1;
}
if ((NULL == MatrixB) || (*MatrixB == NULL))
{
return -1;
}
if ((NULL == MatrixC) || (*MatrixC == NULL))
{
return -1;
}

for(i=0;i<N;i++)
{
for(k=0;k<N;k++)
{
MatrixC[i][k]=0;

for(j=0;j<N;j++)
{
MatrixC[i][k]+=MatrixA[i][j]*MatrixB[j][k];

}

}

}

return 0;

}
void main()
{
int A[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int C[3][3], ExpectC[3][3] = {{30, 36, 42}, {66, 81, 96}, {102, 126, 150}};
int i,j;
matrix((int**)A, (int**)A, (int**)C, 3);
for( i = 0; i < 3; ++i)
{
for( j = 0; j < 3; ++j)
{
printf("%d,",A[i][j]);
printf("%d,",C[i][j]);

}
}
}

第1个回答  2015-04-10
有什么错误?追问

输出来的矩阵c,跟预期的ExpectC[3][3],完全不同,貌似就是分配内存有问题,不分配又会报错

追答#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int matrix(int (*MatrixA)[3], int (*MatrixB)[3], int (*MatrixC)[3])
{
int i,j,k;

for(i=0;i<3;i++)
{
for(k=0;k<3;k++)
{  
MatrixC[i][k]=0;

for(j=0;j<3;j++)
{
MatrixC[i][k]+=MatrixA[i][j]*MatrixB[j][k];
}
}
}
return 0;
}
void main()
{
int A[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int C[3][3], ExpectC[3][3] = {{30, 36, 42}, {66, 81, 96}, {102, 126, 150}};
int i,j;
matrix(A, A, C);
    for( i = 0; i < 3; ++i)     
    {    
        for( j = 0; j < 3; ++j)     
        {   
printf("%d,",C[i][j]);
}
printf("\n");
}
}

追问

谢谢,但我这个是软件考试,主要考察matrix函数的编写,main函数可以随便改,matrix这个函数的接口不能随便改动

追答#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int matrix(int **MatrixA, int **MatrixB, int **MatrixC, int N)
{
int i,j,k;
for(i=0;i<N;i++)
{
for(k=0;k<N;k++)
{  
MatrixC[i][k]=0;

for(j=0;j<N;j++)
{
MatrixC[i][k]+=MatrixA[i][j]*MatrixB[j][k];
}
}
}
return 0;
}
void main()
{
int A[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int C[3][3], ExpectC[3][3] = {{30, 36, 42}, {66, 81, 96}, {102, 126, 150}};
int i,j;
int *pa[3], *pc[3];
for( i=0;i<3;i++ )
{
pa[i]=A[i];
pc[i]=C[i];
}
matrix(pa,pa,pc, 3);
    for( i = 0; i < 3; ++i)     
    {    
        for( j = 0; j < 3; ++j)     
        {   
printf("%d,",C[i][j]);
}
printf("\n");
}
}

本回答被提问者采纳
相似回答