编写求矩阵相乘的程序,C++

编写求矩阵相乘的程序,C++,第1张

可以调用 matrix2() 或 matrix() 做矩阵相乘。

下面主函数 以 调用 matrix() 为例,介绍过程:

输入参数,动态分配数组友念,输入矩阵数据,调用,输出,释放内存。

#include<iostream>

using namespace std

#include<stdio.h>

/*---------------------

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

a[ny][nk]

b[nk][nx]

c[ny][nx]

*---------------------*/

void matrix2(int *a,int *b, int *c, int nx, int ny, int nk)

{

int i,j,k

for(j=0j<nyj++){

for(i=0i<nxi++){

c[j*nx+i]=0

for(k=0k<nkk++)c[j*nx+i]+= a[j*nk+k] * b[k*nx+i]

}

}

}

/*---------------------

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

*---------------------*/

void matrix(int **b,int **c, int **a, int nx, int ny, int nk)

{

int i,j,k

for (j=0j<nyj++)for(i=0i<nxi++)a[j][i]= 0

for(j=0j<nyj++){

for(i=0i<nxi++){

for(k=0k<nkk++)a[j][i]+= b[j][k]*c[k][i]

}

}

}

int main()

{

int i,j,k,tmp

int b_row,b_col

int c_row,c_col

int a_row,a_col

int **b,**c,**a

printf("please enter b_row b_col of matrix B\n")

scanf("%d %d"羡粗,&b_row,&b_col)

c_row = b_col

printf("please enter c_col of matrix C\n")

scanf("%d",&c_col)

a_row = b_row

a_col = c_col

a = (int **) malloc(sizeof(int *) * a_row)

for (j=0j<a_rowj++){

a[j] = (int *) malloc(sizeof(int) * a_col)

}

b = (int **) malloc(sizeof(int *) * b_row)

for (j=0j<b_rowj++){

b[j] = (int *) malloc(sizeof(int) * b_col)

}

c = (int **) malloc(sizeof(int *) * c_row)

for (j=0j<兄告镇c_rowj++){

c[j] = (int *) malloc(sizeof(int) * c_col)

}

if (!c[c_row-1]) {

printf("no enought memory\n")exit(0)

}

printf("Please input int matrix b[%d][%d]\n",b_row,b_col)

for (j=0j<b_rowj++)

for (i=0i<b_coli++){

scanf("%d",&tmp)

b[j][i] = tmp

}

printf("Please input int matrix c[%d][%d]\n",c_row,c_col)

for (j=0j<c_rowj++)

for (i=0i<c_coli++){

scanf("%d",&tmp)

c[j][i] = tmp

}

matrix( b ,c,a, a_col, a_row, b_col)

for(j=0j<a_rowj++)

{

for (i=0i<a_coli++) printf("%d ",a[j][i])

printf("\n")

}

for (i=0i<a_rowi++) free((void *)a[i])free((void *)a)

for (i=0i<b_rowi++) free((void *)b[i])free((void *)b)

for (i=0i<c_rowi++) free((void *)c[i])free((void *)c)

return 0

}

数据和结果例子:

please enter b_row b_col of matrix B

3 2

please enter c_col of matrix C

3

Please input int matrix b[3][2]

1 2 3 4 5 6

Please input int matrix c[2][3]

1 2 3 4 5 6

9 12 15

19 26 33

29 40 51

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

#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 = 0i < tmp.m_Rowsi++) 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

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12565992.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存