#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define TRUE 1
#define FLASE 0
typedef struct MATRIX
{
int ** matrix;
int x;
int y;
}MATRIX;
int initMatrix(MATRIX *p,int x, int y); /*对初始化后的矩阵进行赋值操作。*/
int mulMatrix(MATRIX *result,MATRIX p1,MATRIX p2); /*进行矩阵乘法。*/
int newMatrix(MATRIX *p,int x,int y); /*初始化确定阶数的矩阵。*/
int freeMatrix(MATRIX *p);
int freeMatrix(MATRIX *p)
{
int **temp = NULL;
int i;
temp = p->matrix;
if(NULL == temp)
{
printf("释放空间失败.");
return FLASE;
}
for(i=0;i<(p->x);i++)
free(temp[i]);
free(temp);
p->matrix = NULL;
return TRUE;
}
int newMatrix(MATRIX *p,int x,int y)
{
int **temp = NULL;
int tmp = 0;
temp = (int **)calloc(sizeof(int *) , x);
if(temp != NULL)
{
for(tmp = 0; tmp < x; tmp++)
{
temp[tmp] = (int *)calloc(sizeof(int) , y);
if(temp[tmp] == NULL)
{
for(tmp-- ;tmp >= 0;tmp--)
free(temp[tmp]);
free(temp);
printf("初始化失败。");
return FLASE;
}
}
}
else
{
printf("初始化失败。");
return FLASE;
}
p->matrix = temp;
p->x = x;
p->y = y;
return TRUE;
}
int mulMatrix(MATRIX *result,MATRIX p1,MATRIX p2)
{
int i = 0,j = 0;
int k = 0;
int tmp = 0;
if(p1.y != p2.x)
{
printf("%dx%d与%dx%d矩阵不能相乘。\n", p1.x, p1.y, p2.x, p2.y);
return FLASE;
}
newMatrix(result,p1.x,p2.y); /* n*m 与 m*n 矩阵相乘结果是 n*n。*/
result->x = p1.x;
result->y = p2.y;
for(i=0;i<p1.x;i++)
{
for(j=0;j<p2.y;j++)
{
for(k=0;k<p1.y;k++)
{
(result->matrix)[i][j] += p1.matrix[i][k] * p2.matrix[k][j];
}
}
}
for(i=0;i<(result->x);i++)
{
for(j=0;j<result->y;j++)
printf("%-6d ",(result->matrix)[i][j]);
printf("\n");
}
return TRUE;
}
int initMatrix(MATRIX *p,int x,int y)
{
int **temp = NULL;
int i,j;
newMatrix(p,x,y);
temp = p->matrix;
for(i=0;i<x;i++)
{
for(j=0;j<y;j++)
{
printf("请输入下标为(%d %d)的数:",i+1,j+1);
scanf("%d",&temp[i][j]);
}
}
return TRUE;
}
void main()
{
MATRIX matrix1;
MATRIX matrix2;
MATRIX matrix3;
int x,y;
int OK = TRUE;
printf("请输入第一个矩阵的阶数中间用空格隔开如(3 4):");
scanf("%d%d",&x,&y);
initMatrix(&matrix1,x,y);
printf("请输入第二个矩阵的阶数中间用空格隔开:");
scanf("%d%d",&x,&y);
initMatrix(&matrix2,x,y);
printf("计算的结果如下:\n");
OK = mulMatrix(&matrix3,matrix1,matrix2);
freeMatrix(&matrix1);
freeMatrix(&matrix2);
if(TRUE == OK) /*如果matrix3申请了空间就需要释放,如果没有则不需要*/
freeMatrix(&matrix3);
}
在VC运行下可通过。