求一元二次方程的解,考虑所有情况
假设:ax²+bx+c=0
要求输入a,b,c的值,判断并求出方程的解。
有以下几种情况:
1、a = 0
(1)b = 0
c = 0时,x可以是任意数;
c != 0时,方程不成立;
(2)b != 0
方程为一元一次方程,x = -
c
b
\frac{c}{b}
bc
2、 a != 0
(1)△ =b^2-4ac >0,方程有两个不等的实根;
(2)△ =b^2-4ac =0,方程有两个相等的实根;
(3)△ =b^2-4ac <0,方程有两个共轭复根;
#include <stdio.h> //编译预处理
#include <math.h> //编译预处理
int main()
{
double a,b,c,x1,x2,Delta,realpart,mipart;
//声明函数变量
printf("a*x^2 + bx +c = 0,请输入a,b,c的值:");
scanf("%lf,%lf,%lf",&a,&b,&c);
//获取输入的a,b,c三个系数的值
//printf("%.2f,%.2f,%.2f",a,b,c);
if (a == 0 ) //判断a是否为0
{
if(b != 0)
{
x1 = -c / b;
printf("方程是一元一次方程,x1=%.2f\n",x1);
}
else
{
if (c ==0) printf("x可以是任意值。\n");
else printf("方程不成立。\n");
}
}
else
{
Delta = pow(b,2) - 4*a*c;
//判断delta的值
if (Delta>0)
{
x1 = (-b+sqrt(Delta)) / (2*a);
x2 = (-b-sqrt(Delta)) / (2*a);
printf("方程的两个根为x1 = %.2f,x2 = %.2f\n",x1,x2);
}
else
{
if (Delta == 0)
{
x1 = - b/(2*a);
x2 = - b/(2*a);
printf("方程有两个相等的根:\nx1=%.2f\nx2=%.2f\n",x1,x2);
}
else
{
realpart = - b/(2*a); //实部
mipart = sqrt(-Delta) / (2*a);
printf("方程有两个共轭复根:\n");
printf("x1 = %.2f+%.5fi\n",realpart,mipart);
//人为地加了i,以表示虚部
printf("x2 = %.2f-%.5fi\n",realpart,mipart);
}
}
}
return 0;
}
//每个if和else都用花括号{}包起来,这样程序识别时候不会认为else没有匹配的if。