蓝桥杯基础训练1571:矩阵乘法(C语言实现)
#include <stdio.h>
int n, m;
int a[31][31];
int b[31][31];
int c[31][31];
//矩阵a是原数据,不会变
//矩阵b是乘a后的矩阵,相当于个中间变量
//矩阵c是存放最后结果的矩阵
void f(void)
{int i, j, times, sum, q=0;//判断0次幂的情况,输出单位矩阵 if(m==0){for(i=1; i<=n; ++i)for(j=1; j<=n; ++j){if(i==j)a[i][j] = 1;elsea[i][j] = 0;}for(i=1; i<=n; ++i){ for(j=1; j<=n; ++j)printf("%d ", a[i][j]);printf("\n"); }return;}//如果1次幂就输出本身 if(m==1){for(i=1; i<=n; ++i){ for(j=1; j<=n; ++j)printf("%d ", a[i][j]);printf("\n"); } return;}//核心部分 for(times=1; times<m; ++times) //矩阵相乘的次数 {for(i=1; i<=n; ++i) //行标,第i行,行数 for(q=1; q<=n; q++) //矩阵每一行都分别乘以全部列,共n列,每列一次 {sum = 0; //初始化为零 for(j=1; j<=n; ++j)sum += b[i][j]*a[j][q]; //经过一次行乘以列 c[i][q] = sum; //更新结果 }for(i=1; i<=n; ++i)for(j=1; j<=n; ++j)b[i][j] = c[i][j]; //让矩阵b等于c,进行后续计算 }//打印出结果 for(i=1; i<=n; ++i){for(j=1; j<=n; ++j)printf("%d ", c[i][j]);printf("\n");}return;
}
int main(void)
{int i, j;scanf("%d %d", &n, &m);//输入矩阵a for(i=1; i<=n; ++i)for(j=1; j<=n; ++j)scanf("%d", &a[i][j]);//赋值于矩阵b,让其和a相同 for(i=1; i<=n; ++i)for(j=1; j<=n; ++j)b[i][j] = a[i][j]; f(); return 0;
}
注释较偏向通俗,如有不足,请多指教,欢迎评论区留言。O(∩_∩)O