天天看點

分支-18. 求一進制二次方程的根(20)

本題目要求一進制二次方程 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;後就通過,兩者有何差别?