n阶行列式计算----c语言实现(完结)
看我的程序运行的截图:
ok,先看程序。
C Code
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
106
107
|
#include <malloc.h>
#include <stdio.h> #include <stdlib.h>//包含的头文件不解释 typedef bool int //因为标准c里边没有bool类型才这么做 #define false 0 #define true 1 //定义几个全局变量,无奈之举 int * c, //将整个行列式的值存到c指向的空间里 n = , //记录当前的行列式计算进行了多少步 a, //方便传递行列式的阶数 sum = ; //记录每一步行列式计算所累加的结果 int aq(int a) //计算阶乘的函数,就不多解释了 { ; ; i <= a; i ++) s *= i; return s; } void swap(int * a, int * b)//利用地址传递,交换两个数的值 { int m =* a; * a = * b; *b = m; } bool sa(int * l)//计算在行列式计算过程中每一项前边的符号是正还是负 { ;//n为行列式展开式每一项的逆序数 ; i < a-; i ++) ; j < a; j++) if(l[i]>l[j])n++;//不断通过条件判断累加逆序数得出最终的逆序数 ) return false;//若为正,则返回false return true;//否则返回true } void perm(int * l,int k,int m)//整个程序里边的核心函数,找出在不同行不同列的所有组合 { ; if(k > m) { n++;//每递归回来一次,将记录运行次数加一 ; j < a; j ++) s *= c[ l[ j ] + a * j ];//算出此次行列式展开式的这项的值 ;//确定这一项的符号 //输出当前sum内的值(即到当前为止所得到的结果是多少) //输出运行的完成程度(即当前运行的次数除以总次数) printf(.1 ) * 10 ); } else //不断的向内递归,就不多解释了,因为很多大公司招聘的时候,全排列问题在笔试环节是必出题,百度里有很多解释 { for(i = k; i <= m; i++) { swap(l + k, l + i); perm(l, k + , m); swap(l + k, l + i); } } } void 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 ); ; i < a; i++) * ( b + i ) = i;//为辅助变量也即行列式下标逐个赋值 ; i < a * a; i++) { if( i % a == 0 ) printf("请依次输入行列式中第%d行的值(以空格分隔):\n",i / a + 1 );//提示输入行列式的值 scanf("%d", c + i ); } printf("\n\n"); perm( b, , a - 1 );//计算行列式的值 printf("\n行列式展开式共有%d项\n", aq( a ) );//打印出来行列式的各种信息 ;//判断当前的行列式是偶数行还是奇数行 else f = a; ; i < a * a; i ++ ) { ) //判断是否达到行列式中间的一行行首 printf("D = ");//输出“D = ” ) //判断是否是每一行的行首,若是则输出四个空格,保证输出的格式优美 printf(" "); ) //判断是否是行首,若是输出制表符竖线,可与上一句写到一块儿 printf("┃"); ) //判断是否是行列式某一行的最后一个数 printf("%2d", * ( c + i ) ); else printf("%2d ", * ( c + i ) );//若不是行列式某一行的最后一个数则在数字后边加一个空格 if ( ( i + 1 ) % a == 0 ) //判断是否到达一行的行末 printf("┃"); ) //判断是否达到行列式中间一行的行末,输出整个行列式的值 printf(" = %d\n",sum); else if ( ( i + 1 ) % a == 0 ) //判断是否到达行末输出换行 printf("\n"); } printf("\n\n"); printf("是否继续?( 1 / 0 )\n");//提示是否退出 scanf("%d", &e); n = 0;//每次都将都将上一次的运行记录消除 if( e ==1 ) goto u;//判断是否推出 else if ( e == 0 ) exit( 0 ); } |
里边还有好多地方可以调整,若有更好的调整方法,请联系我,不胜感激。
n阶行列式计算----c语言实现(完结)的更多相关文章
- n阶行列式计算
1.化为上下三角 该类型的矩阵.行列式在之前写过(https://www.cnblogs.com/wangzheming35/p/12906624.html),也建议记住这个行列式的结论. 当然不仅仅 ...
- C#程序计算N阶行列式的值及N元一次方程组
C#程序计算N阶行列式的值及N元一次方程组 用了挺长时间自行完成了C#程序计算N阶行列式的值及N元一次方程组.由于自己没有在网上查阅其他资料,所以只能硬着头皮用最朴素的思想和基础的算法进行编程.在给出 ...
- MyMathLib系列(行列式计算)
靠人不如靠己,准备做自己得MathLib,在学校的时候,就想过把数学数理的东西都计算机化.但一直没有时间去做这件事情,如今认为空余 时间比較闲,就做做这件事情,先从线性代数開始,毕竟这里面的非常多算法 ...
- MyMathLib系列(行列式计算2)
/// <summary> /// 行列式计算,本程序属于MyMathLib的一部分.欢迎使用,參考,提意见. /// 有时间用函数语言改写,做自己得MathLib,里面的算法经过验证,但 ...
- 基于上三角变换或基于DFS的行(列)展开的n阶行列式求值算法分析及性能评估
进入大一新学期,看完<线性代数>前几节后,笔者有了用计算机实现行列式运算的想法.这样做的目的,一是巩固自己对相关概念的理解,二是通过独立设计算法练手,三是希望通过图表直观地展现涉及的两种算 ...
- 线代: N阶行列式
线性变换 将 (x, y) 变成 (2 x + y, x - 3 y) 就叫做线性变换, 这就是矩阵乘法, 用于表示一切线性变换. 几何上看, 把平面上的每个点 (x, y) 都变到 (2 x + y ...
- TOJ4537: n阶行列式
4537: n阶行列式 Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByteTotal Submit: 28 ...
- 行列式计算(C#)
最近几天学习高等代数老师说要写个程序算行列式的结果,闲来无事就简单写了一下. 不多说了,上代码 using System; using System.Collections.Generic; usin ...
- 行列式(三):n阶行列式
1.数学定义 n阶行列式定义如下: 2.算法实现 函数名: GetValue() 功能:返回一个行列式的值 Private Function GetValue() Dim gValue As Do ...
随机推荐
- 个人vim配置(.vimrc文件分享)
syntax enable syntax on colorscheme desert set nu! set nowrap set nobackup set backspace= set tabsto ...
- Python web.py 实例和源码分析:
示例: http://jyd.me/python/cookie-and-session/ simple to do:http://simple-is-better.com/news/309 http: ...
- perl dbi 测试 mysql wait_timeout
The number of seconds the server waits for activity on a noninteractive connection before closing it ...
- Linux系统编程(27)——线程控制
进程在各自独立的地址空间中运行,进程之间共享数据需要用mmap或者进程间通信机制,那么如何在一个进程的地址空间中执行多个线程呢.有些情况需要在一个进程中同时执行多个控制流程,这时候线程就派上了用场,比 ...
- HDOJ 1279 验证角谷猜想
Problem Description 数论中有许多猜想尚未解决,其中有一个被称为"角谷猜想"的问题,该问题在五.六十年代的美国多个著名高校中曾风行一时,这个问题是这样描述的:任何 ...
- 【2012长春区域赛】部分题解 hdu4420—4430
这场比赛特点在于两个简单题太坑,严重影响了心情..导致最后只做出两题....当然也反映出心理素质的重要性 1002: 题意:一个矩阵b[n][n]通过数组 a[n]由以下规则构成,现在已知b[n][n ...
- HDU5125--magic balls(LIS)
题意:求a数组的LIS,但是加了一个条件,为了LIS最大 b[i] a[i]可以交换.最多交换mci: 赤果果的dp啊,可是这个题用线段树的话却会TLE,,由于查询的只是1-x的最大值 因此我们可以用 ...
- poj2955:括号匹配,区间dp
题目大意: 给一个由,(,),[,]组成的字符串,其中(),[]可以匹配,求最大匹配数 题解:区间dp: dp[i][j]表示区间 [i,j]中的最大匹配数 初始状态 dp[i][i+1]=(i,i+ ...
- 简单干净的C# MVC设计案例:BrothersDropdownList()
团队切换器 在/Teams/Details?id=xxx的页面,有这样一个控件,使得不需要回到/Teams/Index就能轻松切换团队: 由于这种团队切换控件比比皆是,比如在团队故事板中(以及其他地方 ...
- mysql命令行里的加载更多显示
mysql> pager morePAGER set to 'more'mysql> pager lessPAGER set to 'less'mysql> nopagerPAGER ...