実験3-1二次方程式の根を見つける(20点)

このトピックでは、1つの未知のax 2 + bx + c = 0 ax ^ {2} + bx + c = 0の2次方程式が必要ですa x2 +bx+c=0の根であり、結果は小数点以下2桁を保持します。

入力フォーマット:

入力はa、b、c、スペース区切られた1行に3つの浮動小数点係数を提供します。

出力フォーマット:

係数に応じて、さまざまな結果が出力されます。

  • 1)方程式に等しくない2つの実根がある場合、行ごとに1つの根が出力され、最初に最大、次に最小になります。

  • 2)方程式に2つの等しくない複素根がある場合、「実数部+虚数部i」の形式に従って各行に1つの根を出力し、最初に虚数部を正として出力し、次に虚数部を負として出力します。

  • 3)方程式にルートが1つしかない場合は、このルートを直接出力します。

  • 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 <stdlib.h>
# include <math.h>

int main() {
    
    
    double a,b,c,value,value1,complex;
    scanf("%lf %lf %lf",&a,&b,&c);
    double de_ta = b * b - 4 * a * c;
    if (a == 0 && b == 0) {
    
    
        if (c == 0) printf("Zero Equation");
        else printf("Not An Equation");
    }else {
    
    
        if (de_ta == 0) {
    
    
            value = (-1 * b) / (2 * a);
            printf("%.2lf",value);
        }else if (de_ta > 0) {
    
    
            // 有特殊情况a = 0时,方程有唯一实数根
            if (a == 0) {
    
    
                value = (-1) * (c / b);
                printf("%.2lf",value);
            }else {
    
    
                value = (-1 * b - sqrt(de_ta)) / (2 * a);
                value1 = (-1 * b + sqrt(de_ta)) / (2 * a);
                printf("%.2lf\n%.2lf",value1,value);
            }
        }else {
    
    
            value1 = sqrt(-1 * de_ta) / (2 * a);
            value = (-1) * (b / (2 * a));
            // 有特殊情况,为纯虚数且前面输出要加上0.00
            if (b == 0) {
    
    
                printf("0.00+%.2lfi\n0.00%.2lfi",value1,-1*value1);
            }else {
    
    
                // 有两个复数根,先输出虚部是正的
                complex = (value1 > 0) ? value1:(-1)*value1;
                printf("%.2lf+%.2lfi\n%.2lf%.2lfi",value,complex,value,-1*complex);
            }
        }
    }
    return 0;
}

スクリーンショットを送信:

ここに画像の説明を挿入します

問題解決の手順:

この質問で考慮すべき状況は本当に大きすぎます。自分でやった後の気持ちがわかるでしょう。注意すべき点がいくつかあります。

  • 一意の実数根がある場合、それは2つの状況に対応します。1つは2つの同じ実数根があることであり、もう1つはそのa = 0ように取得されます。x = -c / b
  • 複素根が2つある場合b = 0、方程式に2つある場合纯虚根、出力の前に追加することに注意してください。0.00
  • 通常の複素根計算式は、
    (x + b 2 a)2 = b 2 − 4 ac 4 a 2(x + \ frac(b)(2a))^ {2)= \ frac(b ^ 2-4ac}です。 {4a ^ 2}x+2 aB)。2=4 a2b24 C

おすすめ

転載: blog.csdn.net/weixin_43862765/article/details/114435862