在这里向大家介绍两种实现n阶行列式计算的方法

目录

1.展开法

2.全排列法


一.展开法:

展开法的实现思想就是利用递归不断将行列式某一行或者某一列的n-1个(假设行列式为n行n列)置为0,剩余一个置为1,并不断展开进行计算,接下来让我们来看看代码

​
​
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
double Getnum(double arr[][20], int n)
{if (n == 1)return arr[0][0];if (n == 2) //若行列式行列数只剩下2,则使用交叉相乘计算并返回值return arr[0][0] * arr[1][1] - arr[0][1] * arr[1][0];for (int i = 0; i < n; i++){arr[i][n - 1] = arr[i][n - 1] / arr[n - 1][n - 1];  //将arr[n-1][n-1]赋值为1}double flag = arr[n - 1][n - 1];  //将最后一行的值赋为0(除最后一个数之外)for (int i = 0; i < n ;i++)for (int j = 0; j < n-1; j++){arr[i][j] = arr[i][j] - arr[i][n-1] * arr[n-1][j];     //原理为将行列式每一列与k倍(n-1)列相减,其中k值为最后一行的第j列元素,当循环到最后一行时,// 因为arr[n-1][n-1]等于1,所以最后一行的n-1个元素结果会为0}return flag * pow(-1.0, 2*n - 2)*Getnum(arr, n - 1);  //行列数减少一,进入新的行列式展开
}int main()
{int n;double arr[20][20]; //存储行列式的值int i = 0;int j = 0;scanf("%d", &n);for (i = 0; i < n;i++)for (j = 0; j < n; j++){scanf("%d", &arr[i][j]);}double result = Getnum(arr, n);  //获取行列式计算结果printf("%.0f\n", result);return 0;
}​​

二.全排列法

全排列法的实现思想也是递归,将各行不同列的元素实现所有的排序方式并进行计算相加,接下来也让我们来看看代码

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>int result = 0;    //定义全局变量记录行列式的值void Swap(int *a, int *b)   //交换数值
{int temp = *a;*a = *b;*b = temp;
}int Mark(int No[],int n)    // 判断行列式相乘的符号正负
{int i = 0;int j = 0;int count = 0;for (i = 0; i < n - 1;i++)for (j = i+1; j < n; j++){if (No[i] > No[j])     //按照相乘数列顺序不同列计算逆序数{count++;}}if (count % 2)     {return 1;}elsereturn 0;
}void GetResult(int value[][20],int No[], int k, int n)
{int sum = 1;   //记录每次计算的值if (k == n - 1){for (int i = 0; i < n; i++){sum *= value[i][No[i]];  //无论全排列下标的值如何,相乘数之间的列数肯定不同}if (Mark(No,n))   //获取符号正负{sum *= -1;}result += sum;  }for (int i = k; i < n; i++)    //将行列式下标值前n个值进行实现全排列{Swap(&No[k], &No[i]);GetResult(value,No, k + 1, n);Swap(&No[k], &No[i]);}}int main()
{int n;printf("请输入阶数: ");scanf("%d", &n);      // 行列式阶数int value[20][20];    // 存储行列式的值  int No[20];          // 记录行列式下标值for (int i = 0; i < n; i++){No[i] = i;                      //为行列式下标赋值}for (int i = 0; i < n; i++){printf("请输入第%d的值", i + 1);for (int j = 0; j < n; j++){scanf("%d", &value[i][j]);         //为行列式赋值}}GetResult(value,No,0,n); //获取行列式的值printf("行列式的值为:\n");printf("%d\n ", result);
}

C语言展开法和全排列法实现n阶行列式计算相关推荐

  1. n阶行列式计算----c语言实现(完结)

    花了半天时间,写了这个n阶行列式计算的程序,应该算是比较优美吧,有很多地方多次做了优化,程序占用内存不是很大,要是说小吧,也不合适,因为里边有一个递归,而且递归的深度还比较深.时间复杂度具体没有细看, ...

  2. 线性代数行列式计算之元素拆分与凑项法

    线性代数行列式计算之拆分凑项法 声明与简介 线性代数行列式计算之拆项法与凑项法是行列式计算里的小技巧,拆项法是能应用行列式可变成多个行列式的性质,凑项法则是将现有行列式凑成拆项法以便计算最终结果. 拆 ...

  3. R语言编写自定义函数计算R方、使用自助法Bootstrapping估计多元回归模型的R方的置信区间、可视化获得的boot对象、估计单个统计量的置信区间、分别使用分位数法和BCa法

    R语言编写自定义函数计算R方.使用自助法Bootstrapping估计多元回归模型的R方的置信区间.可视化获得的boot对象.估计单个统计量的置信区间.分别使用分位数法和BCa法(Bootstrapp ...

  4. 梯形法 微积分 c语言,关于 用辛普森法和梯形法求微积分的 程序!

    共回答了8个问题采纳率:87.5% 1. 目的: (1)通过求定积分的程序设计,使学生理解和掌握C++语言的函数.函数指针等设计方法,培养学生综合利用C++语言解决数学计算问题,使学生将所学知识转化为 ...

  5. C语言冒泡法和选择排序法

    C语言冒泡法和选择排序法 1.冒泡法代码 #include<stdio.h> int main() {int a[3];int p,i,tmp;for(i=0;i<3;i++)sca ...

  6. 选择排序法和冒泡排序法

    选择排序法和冒泡排序法 1.选择排序法(以从小到大排序为例) 算法思想: A.在未排序序列中找到最小(大)元素,存放到排序序列的起始位置 B.从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序 ...

  7. 数据结构源码笔记(C语言):分块法查找

    //实现分块法查找的算法#include<stdio.h> #include<malloc.h> #include<malloc.h>#define MAXL 10 ...

  8. Algorithm:C++语言实现之贪心法算法相关问题

    Algorithm:C++语言实现之贪心法算法相关问题 目录 一.贪心法 一.贪心法 1.LIS的算法分析

  9. 操作系统之进程调度——优先权法和轮转法(附上样例讲解)

    操作系统之进程调度--优先权法和轮转法(附上样例讲解) 操作系统之银行家算法-详解流程及案例数据 操作系统之多线程编程-读者优先/写者优先详解 操作系统之存储管理--FIFO算法和LRU算法 操作系统 ...

最新文章

  1. 大众点评开源监控CAT概览
  2. CPU是怎样制造的?解析intel Core i7生产全过程
  3. 开工的欲望 | AI Studio上线新功能,用你的模型生成在线预测服务
  4. php ci model条件查询,Laravel关系模型指定条件查询方法
  5. 023 -uniApp
  6. 23. PHP include and require 文件
  7. 实现微信摇一摇部分功能
  8. gif android 点击 加载,Android两种简单的加载GIF图片的方法
  9. chromeOS介绍
  10. 用Excel做时间顺序的行为流程图
  11. jzoj4245. 【五校联考6day2】er (B组——Day11)
  12. c语言中ifelse语句的例子,ifelse语句例子
  13. 京东商品长图功能来啦 不用改图一键生成长图
  14. Mac电脑优点是什么,缺点是什么?
  15. 迎国庆,2021新款苹果 iPad,包邮送一台!
  16. php计算问卷分数,php 问卷调查结果统计
  17. python爬取电影天堂
  18. Nginx+FFmpeg rtsp转flv实时预览
  19. Wiznote—为知笔记在Ubuntu上的安装
  20. cmatrix黑客帝国屏保

热门文章

  1. Microsoft Visual Studio Installer Projects下载缓慢下载不动的解决办法
  2. 高性能架构学习路线图-分布式架构演进
  3. word+正则表达式==快速批量添加图注题注(保姆级图文)
  4. 线性代数学习笔记——习题课——特征值与特征向量
  5. webrtc 的回声抵消(aec、aecm)算法简介(转)
  6. 剖析Android开发未来的出路在哪里,这原因我服了
  7. duck typing java_進一步思考Duck typing
  8. Linux服务器集群LVS
  9. (25):SPA单页面的理解
  10. 一文教你搞懂C语言的Q格式使用