行列式的求值(C语言版)
本程序用C语言实现行列式的求值,由于采用的是行列式中最原始的公式求解,其运行效率并不十分高,但可以保证只要电脑能跑下来,就可以算对.本人验证
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
明,对9阶以内的运行效果还可以.10阶就不好说了.本程序实际上是分二部分,第一部分是程序求0到n-1或1到n的全排列,并采用文件操作,将排列结果保存在一个文件中;第二部分是用数学方法求行列式的值,并从文件中读取排列结果并计算p(a,a,a?a).123n本人设想的另一种办法是采用多线程,当生成一种排列后直接送到计算程序,或计可以加快计算速度.有名的MATLAB计算高阶行列式时(例如80阶)简直是不用眨眼就出来了,不知道用的是什么算法.第一部分的算法已单独的上传在本文揖中,名为
.用户在使用时要将以下5个文件全部编译一遍才行.(本机运行环境是xpsp3+vc6.0++)
plzh为排列组合
det为行列式.
//头文件 plzh.h
#ifndef PLZH_H
#define PLZH_H
#include
#include
void initial(int n); int stackfull(int n); void stackprint(int n); void stackoutfile(int n); void stackback(); void stackadd(int n); void stackmov(int n); void stackfun(int n);
#endif
//plzh.h的实现 plzh.c
#include #include #include "plzh.h"
#define N 50 //定义栈的大小.
int stack[N]; //定义栈.
int p=-1; //定义栈底.
int a[N],b[N],c[N]; //分别表示当前数的值,改变后的值,
及改变的次数.
FILE *pfile;
/********************** *对栈进行初始化.
**********************/ void initial(int n) {
int i=0;
for(i=0;i
函
关于工期滞后的函关于工程严重滞后的函关于工程进度滞后的回复函关于征求同志党风廉政意见的函关于征求廉洁自律情况的复函
数实际上是多余的. ***********************************************/
int stackfull(int n)
{
if(p+1==n)
return 1;
else
return 0;
}
/******************** *打印栈中的数值.
*此处是输出到屏幕上.
********************/ void stackprint(int n) {
int i=0;
for(i=0;i #include void detcal();
#endif
//det.h 的实现方法det.c
#include #include #include "det.h" #include "plzh.h"
#define N 20
void detcal()
{
int col[N][N],R[N];
int sum,count;
int n;
int i,j;
FILE *pfile;
printf("输入行列式的阶(输0退出): ");
scanf("%d",&n);
if(n==0)
exit(0);
printf("按行输入行列式的项: ");
for(i=0;iR[j])
count++;
}
if(count%2==0)
count=1;
else
count=-1;
for(i=0;i #include #include "det.h"
int main()
{
for(;;)
{
detcal();
printf("\n");
}
return 0;
}