实现矩阵相乘算法
设 A 为 m * p 的矩阵,B 为 p * n 的矩阵,那么称 m * n 的矩阵 C 为矩阵 A 与 B 的乘积,记作 C = AB,其中矩阵 C 中的第 i 行第 j 列元素可以表示为
用户输入矩阵a和b,计算出矩阵 C
#include <stdio.h>
#include <stdlib.h>
int main()
{
//获得矩阵尺寸
int m,p,n;
printf("输入第一个矩阵尺寸:%d*%d\n",&m,&p);
printf("输入第二个矩阵尺寸:%d*%d\n",&p,&n);
int a[m][p];
int b[p][n];
//初始化存放乘积的矩阵
int c[m][n];
for(int i=0;i<m;i++)
{
for (int j=0;j<n;j++)
{
c[i][j]=0;
}
}
//获取矩阵具体值
printf("输入第一个矩阵:");
for (int i=0;i<m;i++)
{
for (int j=0;j<p;j++)
{
scanf("%d",&a[i][j]);
}
}
//获取第二个矩阵
printf("输入第二个矩阵:");
for (int i=0;i<p;i++)
{
for (int j=0;j<n;j++)
{
scanf("%d",&b[i][j]);
}
}
//计算乘积
int i, j, k, row;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
for (k = 0; k < p; k++)
{
c[i][j] += a[i][k] * b[k][j];
}
}
}
// row 取行数最大值
row = m > p ? m : p;
for (i = 0; i < row; i++)
{
// 打印A
printf("| ");
for (j = 0; j < p; j++)
{
if (i < m)
{
printf("\b%d ", a[i][j]);
printf("|");
}
else
{
printf("\b\b\b ");
}
}
// 打印 * 号
if (i == row / 2)
{
printf(" * ");
}
else
{
printf(" ");
}
printf("| ");
// 打印B
for (j = 0; j < n; j++)
{
if (i < p)
{
printf("\b%d ", b[i][j]);
printf("|");
}
else
{
printf("\b\b\b ");
}
}
// 打印 = 号
if (i == row / 2)
{
printf(" = ");
}
else
{
printf(" ");
}
// 打印C
printf("| ");
for (j = 0; j < n; j++)
{
if (i < m)
{
printf("\b%d ", c[i][j]);
printf("|");
}
else
{
printf("\b\b\b ");
}
}
printf("\n");
}
system("pause");
return 0;
}
这到底是我的程序有问题还是咋了?怎么解决?
我没有null指针