同学找我帮忙写的,要求:
矩阵相乘,纯C编写。
不能用C++这点让我十分郁闷啊^_^....
一共包含如下东西:
typedef struct _matrix2D matrix2D; //一个结构体类型matrix2D
![](/Images/OutliningIndicators/None.gif)
BOOL initMatrix(matrix2D* pm, int h, int w); //初始化pm为h×w的零矩阵
void delMatrix(matrix2D* pm); //矩阵的内部数据空间全部是动态分配的,所以退出之前一定要删除矩阵
int getData(matrix2D* pm, int x, int y); //返回矩阵pm,坐标为x、y的元素值
void setData(matrix2D* pm, int x,int y, int data); //将矩阵pm,坐标为x、y的元素值置为data
void setMatrix(matrix2D* lhs, matrix2D* rhs); //删除矩阵lhs原先的值,并深层拷贝为rhs
matrix2D addMatrix(matrix2D* lhs, matrix2D* rhs); //矩阵相加,返回一个新的矩阵
matrix2D mulMatrix(matrix2D* lhs, matrix2D* rhs); //矩阵相乘,返回一个新的矩阵
void printMatrix(matrix2D* pm); //格式化打印矩阵pm这是一个测试程序,简单相乘两个矩阵:
#include "matrix2d.h"
![](/Images/OutliningIndicators/None.gif)
int main()
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
{
int i,j;
matrix2D rhs;
matrix2D lhs;
matrix2D result;
![](/Images/OutliningIndicators/InBlock.gif)
initMatrix(&lhs, 11, 10);
initMatrix(&rhs, 10, 2);
![](/Images/OutliningIndicators/InBlock.gif)
//lhs矩阵设置元素值
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
for(i = 0; i<11; i++)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
for(j = 0; j<10; j++)
{
setData(&lhs, i, j, 1);
}
}
//rhs矩阵设置元素值
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
for(i = 0; i<10; i++)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
for(j = 0; j<2; j++)
{
setData(&rhs, i, j, i+1);
}
}
//矩阵相乘
result = mulMatrix(&lhs, &rhs);
//打印三个矩阵
printMatrix(&lhs);
printMatrix(&rhs);
printMatrix(&result);
//不用了,记得释放矩阵空间..
delMatrix(&lhs);
delMatrix(&rhs);
delMatrix(&result);
}这里是显示结果:
![](/images/cppblog_com/nj-blog/2767/t_martin.JPG)
点击
这里下载完整的源代码和运行程序。
posted on 2006-12-07 17:06
小山日志 阅读(1028)
评论(4) 编辑 收藏 引用 所属分类:
the others