
1、程序运行输入数据时,第一行为A矩阵的行列数和B矩阵的行列数,接着分别输入A、B两个矩阵的值。
2、首先,定义6个整型变量,保存A、B矩阵的行和列,以及控制循环的变量,k则用于实现矩阵的乘法。
3、接着,定义三个整型二维数组,保存A、B和C矩阵的各元素。
4、输入三个矩阵的行数和列数,保存在变量a、b、c中。
5、输入矩阵A的各元素,保存在数组X中。
6、输入矩阵B的各元素,保存在数组Y中。
7、将二维数组Z的各元素,初始化为0。
8、用两层for循环,控制矩阵的乘法,并输出乘法所得的结果。
9、计算A矩阵和B矩阵的乘法,结果保存在数组Z中。
10、最后,输出乘法所得的结果,即输出Z数组中的所有元素。
11、运行程序,输入矩阵A和B的行数和列数,以及A矩阵和B矩阵的所有元素,电脑就会计算出乘积C矩阵的所有元素,并输出C矩阵。
C源程序:
#include "stdio.h"
#define MAX 100
/* 矩阵 arrA(rowA * colA) * arrB(rowB * colB) */
void arrayMultiply(int arrA[][MAX], int rowA, int colA, int arrB[][MAX], int rowB, int colB, int arrC[][MAX])
{
int i, j, k
if(colA != rowB)
{
printf("这两个矩阵不能相乘\n")
return
}
for(i=0 i<rowA i++)
{
for(j=0 j<colB j++)
{
arrC[i][j] = 0
for(k=0 k<colA k++)
{
arrC[i][j] += arrA[i][k] * arrB[k][j]
}
}
}
}
void main()
{
int arrA[MAX][MAX]
int arrB[MAX][MAX]
int arrC[MAX][MAX]
int i, j
int rowA, colA, rowB, colB, rowC, colC
printf("rowA : ")
scanf("%d", &rowA)
printf("colA : ")
scanf("%d", &colA)
for(i=0 i<rowA i++)
for(j=0 j<colA j++)
scanf("%d", &arrA[i][j])
printf("rowB : ")
scanf("%d", &rowB)
printf("colB : ")
scanf("%d", &colB)
for(i=0 i<rowB i++)
for(j=0 j<colB j++)
scanf("%d", &arrB[i][j])
if(colA != rowB)
{
printf("这两个矩阵不能相乘,第一个矩阵的列数必须等于第二个矩阵的行数\n")
return
}
rowC = rowA
colC = colB
arrayMultiply(arrA, 2, 3, arrB, 3, 4, arrC)
printf("arrC : \n")
for(i=0 i<rowC i++)
{
for(j=0 j<colC j++)
{
printf("%6d", arrC[i][j])
}
printf("\n")
}
}
运行测试:
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)