为方便和完善期间,增加一个变量H,把x=,y=,z=那三行和后面那一行
替换为:
H=a*(B*g-C*f)-A*(b*g-c*f)+e*(b*C-c*B)
if(H==0) printf("次方程组无解!")
else
{x=(d*(B*g-C*f)-D*(b*g-c*f)+h*(b*C-c*B))/H
y=(d*(A*g-C*e)-D*(a*g-c*e)+h*(a*C-c*A))/H
z=(d*(A*f-B*e)-D*(a*f-b*e)+h*(a*B-b*A))/H
printf("%lf\n%lf\n%lf",x,y,z)}
试验一下,不行再问。其实你的变量设置不大好,为了尽量保持原貌,未做改动。
//用克莱姆法则float d=a[0,0]*a[1,1]*a[2,2]+a[0,1]*a[1,2]*a[2,0]+a[0,2]*a[1,0]*a[2,1]-a[0,0]*a[1,2]*a[2,1]-a[0,1]*a[1,0]*a[2,2]-a[0,2]*a[1,1]*a[2,0]
if(d==0)printf("无解\n")
else{
float p=a[0,3]*a[1,1]*a[2,2]+a[0,1]*a[1,2]*a[2,3]+a[0,2]*a[1,3]*a[2,1]-a[0,3]*a[1,2]*a[2,1]-a[0,1]*a[1,3]*a[2,2]-a[0,2]*a[1,1]*a[2,3]
float q=a[0,0]*a[1,3]*a[2,2]+a[0,3]*a[1,2]*a[2,0]+a[0,2]*a[1,0]*a[2,3]-a[0,0]*a[1,2]*a[2,3]-a[0,3]*a[1,0]*a[2,2]-a[0,2]*a[1,3]*a[2,0]
float r=a[0,0]*a[1,1]*a[2,3]+a[0,1]*a[1,3]*a[2,0]+a[0,3]*a[1,0]*a[2,1]-a[0,0]*a[1,3]*a[2,1]-a[0,1]*a[1,0]*a[2,3]-a[0,3]*a[1,1]*a[2,0]
printf("x1=%f\n",p/d)
printf("x2=%f\n",q/d)
printf("x3=%f\n",r/d)
}
}