c语言求方阵的行列式、伴随矩阵算法
#include<stdio.h>
#include<math.h>
#define N 100 //N比输入的阶数大即可
int main()
{ int n,a[N][N],b[N][N],i,j;
int row_col_times(int b[N][N],int n);
void adgujate_matrix(int s[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]);
b[i][j]=a[i][j];
}//右对齐输出矩阵
printf("\n");}
printf("该矩阵的伴随矩阵是;:\n");
adgujate_matrix(b,n);//调用伴随矩阵函数
printf("该矩阵的行列式为: %d\n",row_col_times(a,n));//调用行列式乘积函数
return 0;
}
int 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];//最重要的操作
}
}
return 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;
}
void adgujate_matrix(int s[N][N],int n)
{
int b[n][n],c[N][N],f[n][n];
int i,j,k,l,a,e,g=1;
for(j=0;j<n;j++)
for(i=0;i<n;i++)
f[i][j]=s[i][j];//赋值防止改变原矩阵
for(j=0;j<n;j++)//依次找元素
{
for(i=0;i<n;i++)
{
for(k=0;k<n;k++)
for(l=j;l<n-1;l++)
{
s[k][l]=s[k][l+1];
//右边往左挪
}
for(k=i;k<n-1;k++)
for(l=0;l<n;l++)
{
s[k][l]=s[k+1][l];
//下边往上挪
}
for(k=0;k<n-1;k++)
for(l=0;l<n-1;l++)
{
c[k][l]=s[k][l];
}
if((i+j)%2==1)
g=-1;
printf("%3d",row_col_times(c,n-1)*g);
for(a=0;a<n;a++)
for(e=0;e<n;e++)
s[a][e]=f[a][e];
g=1;
}
printf("\n");
}
}
c语言求方阵的行列式、伴随矩阵算法的更多相关文章
- c语言求回文数的三种算法的描述
c语言求回文数的三种算法的描述 题目描述 注意:(这些回文数都没有前导0) 1位的回文数有0,1,2,3,4,5,6,7,8,9 共10个: 2位的回文数有11,22,33,44,55,66,77,8 ...
- c语言求平面上2个坐标点的直线距离、求俩坐标直线距离作为半径的圆的面积、递归、菲波那次数列、explode
#include <stdio.h> #include <math.h> #include <string.h> char explode( char * str ...
- 说说用C语言求根的那些事儿
C语言--求根:计算机只识别0和1,那么问题来了,作为计算工具如何解决数学问题?其实,计算机是死东西,都是程序员用计算机的的思维去加数学公式计算数学题的.听起来好高端的样子,其实啊,也就那么回事儿, ...
- 使用C语言实现二维,三维绘图算法(1)-透视投影
使用C语言实现二维,三维绘图算法(1)-透视投影 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其实想想 ...
- R语言实现︱局部敏感哈希算法(LSH)解决文本机械相似性的问题(二,textreuse介绍)
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 上一篇(R语言实现︱局部敏感哈希算法(LSH) ...
- c语言求最大公约数和最小公倍数(转)
最大公约数与最小公倍数的求解是很多初学C的人所面临的一道问题.当然这道问题并不难解答,也有很多人已经写过相关的博客,我在此书写此篇博客,一是为了让自己能够夯实基础,另外就是希望能够帮到和我一样的初学者 ...
- 深度实战玩转算法, Java语言7个经典应用诠释算法精髓
深度实战玩转算法,以Java语言主讲,通过7款经典好玩游戏,真正将算法用于实际开发,由算法大牛ACM亚洲区奖牌获得者liuyubobobo主讲,看得见的算法,带领你进入一个不一样的算法世界,本套课程共 ...
- 使用C语言实现二维,三维绘图算法(3)-简单的二维分形
使用C语言实现二维,三维绘图算法(3)-简单的二维分形 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其 ...
- 使用C语言实现二维,三维绘图算法(2)-解析曲面的显示
使用C语言实现二维,三维绘图算法(2)-解析曲面的显示 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其 ...
随机推荐
- 大楼轮廓 · building-outline
[抄题]: 水平面上有 N 座大楼,每座大楼都是矩阵的形状,可以用一个三元组表示 (start, end, height),分别代表其在x轴上的起点,终点和高度.大楼之间从远处看可能会重叠,求出 N ...
- static变量和static函数
在C语言编程中,static的一个作用是信息屏蔽! 比方说,你自己定义了一个文件 -- 该文件中有一系列的函数以及变量的声明和定义! 你希望该文件中的一些函数和变量只能被该文件中的函数使用,那么,你可 ...
- Java 设计模式系列(十五)观察者模式(Observer)
Java 设计模式系列(十五)观察者模式(Observer) Java 设计模式系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) Java ...
- 中介者模式c#(媒婆版)
using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace 中介者模式{ ...
- Spring boot——logback.xml 配置详解(二)
阅读目录 1 根节点包含的属性 2 根节点的子节点 文章转载自:http://aub.iteye.com/blog/1101260,在此对作者的辛苦表示感谢! 回到顶部 1 根节点<config ...
- SpringCloud之自动化配置-config
编程开发的时候有没有觉得很多配置文件需要维护,比如,修改了数据库连接,所有用到该数据库的服务配置都得替换,是不是超级的麻烦呢 下面,给大家介绍一下Spring提供的配置自动化组件-spring clo ...
- ACTIVITI 5.14事件监听器的BUG
在ACTIVITI 5.14中,测试内部子流程时发现事件定义的事件监听器不能触发. <activiti:executionListener event="start" del ...
- UVa 1606 Amphiphilic Carbon Molecules (扫描法+极角排序)
题意:平面上有 n 个点,每个点不是黑的就是白的,现在要放一个隔板,把它们分成两部分,使得一侧的白点数加上另一侧的黑点数最多. 析:这个题很容易想到的就是暴力,不妨假设隔板至少经过两个点,即使不经过也 ...
- Shell编程-03-Shell中的特殊变量和扩展变量
目录 特殊变量 变量扩展 特殊变量 在Shell中的特殊变量主要分别两种位置参数变量.状态变量两种. 位置参数变量 Shell中的位置参数变量主要是指$0.$1.$#等,主要用于从命令 ...
- Appium之连续启动多个应用(APP)
我们知道Appium应用启动时自带的caps可以先行启动某个应用(基于appPackage和appActivity),那么如何用其连续启动多个应用呢? 这里就需要用到start_activity()方 ...