n阶行列式算法(c程序)
#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程序)的更多相关文章
- n阶行列式计算----c语言实现(完结)
花了半天时间,写了这个n阶行列式计算的程序,应该算是比较优美吧,有很多地方多次做了优化,程序占用内存不是很大,要是说小吧,也不合适,因为里边有一个递归,而且递归的深度还比较深.时间复杂度具体没有细看, ...
- C#程序计算N阶行列式的值及N元一次方程组
C#程序计算N阶行列式的值及N元一次方程组 用了挺长时间自行完成了C#程序计算N阶行列式的值及N元一次方程组.由于自己没有在网上查阅其他资料,所以只能硬着头皮用最朴素的思想和基础的算法进行编程.在给出 ...
- 基于上三角变换或基于DFS的行(列)展开的n阶行列式求值算法分析及性能评估
进入大一新学期,看完<线性代数>前几节后,笔者有了用计算机实现行列式运算的想法.这样做的目的,一是巩固自己对相关概念的理解,二是通过独立设计算法练手,三是希望通过图表直观地展现涉及的两种算 ...
- 行列式(三):n阶行列式
1.数学定义 n阶行列式定义如下: 2.算法实现 函数名: GetValue() 功能:返回一个行列式的值 Private Function GetValue() Dim gValue As Do ...
- 迈向高阶:优秀Android程序员必知必会的网络基础
1.前言 网络通信一直是Android项目里比较重要的一个模块,Android开源项目上出现过很多优秀的网络框架,从一开始只是一些对HttpClient和HttpUrlConnection简易封装使用 ...
- 1014 C语言文法定义与C程序的推导过程 程序:冒泡算法C程序(语法树)
阅读并理解提供给大家的C语言文法文件. 参考该文件写出一个自己好理解版的现实版的完整版的C语言文法. 给出一段C程序,画出用上述文法产生这段C程序的完整语法树. 程序:冒泡算法C程序 点此文字查看原图 ...
- java程序员到底该不该了解一点算法(一个简单的递归计算斐波那契数列的案例说明算法对程序的重要性)
为什么说 “算法是程序的灵魂这句话一点也不为过”,递归计算斐波那契数列的第50项是多少? 方案一:只是单纯的使用递归,递归的那个方法被执行了250多亿次,耗时1分钟还要多. 方案二:用一个map去存储 ...
- moand的编程学形式:一个(高阶)类型包办程序的组织--类型关乎复合
moand的编程学形式:一个(高阶)类型完成程序的组织. 将类型系统的转换与高阶函数进行了融合,相对于链式编程而言. 类型关乎复合 范畴论与箭头的复合有关.但是并非任意两个箭头都可以复合.一个箭头的目 ...
- 线代: N阶行列式
线性变换 将 (x, y) 变成 (2 x + y, x - 3 y) 就叫做线性变换, 这就是矩阵乘法, 用于表示一切线性变换. 几何上看, 把平面上的每个点 (x, y) 都变到 (2 x + y ...
随机推荐
- leetcode599
public class Solution { public string[] FindRestaurant(string[] list1, string[] list2) { var dic = n ...
- delphi c++builder 判断工程类型 超级系统变量
d:\program files (x86)\embarcadero\studio\16.0\SOURCE\RTL\SYS\SysInit.pas ModuleIsLib: Boolean; ...
- Linux下zip格式文件的解压缩和压缩
Linux下zip格式文件的解压缩和压缩 Linux下的软件包很多都是压缩包,软件的安装就是解压缩对应的压缩包.所以,就需要熟练使用常用的压缩命令和解压缩命令.最常用的压缩格式有.tar.gz/tgz ...
- dom方式解析xml文件的步骤
使用java类即可
- Resin 的watchdog(看门狗)介绍和resin负载均衡实现
为了稳定和安全,Resin使用一个独立的watchdog进程来启动和监视Resin服务器.watchdog连续你检测Resin服务器的状态,如果其没有反应或者迟钝,将会重启Resin服务器进程.大多数 ...
- Lambda02 函数式接口
1 java8默认提供的函数式接口 1.1 Predicate /* * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rig ...
- 633. Sum of Square Numbers 是否由两个完全平方数构成
[抄题]: Given a non-negative integer c, your task is to decide whether there're two integers a and b s ...
- linux内核被加载的过程
二,linux内核被加载的过程 一,linux安装时遇到的概念解析 内核必须模块vmlinz(5M左右)不认识硬盘,原本是需要写跟loader中一样的内容,来加载非必要模块. 内核非必要的功能被编译为 ...
- Solidity notes
1. 查询transaction历史记录 https://forum.ethereum.org/discussion/2116/in-what-ways-can-storage-history-be- ...
- Entity Framework 6.0 Tutorials(8):Custom Code-First Conventions
Custom Code-First Conventions: Code-First has a set of default behaviors for the models that are ref ...