C语言求任意两个矩阵相乘的算法(不同于大部分规格固定的矩阵乘法)
结果图如下 :
代码如下:
//----- 任意两个矩阵相乘
# include <stdio.h>
int main (void)
{
char ch;
int a, b, c, d;
printf ("此算法用于任意两个矩阵相乘 \n矩阵1(a行b列)乘以矩阵2(c行d列),请您按顺序输入a、b、c、d,中间以空格隔开:\n");
scanf ("%d %d %d %d", &a, &b, &c, &d);
while (b != c)
{
printf ("您输入的矩阵规格不能相乘,请重新输入。\n");
printf ("矩阵1(a行b列)乘以矩阵2(c行d列),请按顺序输入a、b、c、d,中间以空格隔开:\n");
scanf ("%d %d %d %d", &a, &b, &c, &d);
}
while ((ch = getchar()) != '\n')
continue;
printf ("\n");
int i, j;
int f[100][100] = {0}; //100是随机大数,是算法能计算的矩阵上限
int g[100][100] = {0};
int h[100][100] = {0};
printf ("\n");
for (i=0;i<a;++i)//输入矩阵1
{
printf ("请输入矩阵1的第%d行数据,元素之间用空格隔开:\n", (i+1));
for (j=0;j<b;++j)
{
scanf ("%d", &f[i][j]);
}
while ((ch = getchar()) != '\n')
continue;
}
printf ("矩阵1为:\n");
for (i=0;i<a;++i)//输出矩阵1
{
for (j=0;j<b;++j)
printf (" %-10d ", f[i][j]);//-10是指左对齐,每个数占10格
printf ("\n");
}
printf ("\n");
for (i=0;i<c;++i)//输入矩阵2
{
printf ("请输入矩阵2的第%d行数据,元素之间用空格隔开:\n", (i+1));
for (j=0;j<d;++j)
{
scanf ("%d", &g[i][j]);
}
while ((ch = getchar()) != '\n')
continue;
}
printf ("矩阵2为:\n");
for (i=0;i<c;++i)//输出矩阵2
{
for (j=0;j<d;++j)
printf (" %-10d ", g[i][j]);//-10是指左对齐,每个数占10格
printf ("\n");
}
printf ("\n");
int k;
for (i=0;i<a;++i)//矩阵相乘
{
for (j=0;j<d;++j)
for (k=0;k<b;++k)
{
h[i][j] = h[i][j] + f[i][k]*g[k][j];
}
}
printf ("结果矩阵为:\n");
for (i=0;i<a;++i)//输出结果矩阵
{
for (j=0;j<d;++j)
printf (" %-10d ", h[i][j]);//-10是指左对齐,每个数占10格
printf ("\n");
}
return 0;
}
文章来源地址https://www.toymoban.com/news/detail-400414.html
文章来源:https://www.toymoban.com/news/detail-400414.html
到了这里,关于C语言求任意两个矩阵相乘的算法(初学尝试矩阵乘法)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!