C语言怎么求矩阵的乘积呢?

Python025

C语言怎么求矩阵的乘积呢?,第1张

语言只提供+,-,*,/等低级运算功能,高级的都必须代码实现,包括次方开放运算,都是编写代码实现。你学过矩阵乘法,这就很容易,你需要定义一个结构体,作为矩阵。。。。

矩阵很简单,行数,列数,元素。

typedef struct {

uint r,c

float *d

int size

}matrix;

分别是行数,列数,数据指针,和数据最大长度。数据最好用指针不用数组,是因为增加灵活性,你只需要动态申请内存即可让你的矩阵大小可变,数组长度不可变。最后一个参数代表内存长度,最好是要有,方便你重新定义数组时看内存够不够,不够可以realloc,没有的话你就不知道够不够(5*4的矩阵,乘以 4*5 矩阵必然变成5*5矩阵,赋值到新矩阵结构体里,如果还是20个单位,显然装不下,必须realloc,所以该参数必须有)。。。

你只要实现个函数int mul(matrix *m1,*m2,*m3)即可,m1,m2分别为左右 矩阵,m3为结果。

按照运算法则,你必须完成两件事,判断m1,m2是否可以相乘,不可以相乘返回一个错误(比如返回-1),(3*3和4*4矩阵不能相乘),如果可以那就先让m3.r=m1.r,m3.c=m2.c

m3.d[i][j]=0

for(k=0k<m1.ck++)

m3.d[i][j]+=m1.d[i][k]*m2.d[k][j]

这你就能到到m3的一个元素,那你只要求出所有的元素就得到新矩阵了。

不过因为是C语言,你要考虑内存,m3也许内存不够长,你必须要做一下内存长度判断,不够长要申请,否则就报错没法用了。。。所以size这个成员也是必须的。。

不过话说回来,如果是用C++,只要你写一个矩阵类,重载运算符 * ,你就可以用

m3=m1*m2 这样运算,书写更方便,但C语言没这好事。

思路:double类型的范围:

-1.7*10(-308)~1.7*10(308),如果两个数的乘积不超过这样的精度,可以直接使用*符号进行运算。

参考代码:

#include<stdio.h>

int main()

{

double a,b

scanf("%lf%lf",&a,&b)

printf("%.2lf",a*b)//保留两位小数

return 0

}

/*

运行结果:

1205 5985

7211925.00

*/