关于c语言求n阶矩阵n次方的程序,求高手纠错,代码如下,必重谢

//程序为求矩阵(方阵)A的N次方

//难点:二维数组和指向二维数组指针的输入和输出
//怎样定义返回二维数组的指针,或直接接受二维数组
//怎样通过数组指针将数组值输出?
#include <stdio.h>

int n1,n2; //定义全局变量,n1接收矩阵的阶数,n2接收矩阵的n次方

typedef int (*R)[10]; //说明R是指向整型二维数组的指针

R multiply(R r1,R r2) //定义函数计算两矩阵乘积,返回值为二维数组
{
int sum=0,i,j,k;
int b[10][10]; //b矩阵的大小与a一致
for(i=0;i<n1;i++)
{
for(k=0;k<n1;k++)
{
for(j=0;j<n1;j++)
{
sum=sum+(r1[i][j])*(r2[j][k]);
}
b[i][k]=sum;
sum=0; //每次之后要把sum的值归0
}
}
R pp=b;
return pp; //二维数组名b不是代表二维数组地址吗?

}

R AfacN(R r,int n) //定义函数求A的阶乘,利用递归法,n表示阶乘数,返回值为二维数组
{

if(n>2)
{
return multiply( r,AfacN(r,n-1) );
}
else if(n==2)
{
return multiply(r,r);
}
}

int main()
{

printf("输入几阶方阵:\n");
scanf("%d",&n1);
printf("输入方阵的几次方\n");
scanf("%d",&n2);

int a[10][10],result[10][10];
printf("输入矩阵值:\n");
int i,j;
for(i=0;i<n1;i++)
{

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

R ppp=AfacN(a,n2);

for(i=0;i<n1;i++)
{
for(j=0;j<n1;j++)
{
printf("%d ", *( ( *(ppp+i)+j ) ) );
}
printf("\n");

} //将结果矩阵输出

return 0;
}

第1个回答  2016-10-19
#define N 4
#include <stdio.h>
#include <stdlib.h>
void main()
{
int i,j,m,n,s,t,k=1;
double a[N][N],f=1,c,x,sn;
for (i=0;i<N;i++)
for (j=0;j<N;j++)
scanf ("%lf",&a[i][j]);
for (i=0,j=0;i<N&&j<N;i++,j++)
{
if (a[i][j]==0)
{
for (m=i;a[m][j]==0;m++);
if (m==N)
{
sn=0;
printf("detA=%lf\n",sn);
exit(0);
}
else
for (n=j;n<N;n++)
{
c=a[i][n];
a[i][n]=a[m][n];
a[m][n]=c;
}
k*=(-1);
}
for (s=N-1;s>i;s--)
{
x=a[s][j];
for (t=j;t<N;t++)
a[s][t]-=a[i][t]*(x/a[i][j]);
}
}
for (i=0;i<N;i++)
f*=a[i][i];
sn=k*f;
printf ("detA=%lf\n",sn);
}追问

您用什么方法求得,我想说看我的方法哪里错误了,我的程序在求矩阵平方的时候没错,但是当n大于2的时候,比如等于3的时候就错了,出现一堆垃圾数字,是为什么呢,主要看一下我的递归方法,AfacN是否正确和到底哪里出错了呢

本回答被网友采纳
相似回答