C与指针 五 矩阵相乘

7 篇文章 0 订阅
6 篇文章 0 订阅

        如果A是个x行y列的矩阵,B是个y行Z列的矩阵,把A和B相乘,其结果将是另一个\行2列的矩阵0。这个矩阵的每个元素是由下面的公式决定的:


        结果矩阵中14这个值是通过2X-2加上-6X-3得到的。编写一个函数,用于执行两个矩阵的乘法。函数的原型应该如下:

void matrix_multiply( int *ml, int *m2, int *r,int x, int y, int z );

        m1是一个x行y列的矩阵,m2是一个y行Z列的矩阵。这两个矩阵应该相乘,结果存储于r中,它是一个x行z列的矩阵。记住,你应该对公式作些修改。

//矩阵相乘 
#include<stdio.h>


void matrix_multiply1(int (*m1),int (*m2),int (*r),int x,int y,int z);
void matrix_multiply2(int (*m1),int (*m2),int (*r),int x,int y,int z);
int main(void)
{

int m1[3][3]={

{

         2,-6,1 

},

{

3,5,2

},

{

1,-1,3 

}

};

int m2[3][4]={

{

4,-2,-4,-5

},

{

-7,-3,6,7

}

{

-7,-3,6,7

}

};

int r[3][4]={

0

};

int q[3][4],r[3][4];

matrix_multiply1(m1,m2,q,3,3,4);

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

{

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

{

printf("%-10d ",q[t][j]);

}

printf("\n");

}

printf("\n"); 

matrix_multiply2(m1,m2,r,3,3,4);

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

{

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

{

printf("%-10d ",r[t][j]);

}

printf("\n");

return 0;

}
void matrix_multiply1(int (*m1),int (*m2),int (*r),int x,int y,int z)
{

int num=0,a,b;

int col=0,raw=0;

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

{

raw=i*y;//行列 

int rawcol=i*z;   

for(int t=0;t<z;t++)

{

num=0; 

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

{

col=j*z;//行

a=*(m1+raw+j);

b=*(m2+col+t);

num+=a*b;

}

*(r+rawcol+t)=num;

}

}


}
void matrix_multiply2(int (*m1),int (*m2),int (*r),int x,int y,int z)
{

register int *m1p;

register int *m2p;

register int k;

int row,column;

for(row=0;row<x;row++)

{    

for(column=0;column<z;column++)

{

m1p=m1+row*y;

m2p=m2+column;

for(k=0;k<y;k++)

{

*r+=*m1p * *m2p;

m1p+=1;

m2p+=z; 

}

r++;

}

}

输出结果:



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值