标签:
很久没有写过C语言,今天写了一个关于矩阵的算法
完整代码如下:
#include<atlstr.h> #include<iostream> #include<string> using namespace std; //创建矩阵 float **Creat(int n) { float **array=new float*[n]; for(int i=0;i<n;i++) { array[i]=new float[n]; } printf("请输入矩阵:\n"); for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { cin>>array[i][j]; } } return array; } //求行列式的值: float Value(float **array,int n) { float Result=0; if(n==1) return array[0][0]; float **temp=new float*[n-1]; for(int i=0;i<n-1;i++) { temp[i]=new float[n-1]; } for(int i=0;i<n;i++) { for(int j=0;j<n-1;j++) { for(int k=0;k<n-1;k++) { int flag; if(j<i) flag=0; else flag=1; temp[j][k]=array[j+flag][k+1]; } } int flag2=-1; if(i%2==0) flag2=1; Result+=flag2*array[i][0]*Value(temp,n-1); } return Result; } //求逆矩阵: 伴随矩阵行列式的值除以行列式的值 float **GetMarin(float **array,int n) { float **resultMarin=array; float resultSum=Value(array,n); float **temp=new float*[n-1]; for(int i=0;i<n-1;i++) { temp[i]=new float[n-1]; } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { for(int k=0;k<n-1;k++) { for(int m=0;m<n-1;m++) { int flag1=0; int flag2=0; if(k<i) flag1=0; else flag1=1; if(m<j) flag2=0; else flag2=1; temp[k][m]=array[k+flag1][m+flag2]; } } int flag3=-1; if((i+j)%2==0) flag3=1; resultMarin[j][i]=(float)flag3*Value(temp,n-1)/resultSum; } } return resultMarin; } void OutPut(float **array,int n) { printf("逆矩阵:\n"); for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { printf("%f ",array[i][j]); } printf("\n"); } } void Test() { printf("请输入你想输入矩阵的阶数:"); int n; cin>>n; float **array=Creat(n); float Result=Value(array,n); printf("行列式的值=%f\n",Result); if(Result==0) printf("该矩阵没有逆矩阵\n"); else { float **resultMarin=GetMarin(array,n); OutPut(resultMarin,n); } Test(); } void main() { Test(); }
运行结果:
标签:
原文地址:http://www.cnblogs.com/Huaran1chendu/p/4841607.html