计算ax2+bx+c=0方程的根(a,b,c由键盘输入)
设b2-4ac>0
#include<stdio.h>
#include<math.h>
int main()
{
double a,b,c,d,x1,x2;
scanf("%lf%lf%lf",&a,&b,&c);
d=b*b-4*a*c;
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("x1=%.2f\nx2=%.2f\n",x1,x2);
}
当不能保证b2-4ac>=0时
#include<stdio.h>
#include<math.h>
int main()
{
double a,b,c,d,x1,x2;
scanf("%lf%lf%lf",&a,&b,&c);
d=b*b-4*a*c;
if(d<0)
printf("方程无实根\n");
else
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("x1=%.2f\nx2=%.2f\n",x1,x2);
}
}
综合如下:
#include<stdio.h>
#include<math.h>
int main()
{
double a,b,c,x1,x2,d,x,p,q;
printf("请输入a,b,c:");
scanf("%lf %lf %lf", &a, &b, &c);
d=b*b-4*a*c;
if(a == 0)
{
printf("该方程不是二次方程\n");
}
else if(d > 0)
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("方程有两个不相等的实根:x1=%lf,x2=%lf\n",x1,x2);
}
else if(d == 0)
{
x=-b/(2*a);
printf("方程有两个相等的实根:%lf", x);
}
else
{
p=-b/(2*a);
q=sqrt(-d)/(2*a);
printf("方程有两个共轭复根:\n");
printf("x1=%lf+%lfi\n",p,q);
printf("x2=%lf-%lfi\n",p,q);
}
}