要不就是没有输出,要不就是输出很奇怪
比如输入:4 1
矩阵:1 0 0 0
1 1 0 0
1 0 1 0
1 1 0 1
这个时候我这个代码运行不出来结果,但按道理应该输出原矩阵才对吧
求矩阵的m次幂
```c
#include
#define N 100
void matrixPow(int M[N][N],int n,int m,int Result[N][N]);
int main()
{
int i,j,n,m;
scanf("%d %d",&n,&m);
int x;
int M[n][n];
int Result[n][n];
for(i=0;ifor(j=0;jscanf("%d",&M[i][j]);
//Result[i][j]=0;
}
} //录入二维矩阵
matrixPow(M,n,m,Result);
return 0;
}
void matrixPow(int M[N][N],int n,int m,int Result[N][N])
{
int i,j,k;
if(m==0) // 单位矩阵
{
for(i=0;ifor(j=0;jif(i==j)
{
Result[i][j]=1;
}
else
{
Result[i][j]=0;
}
}
}
}
else if(m==1) // 原矩阵
{
for(i=0;ifor(j=0;jelse // m至少从2开始
{
int x=2;
while(x<=m) // x计数
{
for(i=0;ifor(j=0;jfor(k=0;kint s=0;
s+=M[i][k]*M[k][i];
if(s!=0)
{
Result[i][j]=1;
}
else
Result[i][j]=0;
}
}
}
x++;
}
}
printf("请输出矩阵:\n");
for(i=0;ifor(j=0;jprintf("%d",Result[i][j]);
}
}
}
```
#include<stdio.h>
#define N 100
void matrixPow(int *M,int n,int m,int * Result);
int main()
{
int i,j,n,m;
scanf("%d %d",&n,&m);
int M[n][n];
int Result[n][n];
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&M[i][j]);
//Result[i][j]=0;
}
} //录入二维矩阵
matrixPow(&M[0][0],n,m,&Result[0][0]);
return 0;
}
void matrixPow(int * M,int n,int m,int * Result)
{
int i,j,k;
if(m==0) // 单位矩阵
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(i==j)
{
Result[i+j]=1;
}
else
{
Result[i+j]=0;
}
}
}
}
else if(m==1) // 原矩阵
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
Result[i+j]=M[i+j];
}
}
}
else // m至少从2开始
{
int x=2;
while(x<=m) // x计数
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
for(k=0;k<n;k++)
{
int s=0;
s+=M[i+k]*M[k+i];
if(s!=0)
{
Result[i+j]=1;
}
else
Result[i+j]=0;
}
}
}
x++;
}
}
printf("请输出矩阵:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",Result[i+j]);
}
printf("\n");
}
}
修改如下:
#include<stdio.h>
#define N 100
void matrixPow(int M[N][N],int n,int m,int Result[N][N]);
int main()
{
int i,j,n,m;
scanf("%d %d",&n,&m);
int x;
int M[N][N]; //
int Result[N][N]; //
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&M[i][j]);
//Result[i][j]=0;
}
} //录入二维矩阵
matrixPow(M,n,m,Result);
return 0;
}
void matrixPow(int M[N][N],int n,int m,int Result[N][N])
{
int i,j,k;
if(m==0) // 单位矩阵
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(i==j)
{
Result[i][j]=1;
}
else
{
Result[i][j]=0;
}
}
}
}
else if(m==1) // 原矩阵
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
Result[i][j]=M[i][j];
}
}
}
else // m至少从2开始
{
int x=2;
while(x<=m) // x计数
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
for(k=0;k<n;k++)
{
int s=0;
s+=M[i][k]*M[k][i];
if(s!=0)
{
Result[i][j]=1;
}
else
Result[i][j]=0;
}
}
}
x++;
}
}
printf("请输出矩阵:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",Result[i][j]);
}
printf("\n");
}
}
运行结果如图: