一个小白的最基础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语言中最基础的输入输出,矩阵也是今晚刚刚自学的,编码很累赘,希望有人帮我简化代码或者有其他点子!
`

浙公网安备 33010602011771号