写在前面,大二生活刚开始,有点空闲时间,线性代数刚学完行列式,借此机会复习一下(手动滑稽)。

好的,计算行列式的方法相信大家都会,这里使用按行(列)展开(降阶法),不要问我为啥不用定义算,因为不会……

为了简化代码,这里只用第一列展开的结果,当然用任意列(行)步骤和结果都是一样的哈。那么就附上代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 10
int Det(int n, int a[N][N])//Det为行列式的简称,函数的作用是计算n阶行列式的值
{
  int b[N][N]={0},i,j,k,sign=0,cnt=0;//定义二维数组b,用来存放行列式的每一个元素;sign用来判断移动方向,cnt用来计算行列式的值
  if(n==1)
    return a[0][0];
  for(i=0;i<n;i++)//将第一列元素的余子式存入二维数组b中
  {
    for(k=0;k<n-1;k++)
    {
        for(j=0;j<n-1;j++)
        {
          if (k<i)//a[k][j]位于第i行的上方,只需将a[k][j]中的元素依次右移
              sign=0;
          else //a[k][j]位于第i行或其下方,则需进行右移和下移
              sign=1;
          b[k][j]=a[k+sign][j+1];//执行移动操作,实现余子式的存储
        }
    }
    cnt+=a[i][0]*Det(n-1,b)*pow(-1,i);//余子式的系数为-1的i+j次方,而j=0;使用递归,将第一列元素的代数余子式之和存入cnt,cnt的值即为行列式的值
  }
  return cnt;//函数的返回值cnt即为n阶行列式的值
}
int main(void)
{
  int i,j,n=0,a[N][N]={0}; 
  scanf("%d",&n);
  while(n>0)//n的值必须大于0
  {
    for(i=0;i<n;i++)
      for(j=0;j<n;j++)
        scanf("%d",&a[i][j]);//读入行列式
    printf("%d\n",Det(n,a));//输出行列式的值
    scanf("%d",&n);//可以连续计算多个行列式的值,直到n<=0时结束程序
  }
}

最后贴上一张图片,成功水完一篇博客