题目(Description):
求一元二次方程ax2+bx+c=0的根。a、b、c为任意实数。
输入(Input):
任意三个系数a、b、c。
输出(Output):
x1 x2实根(保留2位小数),且要求x1>=x2。
说明:
(1)如果a为0且b为0,则输出 “Not an equation”(N大写,单词间一个空格)。
(2)如果a为0,退化一次方程,则只输出一个根的值既可以。
(3)如果a不为0,则按以下格式输出方程的根x1和x2(x1和x2之间有一个空格):
* 若x1和x2为实根,则以x1>=x2输出。
* 若方程是共轭复根,则x1=m+ni,x2=m-ni,其中n>0。
其中x1、x2、m、n均保留2位小数。
提示(Hint):
(1)求平方根使用库函数sqrt(x),并需要 #include <math.h>
(2)保留2位小数使用printf("%.2f", … )
(3)输出i的方法如下:
printf("%0.2lf+%0.2lfi %0.2lf-%0.2lfi", 实部, 虚部, 实部, 虚部);
示例(Sample):
输入(Input):
1 2 3
输出(Output):
-1.00+1.41i -1.00-1.41i
说明:-1.00+1.41i -1.00-1.41i 两个根中间有一个空格
#include <stdio.h>
#include <math.h>
int main()
{
double a,b,c,delta,x1,x2,m,n,i,j;
scanf("%lf%lf%lf",&a,&b,&c);
if (fabs(a) <= 1e-6){
if (fabs(b) <= 1e-6)
puts("Not an equation");
else
printf("%.2lf",-c/b);
}
else{
delta=b*b - 4*a*c;
m = -b / (2*a);
n = sqrt(fabs(delta)) / (2*fabs(a));
i = m + n;
j = m - n;
if (delta < 0)
printf("%.2lf+%.2lfi %.2lf-%.2lfi",m,n,m,n);
else {
if (i == j)
printf("%.2lf %.2lf",i,i);
else {
x1 = (i > j) ? i : j;
x2 = (i > j) ? j : i;
printf("%.2lf %.2lf", x1, x2);
}
}
return 0;
}