#include "stdio.h"
#define num 3
void main()
{
float permutation(float det[num][num],int m,int two[num],float sum);
/*申明全排列函数*/
int sign(int two[num]);
/*申明符号函数*/
int i,j,k,two[num];
float det[num][num],sum=0;
for(k=0;k<num;k++)
{
two[k]=k;
/*为二维变量赋值*/
}
for(i=0;i<num;i++)
for(j=0;j<num;j++)
{
printf("Please input the number of det %d-%d:",i+1,j+1);
scanf("%f",&det[i][j]);
}
sum=permutation(det,0,two,sum);
/*调用全排列函数*/
printf("The result of the det is %f.",sum);
}
float permutation(float det[num][num],int m,int two[num],float sum)
/*定义全排列函数*/
{
int a,count,c;
float t,mul=1;
if(m<num-1)
{
sum=permutation(det,m+1,two,sum);
/*调用全排列函数*/
for(a=m+1;a<num;a++)
{
t=two[m];two[m]=two[a];two[a]=t;
sum=permutation(det,m+1,two,sum);
/*调用全排列函数*/
t=two[m];two[m]=two[a];two[a]=t;
}
}
else
{
for(count=0;count<num;count++)
{
mul=mul*det[count][two[count]];
}
c=sign(two);
/*调用符号函数*/
if(c==0)
{
sum=sum+mul;
}
else
{
sum=sum-mul;
}
}
return(sum);
}
int sign(int two[num])
/*定义符号函数*/
{
int count_num=0,y,z,c;
for(y=0;y<num;y++)
for(z=y+1;z<num;z++)
{
if(two[y]>two[z])
count_num++;
}
if(count_num%2==0)
c=0;
else
c=1;
return(c);
}
以上代码经过我的些许测试是正确的,我现在大一,也在学行列式,看见这个帖子就很感兴趣,所以昨天到今天都在想这个程序,毕竟刚开始学C语言。其中permutation函数是类全排列函数,我昨天在论坛上问了前辈才知道全排列的,不然根本就写不出,我改了一下,将类似全排列的函数加入了这个程序。
程序第2行是宏的定义,num后的数字可以更改,代表num阶行列式···
因为C语言还没学完,编不出输入阶数后自动运行的程序,需要手动修改常量,这点望前辈指教。
本代码也只支持整数或者小数的行列式运算,无法带参数····