关于特殊行列的行列式
有下面的一个C语言的行列式的函数。(转自http://www.)但是,如果像第一行(0,1),第二行(1,0)这样的2乘2竖列,主对角线的第一个行第一个元素化不成一个非零的实数怎么修改?
除了人工把输入的行列的行顺序改变。求大师...
double matrixdet(Matrix *a)
{
int i,j,k;
double t,det=1,x;
if (a->cols!=a->rows)
{
printf("\n\n\tすみません、入力が正方行列ではないので、間違っています!!\n");
printf("\tEnterキーを打ってプログラムを終了してください。\n");
getch();
return -1;
}
else
{
for (i=0;i<a->rows;i++)
for (k=0;k<a->rows;k++)
{
if (k!=i)
{
if (a->m[i][i]!=0)
{
t = a->m[k][i]/a->m[i][i];
for (j=0;j<(2*a->rows);j++)
{
x = a->m[i][j]*t;
a->m[k][j] = a->m[k][j] - x;
}
}
else
return 0;
}
}
for (i=0;i<a->rows;i++)
det = det*a->m[i][i];
return (det);
}
}