C语言编程求矩阵乘积

C语言编程求矩阵乘积,第1张

#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

}

可以调用 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

#include <stdio.h>

#include <stdlib.h>

int main()

{

  液枝  unsigned int m,p,n

    int i,j,k,*a,*b,*c

    scanf("%d %d %d",&m,&p,&n)

    a=malloc(m*p*sizeof(int))

    for(i=0i<mi++)

        for(j=0j<pj++)

            scanf("%d",&a[i*p+j])

    b=malloc(p*n*sizeof(int))

    升埋和for(i=0i<pi++)

        for(j=0j<nj++)

            scanf("%d",&b[i*n+j])

    c=calloc(m*n,sizeof(int))

    for(i=0i<mi++)

        for(j=0j<nj++)

            for(k=0k<pk++)

                c[i*n+j]+=a[i*p+k]*b[k*n+j]

    printf("\n")

    for(i=0i<mi++)

    {

        for(j=0j<nj++)

            printf("%d ",c[i*n+j])

   吵盯     printf("\n")

    }

    free(a)free(b)free(c)

    return 0

}


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

原文地址: https://outofmemory.cn/yw/8240668.html

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

发表评论

登录后才能评论

评论列表(0条)

保存