C語言計算一元二次方程的根(完全版)
阿新 • • 發佈:2018-12-20
題目(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;
}