你看看我的吧:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
float a, b, c ;
printf("Input a ,b , c :");
scanf("%f%f%f",&a,&b,&c);
if(fabs(a)<=1e-15) //条件:当|a|<0 时 可以改成<=EPS
{ //1e-15 表示一个极小的数 浮点型零就是一个近似值
printf("不是一元二次方程");
printf("x = %.2f",c/b);
exit(0); //执行到此处 程序返回0 并退出
}
else
{
float disc , p ,q , x1 ,x2 ;
disc = b*b - 4*a*c;
p = -b/(2*a) ;
q = sqrt(fabs(disc))/(2*a) ;
if(fabs(disc)<=1e-15)
{
printf("x1 = x2 = %.2f",p);
}
else if(disc >1e-15)
{
printf("x1 = %.2f, x2 = %.2f",p+q,p-q);
}
else //(德尔塔小于0 )
{
printf("x1 = %.2f+%.2fi\n",p,q);
printf("x1 = %.2f-%.2fi\n",p,q);
}
}
return 0;
}
或者是:
#include<stdio.h>
#include <math.h>
#define EXP 0.0000001
int main()
{
double a = 0.0, b = 0.0, c = 0.0;
printf("please enter value of a,b,c:");
scanf("%lf%lf%lf", &a, &b, &c);
if (a > -EXP && a < EXP)
{
printf("the formula is fales\n");
}
else
{
double disc = b * b - 4 * a * c;
if (disc > -EXP && disc < EXP)
{
printf("the only explain is:%lf\n", ((-b + sqrt(disc)) / (2 * a)));
}
else if (disc > 0)
{
printf("two explain is:%lf %lf\n", ((-b + sqrt(disc)) / (2 * a)), ((-b - sqrt(disc)) / (2 * a)));
}
else
{
printf("no explain");
}
}
return 0;
}
好家伙,所有情况都没考虑
a=0怎么办
delta为负怎么办
找到问题了
有帮助望采纳