Quadratische Gleichungen in C lösen

CCBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernen Sie, wie Sie quadratische Gleichungen in der Programmiersprache C lösen. Das Lab behandelt den gesamten Prozess, beginnend mit dem Einlesen der Koeffizienten der quadratischen Gleichung, der Berechnung der Diskriminante und der Bestimmung der reellen oder komplexen Wurzeln. Sie werden ein C-Programm schreiben, das den Benutzer zur Eingabe der Koeffizienten auffordert, die erforderlichen Berechnungen durchführt und die Lösungen ausgibt.

Das Lab ist in zwei Hauptschritte unterteilt. Zunächst lernen Sie, wie Sie die Koeffizienten a, b und c vom Benutzer einlesen. Anschließend modifizieren Sie das Programm, um die Diskriminante zu berechnen und die quadratische Formel zu verwenden, um die Wurzeln der Gleichung zu finden, wobei sowohl reelle als auch komplexe Lösungen behandelt werden.

a, b, c einlesen

In diesem Schritt lernen Sie, wie Sie Eingabewerte für eine quadratische Gleichung in C einlesen. Wir werden ein Programm erstellen, das die Koeffizienten a, b und c vom Benutzer akzeptiert.

Zunächst erstellen Sie eine neue Datei für Ihren Löser für quadratische Gleichungen:

cd ~/project
nano quadratic_solver.c

Fügen Sie nun den folgenden Code zur Datei hinzu:

#include <stdio.h>

int main() {
    double a, b, c;

    // Prompt user for input
    printf("Enter coefficient a: ");
    scanf("%lf", &a);

    printf("Enter coefficient b: ");
    scanf("%lf", &b);

    printf("Enter coefficient c: ");
    scanf("%lf", &c);

    // Print the entered coefficients
    printf("Coefficients entered:\n");
    printf("a = %.2f\n", a);
    printf("b = %.2f\n", b);
    printf("c = %.2f\n", c);

    return 0;
}

Kompilieren Sie das Programm:

gcc quadratic_solver.c -o quadratic_solver

Führen Sie das Programm aus:

./quadratic_solver

Beispielausgabe:

Enter coefficient a: 1
Enter coefficient b: -5
Enter coefficient c: 6
Coefficients entered:
a = 1.00
b = -5.00
c = 6.00

Lassen Sie uns die wichtigsten Teile des Codes analysieren:

  • scanf() wird verwendet, um die Benutzereingabe für jeden Koeffizienten zu lesen.
  • %lf ist der Format-Spezifizierer für Gleitkommazahlen mit doppelter Genauigkeit.
  • Wir speichern die Koeffizienten in den Variablen a, b und c.
  • Das Programm gibt die eingegebenen Koeffizienten zurück, um die Eingabe zu bestätigen.

Diskriminante berechnen und Wurzeln bestimmen

In diesem Schritt werden Sie das vorherige Programm ändern, um die Diskriminante zu berechnen und die Wurzeln der quadratischen Gleichung mithilfe der quadratischen Formel zu bestimmen.

Öffnen Sie die vorhandene Datei und aktualisieren Sie den Code:

cd ~/project
nano quadratic_solver.c

Ersetzen Sie den vorherigen Code durch folgenden:

#include <stdio.h>
#include <math.h>

int main() {
    double a, b, c;
    double discriminant, root1, root2;

    // Prompt user for input
    printf("Enter coefficient a: ");
    scanf("%lf", &a);

    printf("Enter coefficient b: ");
    scanf("%lf", &b);

    printf("Enter coefficient c: ");
    scanf("%lf", &c);

    // Calculate discriminant
    discriminant = b * b - 4 * a * c;

    // Check discriminant to determine root types
    if (discriminant > 0) {
        // Two distinct real roots
        root1 = (-b + sqrt(discriminant)) / (2 * a);
        root2 = (-b - sqrt(discriminant)) / (2 * a);
        printf("Two distinct real roots:\n");
        printf("Root 1 = %.2f\n", root1);
        printf("Root 2 = %.2f\n", root2);
    } else if (discriminant == 0) {
        // One real root (repeated)
        root1 = -b / (2 * a);
        printf("One real root (repeated):\n");
        printf("Root = %.2f\n", root1);
    } else {
        // Complex roots
        double realPart = -b / (2 * a);
        double imaginaryPart = sqrt(-discriminant) / (2 * a);
        printf("Complex roots:\n");
        printf("Root 1 = %.2f + %.2fi\n", realPart, imaginaryPart);
        printf("Root 2 = %.2f - %.2fi\n", realPart, imaginaryPart);
    }

    return 0;
}

Kompilieren Sie das Programm mit der Mathematikbibliothek:

gcc quadratic_solver.c -o quadratic_solver -lm

Führen Sie das Programm in verschiedenen Szenarien aus:

./quadratic_solver

Beispielausgabe (zwei reelle Wurzeln):

Enter coefficient a: 1
Enter coefficient b: -5
Enter coefficient c: 6
Two distinct real roots:
Root 1 = 3.00
Root 2 = 2.00

Beispielausgabe (eine reelle Wurzel):

Enter coefficient a: 1
Enter coefficient b: -2
Enter coefficient c: 1
One real root (repeated):
Root = 1.00

Beispielausgabe (komplexe Wurzeln):

Enter coefficient a: 1
Enter coefficient b: 2
Enter coefficient c: 5
Complex roots:
Root 1 = -1.00 + 2.00i
Root 2 = -1.00 - 2.00i

Wichtige Punkte im Code:

  • Nutzt die quadratische Formel zur Berechnung der Wurzeln
  • Prüft die Diskriminante, um die Art der Wurzeln zu bestimmen
  • Behandelt drei Szenarien: zwei reelle Wurzeln, eine reelle Wurzel, komplexe Wurzeln
  • Nutzt die sqrt()-Funktion aus der math.h-Bibliothek
  • Kompiliert mit der -lm-Option, um die Mathematikbibliothek zu verlinken

Ausgabe von reellen oder komplexen Lösungen

In diesem Schritt verbessern Sie den Löser für quadratische Gleichungen, um detailliertere Ausgaben zu liefern und verschiedene Lösungstypen mit verbesserter Formatierung zu behandeln.

Öffnen Sie die vorhandene Datei und aktualisieren Sie den Code:

cd ~/project
nano quadratic_solver.c

Ersetzen Sie den vorherigen Code durch folgenden:

#include <stdio.h>
#include <math.h>

void printQuadraticSolutions(double a, double b, double c) {
    double discriminant = b * b - 4 * a * c;

    printf("Quadratic Equation: %.2fx² + %.2fx + %.2f = 0\n", a, b, c);
    printf("Discriminant: %.2f\n", discriminant);

    if (discriminant > 0) {
        double root1 = (-b + sqrt(discriminant)) / (2 * a);
        double root2 = (-b - sqrt(discriminant)) / (2 * a);

        printf("Solution Type: Two Distinct Real Roots\n");
        printf("Root 1: %.2f\n", root1);
        printf("Root 2: %.2f\n", root2);
    } else if (discriminant == 0) {
        double root = -b / (2 * a);

        printf("Solution Type: One Real Root (Repeated)\n");
        printf("Root: %.2f\n", root);
    } else {
        double realPart = -b / (2 * a);
        double imaginaryPart = sqrt(-discriminant) / (2 * a);

        printf("Solution Type: Complex Conjugate Roots\n");
        printf("Root 1: %.2f + %.2fi\n", realPart, imaginaryPart);
        printf("Root 2: %.2f - %.2fi\n", realPart, imaginaryPart);
    }
}

int main() {
    double a, b, c;

    printf("Quadratic Equation Solver\n");
    printf("------------------------\n");

    printf("Enter coefficient a: ");
    scanf("%lf", &a);

    printf("Enter coefficient b: ");
    scanf("%lf", &b);

    printf("Enter coefficient c: ");
    scanf("%lf", &c);

    printf("\n");
    printQuadraticSolutions(a, b, c);

    return 0;
}

Kompilieren Sie das Programm:

gcc quadratic_solver.c -o quadratic_solver -lm

Führen Sie das Programm in verschiedenen Szenarien aus:

./quadratic_solver

Beispielausgabe (zwei reelle Wurzeln):

Quadratic Equation Solver
------------------------
Enter coefficient a: 1
Enter coefficient b: -5
Enter coefficient c: 6

Quadratic Equation: 1.00x² + -5.00x + 6.00 = 0
Discriminant: 1.00
Solution Type: Two Distinct Real Roots
Root 1: 3.00
Root 2: 2.00

Beispielausgabe (eine reelle Wurzel):

Quadratic Equation Solver
------------------------
Enter coefficient a: 1
Enter coefficient b: -2
Enter coefficient c: 1

Quadratic Equation: 1.00x² + -2.00x + 1.00 = 0
Discriminant: 0.00
Solution Type: One Real Root (Repeated)
Root: 1.00

Beispielausgabe (komplexe Wurzeln):

Quadratic Equation Solver
------------------------
Enter coefficient a: 1
Enter coefficient b: 2
Enter coefficient c: 5

Quadratic Equation: 1.00x² + 2.00x + 5.00 = 0
Discriminant: -16.00
Solution Type: Complex Conjugate Roots
Root 1: -1.00 + 2.00i
Root 2: -1.00 - 2.00i

Wichtige Verbesserungen:

  • Erstellung einer separaten Funktion printQuadraticSolutions() für eine bessere Codeorganisation
  • Hinzufügen von beschreibenderen Ausgaben mit Lösungstyp und Gleichungsdetails
  • Beibehaltung der gleichen Wurzelberechnungslogik wie im vorherigen Schritt
  • Verbesserung der Benutzeroberfläche mit einem Titel und einer klaren Formatierung

Zusammenfassung

In diesem Lab lernen Sie, wie Sie in C Eingabewerte für eine quadratische Gleichung einlesen, die Diskriminante berechnen und die reellen oder komplexen Wurzeln mithilfe der quadratischen Formel bestimmen. Das Programm fordert den Benutzer auf, die Koeffizienten a, b und c einzugeben, berechnet dann die Diskriminante, um die Art der Wurzeln zu bestimmen. Schließlich gibt das Programm die reellen oder komplexen Lösungen aus.

Die wichtigsten Schritte, die in diesem Lab behandelt werden, umfassen das Einlesen der Benutzereingabe für die Koeffizienten, die Berechnung der Diskriminante und die Anwendung der quadratischen Formel zur Bestimmung der Wurzeln. Das Programm bestätigt auch die eingegebenen Koeffizienten und liefert die berechneten Lösungen.