#include<stdio.h>

#include<math.h>

#define N 100 //N比输入的阶数大即可

int main()

{   int n,a[N][N],i,j;

void row_col_times(int b[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]);}//右对齐输出矩阵

printf("\n");}

row_col_times(a,n);//调用行列式乘积函数

return 0;

}

void 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];//最重要的操作

}

}

printf("the det of array is:%d",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;

}

/*本程序的构建利用了初等变换下行列式的的不变性

和下三角方阵行列式的公式,并添加了个人的思维方式。

望不吝赐教*/

n阶行列式算法(c程序)的更多相关文章

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

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

  2. C#程序计算N阶行列式的值及N元一次方程组

    C#程序计算N阶行列式的值及N元一次方程组 用了挺长时间自行完成了C#程序计算N阶行列式的值及N元一次方程组.由于自己没有在网上查阅其他资料,所以只能硬着头皮用最朴素的思想和基础的算法进行编程.在给出 ...

  3. 基于上三角变换或基于DFS的行(列)展开的n阶行列式求值算法分析及性能评估

    进入大一新学期,看完<线性代数>前几节后,笔者有了用计算机实现行列式运算的想法.这样做的目的,一是巩固自己对相关概念的理解,二是通过独立设计算法练手,三是希望通过图表直观地展现涉及的两种算 ...

  4. 行列式(三):n阶行列式

    1.数学定义   n阶行列式定义如下: 2.算法实现 函数名: GetValue() 功能:返回一个行列式的值 Private Function GetValue() Dim gValue As Do ...

  5. 迈向高阶:优秀Android程序员必知必会的网络基础

    1.前言 网络通信一直是Android项目里比较重要的一个模块,Android开源项目上出现过很多优秀的网络框架,从一开始只是一些对HttpClient和HttpUrlConnection简易封装使用 ...

  6. 1014 C语言文法定义与C程序的推导过程 程序:冒泡算法C程序(语法树)

    阅读并理解提供给大家的C语言文法文件. 参考该文件写出一个自己好理解版的现实版的完整版的C语言文法. 给出一段C程序,画出用上述文法产生这段C程序的完整语法树. 程序:冒泡算法C程序 点此文字查看原图 ...

  7. java程序员到底该不该了解一点算法(一个简单的递归计算斐波那契数列的案例说明算法对程序的重要性)

    为什么说 “算法是程序的灵魂这句话一点也不为过”,递归计算斐波那契数列的第50项是多少? 方案一:只是单纯的使用递归,递归的那个方法被执行了250多亿次,耗时1分钟还要多. 方案二:用一个map去存储 ...

  8. moand的编程学形式:一个(高阶)类型包办程序的组织--类型关乎复合

    moand的编程学形式:一个(高阶)类型完成程序的组织. 将类型系统的转换与高阶函数进行了融合,相对于链式编程而言. 类型关乎复合 范畴论与箭头的复合有关.但是并非任意两个箭头都可以复合.一个箭头的目 ...

  9. 线代: N阶行列式

    线性变换 将 (x, y) 变成 (2 x + y, x - 3 y) 就叫做线性变换, 这就是矩阵乘法, 用于表示一切线性变换. 几何上看, 把平面上的每个点 (x, y) 都变到 (2 x + y ...

随机推荐

  1. Tornado 高并发源码分析之四--- HTTPServer 与 TCPServer 对象

    主要工作: 服务器启动的时候做的事: 1.把包含了各种配置信息的 application 对象封装到了 HttpServer 对象的 request_callback 字段中,等待被调用 2.TCPS ...

  2. Timer定时函数的用法

  3. Python三元运算和lambda表达式

    一.三元运算 1.定义:三元运算是if-else 语句的快捷操作,也被称为条件运算. 2.结构: [on_true]  if  [expression]  else  [on_false] 3.示例: ...

  4. 刷题向》图论》BZOJ1001 平面图最大流、平面图最小割、单源最短路(easy+)

    坦白的说这是一道水题,但是因为是BZOJ上的1001,所以这道题有着特殊的意义. 关于最大流转最短路的博客链接如下:关于最大流转最短路两三事 这道题的图形很规矩,所以建边和建点还是很简单的. 题目如下 ...

  5. mongo 修改器 $inc/$set/$unset/$pop/$push/$pull/$addToSet

    mongo $inc 可以对集合里面的某些值是数字的增减.看代码 $set  可以进行修改,并且不存在的时候默认添加. 同时还能该变数据的类型. 还可以该变内嵌元素的值 用.调用 $unset  删除 ...

  6. PHP程序员求职经验总结

    这次来深圳找工作,是我人生中第一次正式的求职,也是第一份正式的工作.这几天收获不少,总结一下,"供后人参考"; 从7月23来深圳到今天刚好一个星期,这7天内我发了18封求职邮件,在 ...

  7. 11-内涵段子-爬虫(python+正则)

    爬取内涵段子,使用正则进行简单处理: #_*_ coding: utf-8 _*_ ''' Created on 2018年7月14日 @author: sss function:爬去内涵段子(静态网 ...

  8. 树形DP-----HDU4003 Find Metal Mineral

    Find Metal Mineral Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Other ...

  9. 图的遍历——DFS

    原创 图的遍历有DFS和BFS两种,现选用DFS遍历图. 存储图用邻接矩阵,图有v个顶点,e条边,邻接矩阵就是一个VxV的矩阵: 若顶点1和顶点5之间有连线,则矩阵元素[1,5]置1,若是无向图[5, ...

  10. Android Activity的切换动画(overridePendingTransition)

    overridePendingTransition 1.平时Activity的切换是就是从中间弹出来,然后遮盖住之前的Activity.这种效果看到很多后就想给他换成其他的效果,如: 要显示的Acit ...