主要的事情发三次…

矩阵计算器

矩阵计算器

矩阵计算器

算的实在是心烦,上网找了一篇关于求n阶行列式的大佬的代码
真的是牛逼,附:大佬博客

#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>//包含的头文件不解释
#define bool int      //因为标准c里边没有bool类型才这么做
#define false 0
#define true 1
//定义几个全局变量,无奈之举
int *c;  //将整个行列式的值存到c指向的空间里
int n = 0;//记录当前的行列式计算进行了多少步
int a; //方便传递行列式的阶数
int sum = 0;   //记录每一步行列式计算所累加的结果
int aq(int a)              //计算阶乘的函数,就不多解释了
{int s = 1;for (int i = 1; i <= a; i ++)s *= i;return s;
}
void swap(int *a, int *b)  //利用地址传递,交换两个数的值
{int m = * a;* a = * b;*b = m;
}
bool sa(int *l) //计算在行列式计算过程中每一项前边的符号是正还是负
{int n = 0;//n为行列式展开式每一项的逆序数for (int i = 0; i < a - 1; i ++)for (int j = i + 1; j < a; j++)if (l[i] > l[j])n++; //不断通过条件判断累加逆序数得出最终的逆序数if (n % 2 == 0) return false; //若为正,则返回falsereturn true;//否则返回true
}
void perm(int *l, int k, int m) //整个程序里边的核心函数,找出在不同行不同列的所有组合
{int i, s = 1;if (k > m){n++;//每递归回来一次,将记录运行次数加一for (int j = 0; j < a; j ++)s *= c[ l[ j ] + a * j ];//算出此次行列式展开式的这项的值if ( sa( l ) ) s *= -1; //确定这一项的符号//输出当前sum内的值(即到当前为止所得到的结果是多少)//输出运行的完成程度(即当前运行的次数除以总次数)printf("%5d      完成度:%2.2f%%\n", sum += s, n / ( aq( a ) * 0.1 ) * 10 );}else  //不断的向内递归,就不多解释了,因为很多大公司招聘的时候,全排列问题在笔试环节是必出题,百度里有很多解释{for (i = k; i <= m; i++){swap(l + k, l + i);perm(l, k + 1, m);swap(l + k, l + i);}}
}
int main()//主函数
{int *b, //一个辅助变量,在递归函数中将b指向的空间内的值进行全排列,也即行列式展开式不同组合的下标i, //循环中的辅助变量f, //在格式化输出行列式的辅助变量e;//判断是否退出程序的标志位system("color 3e");//设置程序运行的前景色和背景色
u: system("cls");//清空屏幕printf("请输入行列式的阶数:\n");scanf("%d", &a);//获取行列式的阶数b = ( int *) malloc ( sizeof ( int ) * a ); //为变量申请空间c = ( int *) malloc ( sizeof ( int ) * a * a );for ( i = 0; i < a; i++)* ( b + i ) = i;//为辅助变量也即行列式下标逐个赋值for ( i = 0; i < a * a; i++){if ( i % a == 0 )printf("请依次输入行列式中第%d行的值(以空格分隔):\n", i / a + 1 ); //提示输入行列式的值scanf("%d", c + i );}printf("\n\n");perm( b, 0, a - 1 );//计算行列式的值printf("\n行列式展开式共有%d项\n", aq( a ) );//打印出来行列式的各种信息if ( a % 2 != 0 ) f = a + 1;//判断当前的行列式是偶数行还是奇数行else f = a;for ( i = 0; i < a * a; i ++ ){if ( i / a + 1 == f / 2 && i % a == 0) //判断是否达到行列式中间的一行行首printf("D = ");//输出“D = ”else if ( i % a == 0) //判断是否是每一行的行首,若是则输出四个空格,保证输出的格式优美printf("    ");if ( i % a == 0) //判断是否是行首,若是输出制表符竖线,可与上一句写到一块儿printf("┃");if ( ( i + 1 ) % a == 0) //判断是否是行列式某一行的最后一个数printf("%2d", * ( c + i ) );else printf("%2d ", * ( c + i ) );//若不是行列式某一行的最后一个数则在数字后边加一个空格if ( ( i + 1 ) % a == 0 ) //判断是否到达一行的行末printf("┃");if ( ( i + 1 ) / a == f / 2 && ( i + 1 ) % a == 0) //判断是否达到行列式中间一行的行末,输出整个行列式的值printf(" = %d\n", sum);else if ( ( i + 1 ) % a == 0 ) //判断是否到达行末输出换行printf("\n");}printf("\n\n");printf("是否继续?( 1 / 0 )\n");//提示是否退出scanf("%d", &e);n = 0;//每次都将都将上一次的运行记录消除sum=0;if ( e == 1 ) goto u; //判断是否推出else if ( e == 0 ) exit( 0 );
}

矩阵计算器+求线性代数n阶行列式代码相关推荐

  1. Eigen库矩阵的求逆函数无法在CUDA代码使用

    VS2019+Eigen3.3.9+CUDA11.9编译OpenMVS2.0遇到以下报错 calling a __host__ function("Eigen::MatrixBase< ...

  2. 用C++实现矩阵计算器

    Data.h #include"Function.h" //矩阵的数据结构载体 struct Matrix {int m;int n;//double**指针,为其在堆区开辟内存, ...

  3. 使用scheme语言实现n阶行列式值的计算

    利用递归计算代数余子式(的值)的思想通过scheme语言来求算n阶行列式的值. <线性代数>第六版同济大学第1章第5节介绍了行列式按行(列)展开的方法,其中提到: 引理: 一个n阶行列式, ...

  4. 【机器学习|数学基础】Mathematics for Machine Learning系列之线性代数(2):n阶行列式、对换

    文章目录 前言 1.3 n阶行列式 1.4 对换 1.4.1 排列的对换 概念 定理1 内容 证明 推论 1.4.2 行列式的另一种表示方法 定理2 内容 证明 结语 前言 Hello!小伙伴! 非常 ...

  5. 线性代数笔记2-n阶行列式

    文章目录 前言 一.简述n阶行列式的计算 二.三阶行列式按行展开 总结 三.n阶行列式的按行展开 定义 总结 注意 例题 例1 例2 四 1.下三角行列式(主对角线) 2.上三角行列式(主对角线) 3 ...

  6. 2020年李永乐线性代数强化笔记-行列式与矩阵

    2020年李永乐线性代数强化笔记-行列式与矩阵 写在前面:矩阵的秩的知识 在向量那章讲解 若需要,请移步:2020年李永乐线性代数强化笔记-向量 文章目录 1 行列式 2 矩阵 1 行列式 2 矩阵 ...

  7. matlab 求向量的交集_MATLAB矩阵列向量单位化的最快代码

    向量的单位化是指,将向量的每个元素除以向量的模(2-范数),使得向量的模(2-范数)变为1. 在机器学习.压缩感知.稀疏表现等方面,经常需要对矩阵的每个列向量进行单位化.下面对各种列向量单位化的MAT ...

  8. 矩阵计算器的c语言代码大全,用C语言实现矩阵计算器

    代码: //矩阵计算器 #include void getmatrix(int m, int n, double m1[][n], double m2[][m]); void calculate(in ...

  9. 【离散数学】求一个n阶群的全部子群(代码实现)

    这是大二上离散数学的结课大作业.当时写这个作业比较困难,主要是因为网上没有类似的东西,最后是通过求助学长得到的解决方式(感谢学长). 所以把自己的报告和代码(C/C++)放上来供大家参考.如有疏漏和错 ...

  10. 线性代数学习笔记——行列式的性质及拉普拉斯定理——2. n阶行列式的定义

    1. 二.三阶行列式的规律观察 2. n阶行列式的定义 3. 行列式与矩阵的区别与联系

最新文章

  1. In Gradle projects, always use http://schemas.andr
  2. js实现星级评分效果(非常规5个li代码)
  3. 2013江苏计算机二级vfp试题,2013年计算机二级VFP上机试题及答案解析51
  4. Leedcode8-reorder-list
  5. IdentityServer4
  6. 【转载】c++之类的基本操作(c++ primer 的读书笔记 ,类对象, 类用户, 类成员的含义)
  7. AOP的实现方式比较,cglib vs jdk
  8. CVPR 2019 论文大盘点-目标跟踪篇
  9. vis.js入门_使用TensorBoard数据Vis的TensorFlow手术分类器入门
  10. 《精解Windows8》——1.2 告别开始按钮进入“开始”屏幕时代
  11. 数据结构与算法基础-数组
  12. DotDensityRenderer
  13. python用来自动修改pdf_python实现从pdf文件中提取文本,并自动翻译的方法
  14. c语言联盟,程序设计(C语言)(山东联盟)
  15. 读《Linux运维之道》有感
  16. python爬虫之数据存储(四):MySQL数据库
  17. AnimeGAN v2:动漫风格化GAN
  18. ACMoi蓝桥杯刷题网站推荐
  19. 数据结构 斐波那契查找法(C语言)
  20. 腾讯电脑管家 v12.13正式版

热门文章

  1. python 网格搜索_网格搜索查找AUC参数
  2. 推荐24款好用的数据可视化分析工具,个个堪称神器!
  3. 大数据之路-阅读笔记
  4. vue项目安装axios
  5. Android 10 使用PreferenceScreen的方法
  6. 史上最全的芯片封装介绍
  7. 数据恢复软件分享(第二篇)
  8. 用友nc java启动不了_用友NC开发本地启动客户端时界面空白问题的解决
  9. 新一代Pascal.Net编程语言---PascalABC.Net开发平台
  10. 删除 srvinstw安装的服务