本題目要求一進制二次方程 a*x2+b*x+c=0 的根,結果保留2位小數。
輸入格式:
輸入在一行中給出3個浮點系數a, b, c,中間用空格分開。
輸出格式:
根據系數情況,輸出不同結果:
1)如果方程有兩個不相等的實數根,則每行輸出一個根,先大後小;
2)如果方程有兩個不相等複數根,則每行按照格式“實部+虛部i”輸出一個根,先輸出虛部為正的,後輸出虛部為負的;
3)如果方程隻有一個根,則直接輸出此根;
4)如果系數都為0,則輸出”Zero Equation”;
5)如果a和b為0,c不為0,則輸出”Not An Equation”。
輸入樣例 1:
2.1 8.9 3.5
輸出樣例 1:
-0.44
-3.80
輸入樣例 2:
1 2 3
輸出樣例 2:
-1.00+1.41i
-1.00-1.41i
輸入樣例 3:
0 2 4
輸出樣例 3:
-2.00
輸入樣例 4:
0 0 0
輸出樣例 4:
Zero Equation
輸入樣例 5:
0 0 1
輸出樣例 5:
Not An Equation
#include<stdio.h>
#include <math.h>
int main()
{
double a,b,c,d,s,x;//無實根情況下,s表示實數部分,x表示虛數部分
scanf("%lf %lf %lf",&a,&b,&c);
d = b*b-*a*c; //判别式,根據d判斷有幾個解
if (a==&&b==&&c==)
printf("Zero Equation");
else if (a==&&b==&&c!=)
printf("Not An Equation");
else if (a==&&b!=&&c!=)//此時為一次方程,一個解
printf("%.2f",-(c/b));
else if (d==)//兩個相同解
printf("%.2f",(-b+sqrt(d))/(*a));
else if (d>)//兩個不同實數解
printf("%.2f\n%.2f",(-b+sqrt(d))/(*a),(-b-sqrt(d))/(*a));
else//兩個虛數解
{
s = -b/(*a);
x = sqrt(-d)/(*a);
s = s==?:s;//實數部分為,則表示為.
printf("%.2f+%.2fi\n%.2f-%.2fi",s,x,s,x);
}
return ;
}
送出4次第六個測試點始終不過,測試點6:實部為0時輸出0.00+xi 是以要注意最後無實根情況下,判斷實數部分為0的表示問題。
但在s=0時,為什麼直接printf(“%.2f+%.2fi\n%.2f-%.2fi”,s,x,s,x);會出錯呢???為什麼添加s = s==0?0:s;後就通過,兩者有何差别?