求矩阵的乘积c语言函数 c语言矩阵相乘函数

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

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

我们提供的服务有:网站制作、成都网站设计、微信公众号开发、网站优化、网站认证、承德ssl等。为1000+企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的承德网站制作公司

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

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

#includestdio.h

typedef struct

{

int m;

int n;

int array[100][100];

}Ju_def;

int main()

{

Ju_def Ju[11];

int i=0,m,n,k;

int flag[10];

while(1)

{

flag[i]=0;

printf("In put m and n:\n");

scanf("%d%d",Ju[i].m,Ju[i].n);

while(Ju[i].m=0||Ju[i].m100||Ju[i].n=0||Ju[i].m100)

{

printf("In put m and n again:\n");

scanf("%d%d",Ju[i].m,Ju[i].n);

}

printf("In put your array:\n");

for(m=0;mJu[i].m;m++)

{

for(n=0;nJu[i].n;n++)

{

scanf("%d",Ju[i].array[m][n]);

if(Ju[i].array[m][n]==0)

flag[i]++;

}

}

if(flag[i]==(Ju[i].m*Ju[i].n))//矩阵元素全为0才退出循环

{

flag[i]=1;

break;

}

else

flag[i]=0;

i++;

i=i%10;//超过10个矩阵,则又循环到第1个。

}

for(i=1;i10;i++)

{

if((Ju[i].m!=Ju[0].n)(flag[i]==0))

{

printf("Not satisfied the definition of matrix multiplication !\n");

return 0;

}

if(flag[i])

{

break;

}

for(m=0;mJu[0].m;m++)

{

for(n=0;nJu[0].n;n++)

{

Ju[10].array[m][n]=0;

for(k=0;kJu[i].m;k++)

{

Ju[10].array[m][n]+=Ju[0].array[m][n]*Ju[i].array[k][n];

}

Ju[0].array[m][n]=Ju[10].array[m][n];

}

}

}

for(m=0;mJu[0].m;m++)

{

for(n=0;nJu[0].n;n++)

{

printf("%-8d",Ju[0].array[m][n]);

}

printf("\n");

}

}

你试试这个我的矩阵乘法是这样的了,A=A*B*C...(10个以内)。

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语言求两矩阵乘积

#include "stdio.h"

#define LANGA 4

#define LANGB 3

#define LANGC LANGB

int multi(double A[][LANGA],double B[][LANGB],double C[][LANGC],int langa,int langb,int langc){

int i,j,k;

if(langa==LANGB  langb==LANGA){

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

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

for(C[i][j]=k=0;klangb;k++)

C[i][j]+=A[i][k]*B[k][j];

return 0;

}

return -1;

}

int main(int argv,char *argc[]){

double A[LANGB][LANGA],B[LANGA][LANGB],C[LANGB][LANGC];

int i,j;

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

for(j=0;jLANGA;A[i][j++]=1.0/(i+j+1));

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

for(j=0;jLANGB;B[i][j]=1.0+j++);

if(multi(A,B,C,LANGB,LANGA,LANGB))

return -1;

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

for(j=0;jLANGC;printf("%12.4le",C[i][j++]));

printf("\n");

}

return 0; 

}

运行样例:

C语言编程求矩阵乘积。

#include"stdio.h"

void main()

{

int a[3][2],b[2][3],c[3][3];

int i,j,k;

for(i=0;i3;i++)//输入

{

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

scanf("%d",a[i][j]);

}

for(i=0;i2;i++)//输入

{

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

scanf("%d",b[i][j]);

}

for(i=0;i3;i++)//计算

{

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

{

c[i][j]=0;//初始化c

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

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

}

}

for(i=0;i3;i++)//输出

{

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

printf("%d ",c[i][j]);

printf("\n");

}

}

C语言中两矩阵相乘

#include stdio.h

int main()

{

int x,y,z;

int i,j,l;

int sum=0;

printf("请输入前一个矩阵的行数,列数与后一个矩阵的列数:\n");

scanf("%d %d %d",x,y,z);

int a[x][y];

int b[y][z];

int c[x][z];

//读入矩阵

printf("请输入矩阵a:\n");

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

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

scanf("%d",a[i][j]);

}

}

printf("请输入矩阵b:\n");

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

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

scanf("%d",b[i][j]);

}

}

printf("矩阵a为:\n");

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

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

printf("%d",a[i][j]);

if(j==y-1)

printf("\n");

else

printf("\t");

}

}

printf("矩阵b为:\n");

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

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

printf("%d",b[i][j]);

if(j==z-1)

printf("\n");

else

printf("\t");

}

}

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

for(l=0;lz;l++){

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

sum+=a[i][j]*b[j][l];

if(j==y-1){

c[i][l]=sum,sum=0;

}

}

}

}

printf("矩阵a与矩阵b的乘积为:\n");

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

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

printf("%d",c[i][j]);

if(j==z-1)

printf("\n");

else

printf("\t");

}

}

return 0;

}


网站栏目:求矩阵的乘积c语言函数 c语言矩阵相乘函数
浏览地址:http://myzitong.com/article/hpsgoj.html