#include
////目的:求N阶方阵的行列式
#include
////方法:全选主元高斯消元法
///环境:vc++6.0
double det(float array[111][111],int n);//函数声明
void main()
{
float a[111][111],i,j,n;
float result;
printf( "输入行列式的阶数(2-100):\n ");
scanf( "%d ",&n);
if(n> 100)
{
printf( "阶数太大 ");
}//输入阶数,判断条件
else
for(i=1;i%f\n ",max);
//确定当y取定一个值时的主元位置,行为row,列为line
if(line==(1+y)&&row==(1+y))
goto loop2;
else if(line==(1+y)||row==(1+y))
{
counter++;
if(row==(1+y))
for(p=1+y;p <n+1;p++)
{z=array[p][line];array[p][line]=array[p][1+y];array[p][1+y]=z;}
//列变换
else
for(q=1+y;q <n+1;q++)//line==(1+y)
{z=array[row][q];array[row][q]=array[1+y][q];array[1+y][q]=z;}
//行变换
}
else
{
for(p=1+y;p <n+1;p++)
{z=array[p][line];array[p][line]=array[p][1+y];array[p][1+y]=z;}
//列变换
for(q=1+y;q <n+1;q++)
{z=array[row][q];array[row][q]=array[1+y][q];array[1+y][q]=z;}
//行变换
}
//所有情况的位置变换完成,为了保证数值运算的稳定性
loop2:
for(c=2+y;c <n+1;c++)
array[1+y][c]=array[1+y][c]/array[1+y][1+y];//除于主元,准备消元
///如果定义数组为int,则这里运算会出问题,所以只好定义为float
///我有一个想法就是强制转换类型,但是还是有问题
for(b=2+y;b <n+1;b++)
for(d=2+y;d <n+1;d++)
array[d]=array[d]-array[1+y][d]*array[1+y];
//消元,为了化
为上三角阵
}
for(i=1;i <n+1;i++)
result*=array;//上三角阵求行列式
if(counter%2==0)
num=1;
else
num=-1;//解决行列变换的符号问题
result=result*num;
return result;//返回值
}
运行错误有:D:\vcwenjian\12.c(31) : error C2108: subscript is not of integral type
D:\vcwenjian\12.c(31) : error C2108: subscript is not of integral type
D:\vcwenjian\12.c(31) : error C2102: '&' requires l-value
D:\vcwenjian\12.c(36) : warning C4244: 'function' : conversion from 'float ' to 'int ', possible loss of data
D:\vcwenjian\12.c(36) : warning C4244: '=' : conversion from 'double ' to 'float ', possible loss of data
D:\vcwenjian\12.c(61) : warning C4244: 'function' : conversion from 'float ' to 'int ', possible loss of data
执行 cl.exe 时出错.
|