兰州网站优化软件佛山关键词排名工具
给定两个矩阵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 <stdio.h> 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;
}