矩阵乘法(C/C++)
代码如下:
#include<stdio.h>
int main(){
//r1表示第一个矩阵的行数,c1表示第一个矩阵的列数
//r2表示第二个矩阵的行数,c2表示第二个矩阵的列数
int r1, c1, r2, c2;
//输入第一个矩阵的行数和列数
printf("输入第一个矩阵的行数和列数:");
scanf("%d %d", &r1, &c1);
//输入第二个矩阵的行数和列数
printf("输入第二个矩阵的行数和列数:");
scanf("%d %d", &r2, &c2);
//判断输入的矩阵是否满足矩阵乘法要求,即第一个矩阵的列数c1等于第二个矩阵的行数r2
if(c1 == r2){
//m1表示第一个矩阵,m2表示第二个矩阵,m3表示两个矩阵相乘后所得到的矩阵
double m1[r1][c1], m2[r2][c2], m3[r1][c2];
//输入第一个矩阵的元素
printf("\n输入第一个矩阵(%d行,%d列)的元素:\n", r1, c1);
for(int i = 0; i < r1; i++){//表示第一个矩阵的第i行
for(int j = 0; j < c1; j++){//表示第一个矩阵的第j列
scanf("%lf", &m1[i][j]);//m1[i][j]表示第一个矩阵的第i行第j列元素
}
}
//输入第二个矩阵的元素
printf("输入第二个矩阵(%d行,%d列)的元素:\n", r2, c2);
for(int i = 0; i < r2; i++){//表示第二个矩阵的第i行
for(int j = 0; j < c2; j++){//表示第二个矩阵的第j列
scanf("%lf", &m2[i][j]);//m2[i][j]表示第二个矩阵的第i行第j列元素
}
}
//两个矩阵进行乘法运算
for(int i = 0; i < r1; i++){//表示第一个矩阵的第i行
for(int j = 0; j < c2; j++){//表示第二个矩阵的第j列
m3[i][j] = 0;//累加求和的前提条件
for(int k = 0; k < r2; k++){//累加求第一个矩阵的第i行与第二个矩阵的第j列的对应元素乘积之和
//m1[i][k]表示第一个矩阵的第i行第k个元素,从左到右
//m2[k][j]表示第二个矩阵的第j列第k个元素,从上到下
m3[i][j] += m1[i][k]*m2[k][j];
//与上面式子的等价写法:m3[i][j] = m3[i][j] + m1[i][k]*m2[k][j];
}
}
}
//输出两个矩阵相乘所得到的矩阵,即输出乘积矩阵
printf("\n两个矩阵相乘所得到的矩阵(%d行,%d列)为:\n", r1, c2);
for(int i = 0; i < r1; i++){//表示乘积矩阵的第i行
for(int j = 0; j < c2; j++){//表示乘积矩阵的第j列
printf("%f ", m3[i][j]);//m3[i][j]表示乘积矩阵的第i行第j列元素
}
printf("\n");//输出换行
}
}else{
//输出错误提示信息
printf("输入矩阵不满足矩阵乘法要求!\n");
}
}
运行结果如下:
参考数目如下:
[1] 严蔚敏,吴伟民.数据结构(C语言版)[M].北京:清华大学出版社,2020:15.