同學找我幫忙寫的,要求:
矩陣相乘,純C編寫。
不能用C++這點讓我十分郁悶啊^_^....
一共包含如下東西:
typedef?struct?_matrix2D?matrix2D;?//一個結構體類型matrix2D

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"

int?main()


{
????int?i,j;
????matrix2D??rhs;
????matrix2D??lhs;
????matrix2D??result;

????initMatrix(&lhs,?11,?10);
????initMatrix(&rhs,?10,?2);

????????//lhs矩陣設置元素值

????for(i?=?0;?i<11;?i++)
{

????????for(j?=?0;?j<10;?j++)
{
????????????setData(&lhs,?i,?j,?1);
????????}
????}
????????//rhs矩陣設置元素值

????for(i?=?0;?i<10;?i++)
{

????????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);
}這里是顯示結果:

點擊
這里下載完整的源代碼和運行程序。
posted on 2006-12-07 17:06
小山日志 閱讀(1086)
評論(4) 編輯 收藏 引用 所屬分類:
the others