求一元二次方程的跟,系数a,b,c由键盘输入

程序:

#include<stdio.h>

#include<math.h>

#define ESP  0.00001

int main()

{

double  a, b, c, d, p, q, x1, x2,imagpart;//imagpart表示虚部

printf("请输入a,b,c的值:");

scanf("%lf%lf%lf", &a, &b, &c);

d = b*b - 4*a*c;

p = -b / (2.0*a);

q = sqrt(d) / (2.0*a);

x1 = p + q;

x2 = p - q;

if ((a >-ESP)&&(a<ESP))

{

printf("不是一元二次方程\n");

else

{

if (d > 0)

{

printf("x1=%lf\nx2=%lf\n", x1, x2);//用lf输出小数部分占6位

            /*printf("x1=%7.2f\nx2=%7.2f\n", x1, x2);*///输出指定数据占7列,小数占2列

}

else if ((d >-ESP) && (d<ESP))

{

printf("原方程有两个相等的实根:\n");

printf("x1=x2=%lf\n", x1);

}

else

{

imagpart = sqrt(-d) / (2.0*a);

printf("原方程有两个共轭复根:\n");

printf("x1=%lf+%lfi\n",p, imagpart);

printf("x2=%lf-%lfi\n", p, imagpart);

}

}

return 0;

}

结果1:

请输入a,b,c的值:2 3 1

x1=-0.500000

x2=-1.000000

请按任意键继续. . .

结果2:

请输入a,b,c的值:0 1 2

不是一元二次方程

请按任意键继续. . .

结果3:

请输入a,b,c的值:3 2 1

原方程有两个共轭复根:

x1=-0.333333+0.471405i

x2=-0.333333-0.471405i

请按任意键继续. . .

结果4:

请输入a,b,c的值:1 -2 1

原方程有两个相等的实根:

x1=x2=1.000000

请按任意键继续. . .