作业帮 > 综合 > 作业

编写一个函数,用于执行两个矩阵的乘法.要求:数据输入输出在主函数中完成,用函数实现运算.

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/28 17:47:19
编写一个函数,用于执行两个矩阵的乘法.要求:数据输入输出在主函数中完成,用函数实现运算.
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])
{
\x05int i, j, k;
\x05if(colA != rowB)
\x05{
\x05\x05printf("这两个矩阵不能相乘\n");
\x05\x05return ;
\x05}
\x05for(i=0; i<rowA; i++)
\x05{
\x05\x05for(j=0; j<colB; j++)
\x05\x05{
\x05\x05\x05arrC[i][j] = 0;
\x05\x05\x05for(k=0; k<colA; k++)
\x05\x05\x05{
\x05\x05\x05\x05arrC[i][j] += arrA[i][k] * arrB[k][j];
\x05\x05\x05}
\x05\x05}
\x05}
}
void main()
{
\x05int arrA[MAX][MAX];
\x05int arrB[MAX][MAX];
\x05int arrC[MAX][MAX];
\x05int i, j;
\x05int rowA, colA, rowB, colB, rowC, colC;
\x05printf("rowA : ");
\x05scanf("%d", &rowA);
\x05printf("colA : ");
\x05scanf("%d", &colA);
\x05for(i=0; i<rowA; i++)
\x05\x05for(j=0; j<colA; j++)
\x05\x05\x05scanf("%d", &arrA[i][j]);
\x05printf("rowB : ");
\x05scanf("%d", &rowB);
\x05printf("colB : ");
\x05scanf("%d", &colB);
\x05for(i=0; i<rowB; i++)
\x05\x05for(j=0; j<colB; j++)
\x05\x05\x05scanf("%d", &arrB[i][j]);
\x05if(colA != rowB)
\x05{
\x05\x05printf("这两个矩阵不能相乘,第一个矩阵的列数必须等于第二个矩阵的行数\n");
\x05\x05return ;
\x05}
\x05rowC = rowA;
\x05colC = colB;
\x05arrayMultiply(arrA, 2, 3, arrB, 3, 4, arrC);
\x05printf("arrC : \n");
\x05for(i=0; i<rowC; i++)
\x05{
\x05\x05for(j=0; j<colC; j++)
\x05\x05{
\x05\x05\x05printf("%6d", arrC[i][j]);
\x05\x05}
\x05\x05printf("\n");
\x05}
}
运行测试: