C和指针 学习(四) 第八章习题 矩阵乘法

如果A是x行,y列的矩阵,B是y行,z列的矩阵,求A和B矩阵的乘法

void matrix_multiply(int *m1, int *m2, int *r, int x, int y, int z);

 

注意:

1、二维矩阵无法作为mat[][]的形参传递给矩阵, 只有两种形式 (*mat)[10]或者mat[][10],很不方便,因此可以将二维数组转换为指针本质传递 *mat;

 

实现方法

#include <stdio.h>

void matrix_multiply_1(int *m1int *m2int *rint xint yint z){
    register int *m1p;
    register int *m2p;
    register int k;
    int row
    int column;
    for(row = 0row < xrow++){
        for(column = 0column < zcolumn++){
            m1p = m1 + row*y;
            m2p = m2 + column;
            *r = 0;
            for(k = 0k < yk++){
                *r += *m1p * *m2p;
                m1p += 1;
                m2p += z;
            }
            r++;
        }
    }
}


void matrix_multiply_2(int m1[]int m2[]int *rint xint yint z){
    
    for(int row = 0row < xrow++){
        for(int column = 0column < zcolumn++){
            r[row * z + column] = 0;
            for(int k = 0k < yk++){
                r[row * z + column] += m1[row * y + k] * m2[k*z +column];
            } 
        }
    }
}

void matrix_multiply_3(int *m1int *m2int *rint xint yint z){
    
    for(int row = 0row < xrow++){
        for(int column = 0column < zcolumn++){
            r[row * z + column] = 0;
            for(int k = 0k < yk++){
                r[row * z + column] += m1[row * y + k] * m2[k*z +column];
            } 
        }
    }
}

void print_matrix(int *mint xint y){
    for(int row = 0row < xrow++){
        for(int column = 0column < ycolumn++){
            printf("%d ",m[row * y + column]);
        }
        printf("\n");
    }

}

int main(){
    int a[2][2] = {{-11}, {11}};
    int b[2][2] = {{-11}, {11}};
    int c[2][2];
    print_matrix(*a22);
    print_matrix(*b22);
    matrix_multiply_1(*a, *b, *c2 ,2 ,2);
    print_matrix(*c22);
    matrix_multiply_2(*a, *b, *c2 ,2 ,2);
    print_matrix(*c22);
    matrix_multiply_3(*a, *b, *c2 ,2 ,2);
    print_matrix(*c22);
}
posted @ 2021-05-21 16:39  elfte  阅读(139)  评论(0)    收藏  举报