Expérience 3-1 Trouver les racines d'une équation quadratique (20 points)

Ce sujet nécessite une équation quadratique dans un axe inconnu 2 + bx + c = 0 axe ^ {2} + bx + c = 0un x2 +bx+c=la racine de0, et le résultat conserve 2 décimales.

Format d'entrée:

L'entrée donne 3 coefficients à virgule flottante sur une ligne, a、b、cséparés par des espaces.

Format de sortie:

Selon le coefficient, différents résultats sont sortis:

  • 1) Si l'équation a deux racines réelles qui ne sont pas égales, une racine sera sortie par ligne, avec la plus grande en premier, puis la plus petite;

  • 2) Si l'équation a deux racines complexes inégales, sortez une racine dans chaque ligne selon le format "partie réelle + partie imaginaire i", affichez d'abord la partie imaginaire comme positive, puis sortez la partie imaginaire comme négative;

  • 3) Si l'équation n'a qu'une seule racine, sortez cette racine directement;

  • 4) Si les coefficients sont tous égaux à 0, alors sortez " Zero Equation";

  • 5) Si a和b为0,c不为0, alors sortez " Not An Equation".

Exemple d'entrée 1:

2.1 8.9 3.5

Exemple de sortie 1:

0.44
-3.80

Exemple d'entrée 2:

1 2 3

Exemple de sortie 2:

1.00+1.41i
-1.00-1.41i

Exemple d'entrée 3:

0 2 4

Exemple de sortie 3:

2.00

Exemple d'entrée 4:

0 0 0

Exemple de sortie 4:

Zero Equation

Exemple d'entrée 5:

0 0 1

Exemple de sortie 5:

Not An Equation

Code:

# 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;
}

Soumettre une capture d'écran:

Insérez la description de l'image ici

Instructions de résolution de problèmes:

La situation à considérer pour cette question est vraiment trop grande. Vous saurez ce que vous ressentez après l'avoir faite vous-même. Voici quelques points à noter:

  • Quand il y a une racine de nombre réel unique, cela correspond à deux situations, l'une est qu'il y a deux mêmes racines de nombre réel, et l'autre situation est a = 0ainsi obtenuex = -c / b
  • Lorsqu'il y a deux racines complexes, si b = 0l'équation en a deux 纯虚根, faites attention à l'ajout avant la sortie0.00
  • L'équation de calcul de racine complexe normale est
    (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 unb)2=4 un2b2-4 un c

Je suppose que tu aimes

Origine blog.csdn.net/weixin_43862765/article/details/114435862
conseillé
Classement