作业帮 > 综合 > 作业

C++ 矩阵乘法 设矩阵int a[4][3],矩阵int b[3][5].矩阵的数据由用户输入.输出新的矩阵c=a*b

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/05/01 05:28:31
C++ 矩阵乘法
设矩阵int a[4][3],矩阵int b[3][5].矩阵的数据由用户输入.输出新的矩阵c=a*b.输出格式:
c00 c01 c02 c03 c04
c10 c11 c12 c13 c14
c20 c21 c22 c23 c24
c30 c31 c32 c33 c34
矩阵乘法的计算方法:
对于矩阵A[m][q]*B[q][n],
相乘的结果为矩阵C[m][n]且对于矩阵C中每一项都有
C[i][j] = A[i][0]*B[0][j] + A[i][1]*B[1][j] + .+ A[i][q]*B[q][j]
注意:实际矩阵大小不一定是4*3和3*5,请仔细阅读下面的输入说明
第一行为第一个矩阵的大小x1和y1(1
#include<stdio.h>
#include<stdlib.h>

int main() {
    int x1,y1,x2,y2;
    int **a, **b, **c;
    int i,j,k;
    printf("intput x1,y1:");
    scanf("%d%d", &x1, &y1);
    printf("intput Array A(%d,%d):\n", x1, y1);
    a = (int**)malloc(sizeof(int*)*x1);
    for(i=0;i<x1;++i) {
        a[i] = (int*)malloc(sizeof(int)*y1);
        for(j=0;j<y1;++j) {
            scanf("%d", &a[i][j]);
        }
    }
    printf("\n");
    
    printf("intput x2,y2:");
    scanf("%d%d", &x2, &y2);
    if(y1 != x2) {
        printf("Wrong parameter.");
        for(i=0;i<x1;++i) {
            free(a[i]);
        }
        free(a);
        return 0;
    }
    printf("intput Array A(%d,%d):\n", x2, y2);
    b = (int**)malloc(sizeof(int*)*x2);
    for(i=0;i<x2;++i) {
        b[i] = (int*)malloc(sizeof(int)*y2);
        for(j=0;j<y2;++j) {
            scanf("%d", &b[i][j]);
        }
    }
    printf("\n");
    
    c = (int**)malloc(sizeof(int*)*x1);
    for(i=0;i<x1;++i) {
        c[i] = (int*)malloc(sizeof(int)*y2);
        for(j=0;j<y2;++j) {
            c[i][j] = 0;
            for(k=0;k<y1;++k) {
                c[i][j] += a[i][k]*b[k][j];
            }
        }
    }
    
    for(i=0;i<x1;++i) {//输出c
        for(j=0;j<y2;++j) {
            printf("%d ", c[i][j]);    
        }
        printf("\n");
    }
    
    //释放空间
    for(i=0;i<x1;++i) {
        free(a[i]);
        free(c[i]);
    }
    free(a);
    free(c);
    
    for(i=0;i<x2;++i) {
        free(b[i]);
    }
    free(b);
    
    return 0;
}不定大小,完全满足题意~