c 语言矩阵求逆算法,矩阵的逆 C 语言 算法一
#include #include
voidmain()
{inti,j;intdimension;double deterValue=1;double **array,**deterArray, **companionMatrix, *temp;//声明函数
void printfDouble2Dimension(int s, int n, double **array);double deter(int dimension, double **array);void copyDouble2Dimension(int s, int n, double **source, double **dest);void getCompanionMatrix(int dimension, double **array, double **companionMatrix);
printf("请输入方阵的阶数N:");
scanf("%d",&dimension);
array=(double**)malloc(dimension*sizeof(double*));
deterArray=(double**)malloc(dimension*sizeof(double*));
companionMatrix=(double**)malloc(dimension*sizeof(double*));//循环输入方阵
for(i=0;i
{
temp=(double*)malloc(dimension*sizeof(double));
deterArray[i]=(double*)malloc(dimension*sizeof(double));
companionMatrix[i]=(double*)malloc(dimension*sizeof(double));
printf("请输入方阵的第%d行:",i+1);for(j=0;j
scanf("%lf",temp+j);
array[i]=temp;
}//拷贝数组
copyDouble2Dimension(dimension,dimension,array,deterArray);//打印方阵
printf("方阵初等变换之前如下:\n");
printfDouble2Dimension(dimension,dimension,array);
deterValue=deter(dimension,deterArray);
printf("方阵初等变换之后如下:\n");
printfDouble2Dimension(dimension,dimension,deterArray);if(deterValue==0)
{
printf("方阵行列式值为零.\n");
system("pause");return;
}
printf("行列式的值:%.2lf\n",deterValue);//求伴随矩阵
getCompanionMatrix(dimension,array,companionMatrix);//打印伴随矩阵
printf("伴随矩阵如下:\n");
printfDouble2Dimension(dimension, dimension, companionMatrix);
system("pause");
}//求伴随矩阵
void getCompanionMatrix(int dimension, double **array, double **companionMatrix)
{inti,j,k,l,m,n,o;int flag;//标志代数余子式的符号
double **companionTemp;double deter(int dimension,double **array);
companionTemp=(double**)malloc((dimension-1)*sizeof(double*));for(i=0;i
companionTemp[i]=(double*)malloc((dimension-1)*sizeof(double));for(i=0;i
{for(j=0;j
{
flag=(i+j)%2==0?1:-1;for(k=0,m=0;k
{if(k==i)continue;for(l=0,n=0;l
{if(l==j)continue;*(*(companionTemp+m)+n) = *(*(array+k)+l);
n++;
}
m++;
}//第i行,第j列的代数余子式 赋值给第j行,第i列
*(*(companionMatrix+j)+i) = flag * deter(dimension-1,companionTemp);
}
}
}/** calculate the determinant value*/
double deter(int dimension,double **array)
{inti,j,k,l,b;int flag =1;double sum=1;doubletemp;for(i=0,j;i
{
j=i;if(*(*(array+i)+j)==0)
{
b=0;for(k=i+1;k
{if(*(*(array+k)+j)!=0)//找到一行不为0的,然后换行
{for(l=j;l
{
temp=*(*(array+k)+l);*(*(array+k)+l)= *(*(array+i)+l);*(*(array+i)+l)=temp;
}
flag*=-1;
b=1;break;
}
}if(!b)
{return 0;
}
i--;continue;
}for(;j
{if(*(*(array+j+1)+i)==0)continue;
temp= -*(*(array+j+1)+i)/ *(*(array+i)+i);for(k=i;k
}
}for(i=0;i
sum*= *(*(array+i)+i);return sum*flag;
}//打印数组
void printfDouble2Dimension(int s, int n, double **array)
{//printf("%d,%d",s,n);
inti,j;for(i=0;i
{for(j=0;j
{
printf("%6.2lf",*(*(array+i)+j));
}
printf("\n");
}
}//拷贝数组
void copyDouble2Dimension(int s, int n, double **source, double **dest)
{inti,j;for(i=0;i
{for(j=0;j
{*(*(dest+i)+j)=*(*(source+i)+j);
}
}
}
c 语言矩阵求逆算法,矩阵的逆 C 语言 算法一相关推荐
- c语言紧凑算法的内存分配,C语言(第二章.1)算法与数据结构A.ppt
C语言课件(第二章.1)算法与数据结构A资料 课程设置目的 本课程是非计算机专业学生的技术基础课,通过本课程的学习,应使学生掌握传统的结构化程序设计的一般方法,以C为语言基础,培养学生严谨的程序设计思 ...
- c语言备忘录算法矩阵链乘,矩阵链乘法(备忘录法)
/* * @fileMemoMatrixchain.cpp * @briefa solution of martrix chain with memorized way. * @author/Univ ...
- c语言求浮点数矩阵的逆程序,逆矩阵求程序!!!谢谢
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 逆矩阵.... #include void inputMatrix(int (*a)[3],int ,int ); void outputMatrix(i ...
- c语言 最小值算法,最常用的c语言算法
最常用的c语言算法 以下是YJBYS整理的关于C语言最常用的算法内容,欢迎学习.希望可以为您带来帮助! 一.基本算法 1.交换(两量交换借助第三者) 例1.任意读入两个整数,将二者的值交换后输出. m ...
- fluent算例及利用c语言程序算法,第01章 fluent简单算例17
第01章 fluent简单算例17 第一章 开始 赵玉新(国防科技大学航天学院) 注意:此文只用于流体力学的教学和科学研究,如若涉及到版权问题请于本人联系. 本章对FLUENT做了大致的介绍,其中包括 ...
- 时间片轮转算法程序c语言,时间片轮转算法和优先级调度算法 C语言模拟实现...
满意答案 真不容易啊,怕是没人弄了! 优先级调度算法程序: #include "stdio.h" #include "stdlib.h" #include &q ...
- c语言小学生算法,急求:C语言小学生算法练习软件实现的任务:面向小学生,随机选择两个整数进行加、减、乘、除,要求学生解答。设计内容:1、电...
共回答了16个问题采纳率:100% #include #include #include #include int sumScore = 0; int corrN = 0;//全局变量 //总的分数 ...
- c语言常用算法累加法例题,C语言第三次模拟练习题部分解答.docx
单项选择 号:13334 若有如下语句 int x=3; do {printf (,,%d\n/,, x-=2) ;}while(! (--x)); 则上面程序段o A.输出的是1 B.输出的是1和- ...
- 猴子偷桃c语言编程软件,c语言经典算法——猴子偷桃问题
题目:海滩上有一堆桃子,五只猴子来分.第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份.第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿 ...
最新文章
- pureftpd + pureftp-user-manager 构建磁盘配额,速率限制,web管理ftpserver
- UIBezierPath画圆弧的记录
- 苹果MAC OS X怎么安装双系统?
- highcharts图表高级入门之polar:极地图的基本配置以及一些关键配置说明
- 【机器学习】Softmax和Sigmoid
- java图片的导出,并压缩
- iis mysql cpu_[译]通过IIS Request Filtering解决SQL Server CPU高的问题
- tree(nyoj)
- 【递归】n个数的全排列
- LOUVAIN——社交网络挖掘之大规模网络的社区发现算法
- java httpsession_JavaWeb:HttpSession
- Excel被锁定,如何解锁
- 中文手机评论情感分类系列(三)
- u盘启动计算机的几种方式,U盘各种启动模式方法介绍 六种U盘启动模式
- SolidWorks宏工具介绍——初识宏工具
- win10 批量修改文件权限
- H3C交换机SSH登录配置
- 抖音死亡计算机在线测,抖音死亡计算器怎么玩?抖音死亡计算器测试入口
- ChatGPT将引发大量而普遍的网络安全隐患
- GJB 5000B二级-LD领导作用