一个小白的最基础C语言循环嵌套

题目描述:
给定一个N阶矩阵A,输出A的M次幂(M是非负整数)
例如:
A =
{1 2
3 4}
A的2次幂
{7 10
15 22}
输入
第一行是一个正整数N、M(1<=N<=30, 0<=M<=5),表示矩阵A的阶数和要求的幂数,
接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值。
输出
输出共N行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格隔开
`#include <stdio.h>

int main()
{
int a[30][30]={0};//初始矩阵
int N,M;//输入行列 输入幂
scanf("%d %d",&N,&M);

for(int i=0;i<N;i++)//输入矩阵
{
	for(int j=0;j<N;j++)
	{
		scanf("%d",&a[i][j]);
	}
}

if(M==0)//单位矩阵的特殊情况
{
	for(int i=0;i<N;i++)
	{
		for(int j=0;j<N;j++)
		{
			if(i==j) a[i][j]=1;
			else a[i][j]=0;
			printf("%d ",a[i][j]);
		}
		printf("\n");
	}
}

if(M==1)//矩阵自身的特殊情况
{
	for(int i=0;i<N;i++)
	{
		for(int j=0;j<N;j++)
		{
			printf("%d ",a[i][j]);
		}
		printf("\n");
	}
}

if(M>1) //一般情况
{
	int b[30][30]={0};//运算矩阵

for(int i=0;i<N;i++)//计算二阶 
{
	for(int j=0;j<N;j++)
	{
		for(int x=0;x<N;x++)
			{
				b[i][j]+=a[i][x]*a[x][j];
			} 		
	}
}
int c[30][30]={0}; 

for(int m=0;m<M-2;m++)//计算高阶 
{
	for(int i=0;i<N;i++)//储存矩阵b 
	{
		for(int j=0;j<N;j++)
		{
			c[i][j]=b[i][j];
		}
	}
	for(int i=0;i<N;i++)
	{
		for(int j=0;j<N;j++)
		{
		
			b[i][j]=0;//置零矩阵b 
			for(int x=0;x<N;x++)
			{
				
				b[i][j]+=c[i][x]*a[x][j];
			} 
		}
	}
}

for(int i=0;i<N;i++)//输出
{
	for(int j=0;j<N;j++)
	{
		printf("%d ",b[i][j]);
	}
	printf("\n");
}
}

}
我只学过C语言中最基础的输入输出,矩阵也是今晚刚刚自学的,编码很累赘,希望有人帮我简化代码或者有其他点子!

` 
posted @ 2020-11-17 23:52  empty_thought  阅读(200)  评论(0)    收藏  举报