求一元二次方程的跟,系数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
请按任意键继续. . .