c语言指针矩阵乘法函数 矩阵的乘法如何用c语言定义

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

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

成都创新互联主要从事成都做网站、网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务淮南,10余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575

重复下我的测试代码。

#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语言实现两个矩阵相乘怎么做?

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语言矩阵乘法函数

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

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

C语言实现的矩阵加减乘法

#includestdio.h

/*

m1和m2为两个相加的数组首元素地址,r和c为两个数组的行数和列数

m用于存放结果。

调用该函数时,要求m为有足够存储单元、能容纳运算结果的数组首元素地址

*/

void add(int *m,int *m1,int *m2,int r,int c);

void sub(int *m,int *m1,int *m2,int r,int c);

void mult(int *m,int *m1,int *m2,int r,int p,int c);

void disp(int *m,int r,int c);

void main()

{

int a[3][4]={{2,4,6,8},{1,3,5,7},{11,33,44,22}};

int b[3][4]={{2,-4,6,-8},{-1,3,-5,7},{11,-33,-44,22}};

int c[4][3]={{2,4,6},{1,3,5},{1,0,3},{0,2,4}};

int d[3][4]={0};

int e[3][3]={0};

printf("\nA(3x4):\n");

disp(a[0],3,4);

printf("\nB(3x4):\n");

disp(b[0],3,4);

add(d[0],a[0],b[0],3,4);

printf("\nD(3x4)=A+B:\n");

disp(d[0],3,4);

sub(d[0],a[0],b[0],3,4);

printf("\nD(3x4)=A-B:\n");

disp(d[0],3,4);

printf("\nA(3x4):\n");

disp(a[0],3,4);

printf("\nC(4x3):\n");

disp(c[0],4,3);

mult(e[0],a[0],c[0],3,4,3);

printf("\nE(3x3)=A*C:\n");

disp(e[0],3,3);

}

void add(int *m,int *m1,int *m2,int r,int c){

int i,j;

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

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

*(m+i*c+j) = *(m1+i*c+j) + *(m2+i*c+j);

}

void sub(int *m,int *m1,int *m2,int r,int c){

int i,j;

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

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

*(m+i*c+j) = *(m1+i*c+j) - *(m2+i*c+j);

}

void mult(int *m,int *m1,int *m2,int r,int p,int c){

int i,j,k,t;

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

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

{

t=0;

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

t += *(m1+i*p+k) * *(m2+k*c+j);

*(m+i*c+j)=t;

}

}

void disp(int *m,int r,int c)

{

int i,j;

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

{

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

printf("%6d",*(m+i*c+j));

printf("\n");

}

}


当前题目:c语言指针矩阵乘法函数 矩阵的乘法如何用c语言定义
文章分享:http://azwzsj.com/article/ddopijo.html