### 实现矩阵乘法运算

矩阵在实时图像处理、大规模科学与工程计算领域经常会应用。我们在大学的数学课程中学过矩阵的各种计算。本题目要求实现两个矩阵的乘法运算。运算方式是第一个矩阵的第一行与第二个矩阵的每一列一一计算，得出第一行数据，将第一个矩阵的第 2 行与第二个矩阵的每一列一一计算，得出第 2 行数据…。这样就实现了矩阵乘法运算。

答案

void MulArray(int nArray1[], int nRows, int nCols, int nArray2[], int nRetArray[])

{

for(int i=0; i<nRows; i++) //遍历行

{

for(int n=0; n<nCols; n++) //遍历列

{

int nData = 0;

for(int j=0; j<nCols; j++) //遍历列

{

nData += nArray1[i*nCols+j] * nArray2[j*nCols + n]; //矩阵乘法计算

}

nRetArray[i*nCols + n] = nData; //返回结果

}

}

}

int main(int argc, char* argv[])

{

int *nArray1 = new int[3*3];

int *nArray2 = new int[3*3];

int *nRetArray = new int[3*3];

for(int n=0; n<9; n++) //初始化矩阵数据

nArray1[n] = 9 - n;

cout << "矩阵 1:" << endl;

for(int i=0; i<3; i++)

{

for(int j=0; j<3; j++)

cout << nArray1[i*3+j] << " " ;

cout << endl;

}

for(int m=0; m<9; m++) //初始化矩阵数据

nArray2[m] = m;

cout << "矩阵 2:" << endl;

for( i=0; i<3; i++)

{

for(int j=0; j<3; j++)

cout << nArray2[i*3+j] << " " ;

cout << endl;

}

cout << "矩阵乘法" << endl;

MulArray(nArray1, 3, 3, nArray2, nRetArray); //矩阵乘法计算

for(i=0; i<3; i++)

{

for(int j=0; j<3; j++)

cout << nRetArray[i*3+j] << " " ;

cout << endl;

}

delete []nArray1; //释放堆空间

delete []nArray2;

delete []nRetArray;

return 0;

}

运行效果如图 1 所示。

图 1 矩阵乘法