C语言–矩阵相乘
题目:
利用矩阵相乘公式cij= aik*bkj,编程计算并输出m×n阶矩阵A和n×m阶矩阵B之积。其中,m和n从键盘输入,m和n的值不超过6,否则提示用户重新输入,如果输入非法字符也提示用户重新输入。要求按如下函数原型编写程序:
/* 函数功能:计算m×n阶矩阵A和n×m阶矩阵B之积,结果存于二维数组c中 */
void MultiplyMatrix(int a[ROW][COL], int b[COL][ROW], int c[ROW][ROW], int m, int n);
/* 函数功能:输出m×m阶矩阵a中的元素 */
void PrintMatrix(int a[ROW][ROW], int m);
**输入m和n的输入提示信息:“Input m, n:”
**输入m和n的输入格式:"%d,%d"
*输入矩阵元素的输入提示信息:"Input %d%d matrix a:\n"
**输入矩阵元素的输入格式: “%d”
**输出提示信息:“Results:\n”
**输出格式:"%6d"
代码借鉴:博客园—C语言实现矩阵相乘
代码:
include <stdio.h>
//void input(int matrix1[][], int matrix2[][], int m, int n);
//void mul(int matrix1[][], int matrix2[][], int m, int n);
int main (void)
{
int matrix1[10][10];
int matrix2[10][10];
int m, n;
printf("Input m, n:");
scanf("%d,%d", &m, &n);
while (m > 6 || n > 6)
{
fflush(stdin);
printf("Input m, n:");
scanf("%d,%d", &m, &n);
}
//input(matrix1, matrix2, m, n);
printf("Input %d*%d matrix a:\n", m, n);
for (int i = 0; i < m; i++)
for (int p = 0; p < n; p++)
scanf("%d", &matrix1[i][p]);
printf("Input %d*%d matrix b:\n", n, m);
for (int i = 0; i < n; i++)
for (int p = 0; p < m; p++)
scanf("%d", &matrix2[i][p]);
//mul(matrix1, matrix2, m, n);
int matrix[10][10];
for (int i = 0; i < 10; i++)
for (int p = 0; p < 10; p++)
matrix[i][p] = 0;
//初始化二维结果数组
for (int rank = 0; rank < m; rank++)
for (int col = 0; col < m; col++)
for (int k = 0; k < n; k++)
matrix[rank][col] = matrix[rank][col] + matrix1[rank][k] * matrix2[k][col];
printf("Results:\n");
for (int i = 0; i < m; i++)
{
// if(i>0)
for (int p = 0; p < m; p++)
printf("%6d", matrix[i][p]);
printf("\n");
}
return 0;
}
注意事项
1.函数中定义二维数组不可以
void mul(int a[][]);
不可以省略数组的列
2.矩阵相乘要注意循环边界
第一层循环选定第一个矩阵的行,第二个循环遍历第二个矩阵的列,他们的边界都是那个m