问题:求方程: a x 2 + b x + c = 0 ax^2+bx+c=0 ax2+bx+c=0 的解
思路:
- 化方程为一般式:
- 分类讨论根的情况(a、b、c)
代码实现
#include <stdio.h>
#include <math.h>
int main(){
float a,b,c;
printf("Pleaser enter a、b、c:");
scanf("%f %f %f",&a,&b,&c);
float x1,x2,x,real,image;
if(a==0){
if(b==0){
if(c==0){//a=0,b=0,c=0;
printf("方程的解为任意常数;\n");
}
else{//a=0,b=0,c!=0;
printf("方程无解;\n");
}
}
else{//a=0,b!=0;
x=-(c/b);
printf("原方程的的解为:x=%8.4f\n",x);
}
}
else{//a!=0
float disc=b*b-4*a*c;
if(fabs(disc)<1e-6){//a!=0;b^2-4ac=0;
x=-(b/(2*a));
printf("原方程的的解为:x=%8.4f\n",x);
}else if(disc>1e-6){//a!=0;b^2-4ac>0;
x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
printf("原方程的的解为:x1=%8.4f ; x2=%8.4f \n",x1,x2);
}else{//a!=0;b^2-4ac>0;
real=-b/(2*a); //实部
image=sqrt(-disc)/(2*a); //虚部
printf("原方程的的解为:x1=%8.4f+%8.4fi ; x2=%8.4f+%8.4fi \n",real,image,real,image);
}
}
}
程序说明:
由于disc(即 b 2 − 4 a c b^2-4ac b2−4ac)是实数,而实数在计算和存储是很会有一些微小的误差,因此不能直接进行如下判断:“if(disc==0)”
解决办法:判别disc的绝对值(即:fabs(disc))是否小于一个很小的值(例如: 1 0 − 6 10^-6 10−6,计算机语言为 1e-6 或 1E-6),如果小于此数,就认为disc等于0;
参考文章:
https://blog.csdn.net/neusoft06/article/details/78771492
https://blog.csdn.net/Yangjiankang_0929/article/details/44627349