用c语言实现两个矩阵相乘怎么做?

用c语言实现两个矩阵相乘怎么做?,第1张

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")

}

}

运行测试:


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8633732.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-19
下一篇2023-04-19

发表评论

登录后才能评论

评论列表(0条)

    保存