c语言求方阵的行列式、伴随矩阵算法
#include<stdio.h>
#include<math.h>
#define N 100 //N比输入的阶数大即可
int main()
{ int n,a[N][N],b[N][N],i,j;
int row_col_times(int b[N][N],int n);
void adgujate_matrix(int s[N][N],int n);
printf("请输入方阵阶数:\n");
scanf("%d",&n);
printf("请输入%d阶的方阵(用空格隔开)\n",n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
printf("您输入的%d阶方阵是:\n");
for(i=0;i<n;i++)
{for(j=0;j<n;j++)
{printf("%3d",a[i][j]);
b[i][j]=a[i][j];
}//右对齐输出矩阵
printf("\n");}
printf("该矩阵的伴随矩阵是;:\n");
adgujate_matrix(b,n);//调用伴随矩阵函数
printf("该矩阵的行列式为: %d\n",row_col_times(a,n));//调用行列式乘积函数
return 0;
}
int row_col_times(int b[N][N],int n)
{ int change_col(int c[N][N],int n,int i);
int product(int d[N][N],int n,int p);
int i,j,k,p=0;
for(i=0;i<n-1;i++)//i为阶数
{
if(b[i][i]==0)//当对角线元素为零时调换列
{ p=p+change_col(b,n,i);}
for(j=i+1;j<n;j++)//j指列
{
for(k=i+1;k<n;k++)//k指行
b[k][j]=b[k][j]*b[i][i]-b[k][i]*b[i][j];//最重要的操作
}
}
return product(b,n,p);
}
int change_col(int c[N][N],int n,int i)
{ int temp,j,k,flag=0;
for(k=i;k<n;k++)//k指列
{ if(c[i][k]!=0)
{
for(j=i;j<n;j++)//j指行
{
temp=c[j][i];
c[j][i]=c[j][k];
c[j][k]=temp;//调换列
}
flag++;//列调换符号记录
break;
}
}
return flag;//返回调换符号记录数
}
int product(int d[N][N],int n,int p)
{ int product=1,i;
for(i=0;i<n;i++)
product=product*d[i][i];//对角线乘积
for(i=0;i<n-1;i++)
product=product/pow(d[i][i],n-i-1);//除回来
product=product*pow(-1,p);//乘上列调换符号
return product;
}
void adgujate_matrix(int s[N][N],int n)
{
int b[n][n],c[N][N],f[n][n];
int i,j,k,l,a,e,g=1;
for(j=0;j<n;j++)
for(i=0;i<n;i++)
f[i][j]=s[i][j];//赋值防止改变原矩阵
for(j=0;j<n;j++)//依次找元素
{
for(i=0;i<n;i++)
{
for(k=0;k<n;k++)
for(l=j;l<n-1;l++)
{
s[k][l]=s[k][l+1];
//右边往左挪
}
for(k=i;k<n-1;k++)
for(l=0;l<n;l++)
{
s[k][l]=s[k+1][l];
//下边往上挪
}
for(k=0;k<n-1;k++)
for(l=0;l<n-1;l++)
{
c[k][l]=s[k][l];
}
if((i+j)%2==1)
g=-1;
printf("%3d",row_col_times(c,n-1)*g);
for(a=0;a<n;a++)
for(e=0;e<n;e++)
s[a][e]=f[a][e];
g=1;
}
printf("\n");
}
}
最新文章
- Go收藏
- 安装Portal for ArcGIS时如何正确配置HTTPS证书
- javascript DOM对象
- 关于PHP HTML <;input type=";file"; name=";img";/>;上传图片,图片大小,宽高,后缀名。
- 去掉NavigationBar底部的黑线
- Python并发与并行的新手指南
- Careercup - Facebook面试题 - 5998719358992384
- JDBC事务控制管理
- Java SE 6 新特性: 编译器 API
- Web之CSS开发技巧: CSS @media
- JavaWeb学习笔记--HttpServletRequest、HttpServletResponse对象常用方法
- openStack开源云repo db local or on-line 实战部署之Ruiy王者归来
- linux内核之网络协议栈
- Delphi使用Zint生成QR二维条码(zint.dll)
- npm 如何安装npm包
- java基础中this,super
- jenkins centos slave起不来报错The SSH key presented by the remote host does not match the key saved in the Known Hosts file against this host. Connections to this host will be denied until the two keys mat
- SPOJ COT Count on a tree(树上主席树 + LCA 求点第k小)题解
- Android包管理机制(一) PackageInstaller的初始化
- 遍历map中的内容