蓝桥杯基础训练1571:矩阵乘法(C语言实现)

蓝桥杯基础训练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;
   			else
     				a[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


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值