c语言基础:L1-048 矩阵A乘以B

        给定两个矩阵A和B,要求你计算它们的乘积矩阵AB。需要注意的是,只有规模匹配的矩阵才可以相乘即若A有Ra​行、Ca​列,B有Rb​行、Cb​列,则只有Ca​与Rb​相等时,两个矩阵才能相乘。

输入格式:

        输入先后给出两个矩阵A和B。对于每个矩阵,首先在一行中给出其行数R和列数C,随后R行,每行给出C个整数,以1个空格分隔,且行首尾没有多余的空格。输入保证两个矩阵的R和C都是正数,并且所有整数的绝对值不超过100。

输出格式:

        若输入的两个矩阵的规模是匹配的,则按照输入的格式输出乘积矩阵AB,否则输出Error: Ca != Rb,其中Ca是A的列数,Rb是B的行数。

输入样例1:

2 3
1 2 3
4 5 6
3 4
7 8 9 0
-1 -2 -3 -4
5 6 7 8

输出样例1:

2 4
20 22 24 16
53 58 63 28

输入样例2:

3 2
38 26
43 -5
0 17
3 2
-11 57
99 68
81 72

输出样例2:

Error: 2 != 3

程序源码:

 

#include   

int main() {

    // 定义四个整型变量a, b, c, d,这些变量将用于存储用户输入的两个矩阵的行数和列数  
    int a, b, c, d;

    // 从标准输入读取两个整数,并将它们存储在变量a和b中  
    scanf("%d %d", &a, &b);

    // 根据用户输入的行数a和列数b,定义一个二维数组matrix1,用于存储第一个矩阵的元素  
    int matrix1[a][b];

    // 第一个for循环,遍历矩阵matrix1的每一行  
    for (int i = 0; i < a; i++) {
        // 第二个for循环,遍历矩阵matrix1的每一列  
        for (int j = 0; j < b; j++) {
            // 从标准输入读取一个整数,并存储在matrix1的(i, j)位置上  
            scanf("%d", &matrix1[i][j]);
        }
    }

    // 从标准输入读取两个整数,并将它们存储在变量c和d中,用于存储用户输入的第二个矩阵的行数和列数  
    scanf("%d %d", &c, &d);

    // 根据用户输入的行数c和列数d,定义一个二维数组matrix2,用于存储第二个矩阵的元素  
    int matrix2[c][d];

    // 第一个for循环,遍历矩阵matrix2的每一行  
    for (int i = 0; i < c; i++) {
        // 第二个for循环,遍历矩阵matrix2的每一列  
        for (int j = 0; j < d; j++) {
            // 从标准输入读取一个整数,并存储在matrix2的(i, j)位置上  
            scanf("%d", &matrix2[i][j]);
        }
    }
    // 如果变量b不等于变量c,执行下面的代码  
    if (b != c) {
        // 输出错误信息,指明b和c不相等  
        printf("Error: %d != %d\n", b, c);
    }
    else {
        // 如果b和c相等,输出a和d的值  
        printf("%d %d\n", a, d);
        // 定义一个名为countCol的整型变量,并初始化为0  
        int countCol = 0;
        // 遍历矩阵matrix1的每一行  
        for (int i = 0; i < a; i++) {
            // 遍历矩阵matrix1的每一列  
            for (int j = 0; j < d; j++) {
                // 定义一个名为sum的整型变量,并初始化为0  
                int sum = 0;
                // 遍历矩阵matrix1的每一列  
                for (int k = 0; k < b; k++) {
                    // 计算matrix1的第i行和matrix2的第j列的点积,并累加到sum中  
                    sum = sum + matrix1[i][k] * matrix2[k][j];
                }
                // 如果当前列不是最后一列,输出计算得到的sum,后面跟一个空格  
                if (j < d - 1) {
                    printf("%d ", sum);
                }
                // 如果当前列是最后一列,输出计算得到的sum,后面跟一个换行符  
                else {
                    printf("%d\n", sum);
                }
            }
        }
    }
    // 程序执行完毕,返回0,表示程序正常结束  
    return 0;
}

你可能感兴趣的:(c,c语言)