//程序为求矩阵(方阵)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;
}
您用什么方法求得,我想说看我的方法哪里错误了,我的程序在求矩阵平方的时候没错,但是当n大于2的时候,比如等于3的时候就错了,出现一堆垃圾数字,是为什么呢,主要看一下我的递归方法,AfacN是否正确和到底哪里出错了呢
本回答被网友采纳