您的位置:首页 > 其它

任意维矩阵相乘-C实现

2012-04-25 19:04 441 查看
// matrix.cpp : Defines the entry point for the console application.
// write by lhy
// http://blog.csdn.net/qq752923276/article/details/7505675 
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

struct Matrix
{
int** array;
int x;
int y;
};
void InitMatrix(Matrix &m,int x,int y,bool b_rand=true)
{
int i,j;

srand((unsigned)time(0));

m.x=x;
m.y=y;

m.array=(int**)malloc(sizeof(int)*x);
for(i=0;i<x;++i)
m.array[i]=(int*)malloc(sizeof(int)*y);

if(b_rand)
{
for (i=0;i<x;++i)
{
for (j=0;j<y;++j)
{
m.array[i][j]=rand()%100;
}
}
}
else
{
for (i=0;i<x;++i)
{
for (j=0;j<y;++j)
{
m.array[i][j]=0;
}
}
}
}
void DestroyMatrix(Matrix &m)
{
int i;
for (i=0;i<m.x;++i)
{
free(m.array[i]);
}
free(m.array);
}
void PrintMatrix(Matrix &m)
{
int i,j;
for (i=0;i<m.x;++i)
{
puts("");
for (j=0;j<m.y;++j)
{
printf("%d\t",m.array[i][j]);
}
}
puts("");
}
int VectorPointMul(int X,int Y,Matrix &m1,Matrix &m2)
{
int i,sum;
sum=0;
for (i=0;i<m1.y;++i)
{
sum+=(m1.array[X][i]*m2.array[i][Y]);
}
return sum;
}
bool MulMatrix(Matrix &out,Matrix &m1,Matrix &m2)
{
int i,j;
if (m1.y!=m2.x)
{
return false;
}
if (out.x!=m1.x||out.y!=m2.y)
{
return false;
}
for (i=0;i<out.x;++i)
{
for (j=0;j<out.y;++j)
{
out.array[i][j]=VectorPointMul(i,j,m1,m2);
}
}
return true;
}
int main(int argc, char* argv[])
{
Matrix m1,m2;

InitMatrix(m1,1,4);

puts("matrix1矩阵内容:");
PrintMatrix(m1);

InitMatrix(m2,4,4);
puts("matrix2矩阵内容:");
PrintMatrix(m2);

Matrix mproduct;
InitMatrix(mproduct,m1.x,m2.y,false);
if(MulMatrix(mproduct,m1,m2))
{
puts("矩阵相乘结果:");
PrintMatrix(mproduct);
}
else
{
puts("相乘矩阵非法");
}

DestroyMatrix(m1);
DestroyMatrix(m2);
DestroyMatrix(mproduct);

getchar();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: