网站建设资讯

NEWS

网站建设资讯

c语言关于矩阵乘积的函数,c语言中乘积函数

用c语言实现两个矩阵相乘怎么做?

1、程序运行输入数据时,第一行为A矩阵的行列数和B矩阵的行列数,接着分别输入A、B两个矩阵的值。

站在用户的角度思考问题,与客户深入沟通,找到磐石网站设计与磐石网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:做网站、成都做网站、企业官网、英文网站、手机端网站、网站推广、域名注册、虚拟空间、企业邮箱。业务覆盖磐石地区。

2、首先,定义6个整型变量,保存A、B矩阵的行和列,以及控制循环的变量,k则用于实现矩阵的乘法。

3、接着,定义三个整型二维数组,保存A、B和C矩阵的各元素。

4、输入三个矩阵的行数和列数,保存在变量a、b、c中。

5、输入矩阵A的各元素,保存在数组X中。

6、输入矩阵B的各元素,保存在数组Y中。

7、将二维数组Z的各元素,初始化为0。

8、用两层for循环,控制矩阵的乘法,并输出乘法所得的结果。

9、计算A矩阵和B矩阵的乘法,结果保存在数组Z中。

10、最后,输出乘法所得的结果,即输出Z数组中的所有元素。

11、运行程序,输入矩阵A和B的行数和列数,以及A矩阵和B矩阵的所有元素,电脑就会计算出乘积C矩阵的所有元素,并输出C矩阵。

C语言编程求矩阵乘积

#define MAX 50

#define M MAX

#define N MAX

#define T MAX

#define S MAX

int Mult(double a[][N],int m,int n,double b[][T]int s,int t,double c[][T]) {

int i,j,k;

if(n != s) {

printf("两矩阵相乘,左矩阵的列数与右矩阵的行数必须相等。\n");

return 0;

}

int c;

tmp.m_Mat = new double *[tmp.m_Rows];

for(int i = 0;i  tmp.m_Rows;i++) tmp.m_Mat[i] = new double[tmp.m_Cols];

for(i = 0; i  m; ++i) {

for(j = 0; j  n; ++j) {

c[i][j] = 0;

for(k = 0; k  t; ++k)

c[i][j] += c[i][k] * c[k][j];

}

}

return 1;

}

C语言编程:编写一个函数,实现矩阵的乘法。

如果确定距阵的大小长度,定义两个二维数组,用两个for循环两数据输入到内存,是每两个for输入一个数组,然后定义另外一个数组,用来得到结果距阵,再用三个嵌套的for将结果放入第三个数组当中,即c[i][j]=a[i][k]+b[k][j],k是在第三重循环,这样就可以得到要求的距阵,如果不确定大小长度就在输入语句的每个for循环的辖区内加一个变量作为标记程序运行时求出距阵的大小

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

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

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

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=0;km1.c;k++)

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

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

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

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

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

C语言关于矩阵乘法的函数,,

童鞋,不知道你是用的什么测试数据,在我的机器上测试了几组数据,结果都是正确的。

重复下我的测试代码。

#include

"stdio.h"

#include

"stdlib.h"

#include

"malloc.h"

void

multiplication(int

a,int

b,int

c,int

*p,int

*q);

void

main()

{

int

m,n,l,h;

int

i,j,g,k;

int

*p,*q;

char

x;

printf("请输入a矩阵行数和列数,以空格分开,,,");

scanf("%d

%d",m,n);

p=(int

*)malloc(sizeof(int)*m*n);

for(i=0;im;i++)

for(j=0;jn;j++)

{

printf("请输入a矩阵%d行%d列的数,,",(i+1),(j+1));

scanf("%d",(p+m*i+j));

}

printf("请输入b矩阵行数和列数,以空格分开,,,");

scanf("%d

%d",l,h);

q=(int

*)malloc(sizeof(int)*l*h);

for(g=0;gl;g++)

for(k=0;kh;k++)

{

printf("请输入b矩阵%d行%d列的数,,",(g+1),(k+1));

scanf("%d",(q+l*g+k));

}

multiplication(

m,

n,

h,

p,

q);

}

void

multiplication(int

a,int

b,int

c,int

*p,int

*q)

{

int

i,j;

int

k;

int

sum;

for(i=0;ia;i++)

{

for(j=0;jc;j++)

{

sum=0;

for(k=0;kb;k++)

{

sum=sum+(*(p+a*i+k))*(*(q+b*k+j));

}

printf("%d

",sum);

}

printf("\n");

}

}

附带一组测试数据

A

3

4

2

1

B

3

4

Result

25

10

结果正确。

c语言矩阵乘法函数

函数类型是根据有无返回值判断的,无返回值就把函数定义为void类型

如果是单纯输出矩阵那就不用返回了,如果还要传回主函数有其它应用那就返回吧


当前文章:c语言关于矩阵乘积的函数,c语言中乘积函数
URL网址:http://cdweb.net/article/hcgsig.html