Fakultätsberechnung in C

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 Fakultäten in der C-Programmierung berechnen. Das Lab behandelt zwei Methoden zur Berechnung der Fakultät einer Zahl: die Verwendung einer iterativen Schleife und einer rekursiven Funktion. Sie beginnen mit der Eingabe einer ganzen Zahl vom Benutzer, implementieren dann sowohl den schrittweisen als auch den rekursiven Ansatz zur Berechnung der Fakultät und geben schließlich das Ergebnis aus.

Das Lab bietet Schritt-für-Schritt-Anleitungen und Codebeispiele, um Sie durch den Prozess zu führen und ein umfassendes Verständnis der Fakultätsberechnung in C zu gewährleisten.

Eine ganze Zahl n einlesen

In diesem Schritt lernen Sie, wie Sie eine ganzzahlige Eingabe zum Berechnen ihrer Fakultät in einem C-Programm einlesen. Wir konzentrieren uns auf die Erstellung eines einfachen Programms, das den Benutzer auffordert, eine Zahl einzugeben, und diese für weitere Berechnungen speichert.

Erstellen Sie zunächst eine neue C-Datei im Projektverzeichnis:

cd ~/project
nano factorial.c

Fügen Sie nun den folgenden Code hinzu, um eine ganzzahlige Eingabe zu lesen:

#include <stdio.h>

int main() {
    int n;

    printf("Geben Sie eine Zahl ein, um ihre Fakultät zu berechnen: ");
    scanf("%d", &n);

    printf("Sie haben eingegeben: %d\n", n);

    return 0;
}

Kompilieren und führen Sie das Programm aus:

gcc factorial.c -o factorial
./factorial

Beispielausgabe:

Geben Sie eine Zahl ein, um ihre Fakultät zu berechnen: 5
Sie haben eingegeben: 5

In diesem Code:

  • printf() wird verwendet, um eine Aufforderung an den Benutzer anzuzeigen.
  • scanf() liest die ganzzahlige Eingabe vom Benutzer.
  • %d ist der Formatbezeichner für ganze Zahlen.
  • &n übergibt die Speicheradresse der Variablen n, um die Eingabe zu speichern.

Berechnung von n! mit Schleife oder Rekursion

In diesem Schritt lernen Sie zwei Methoden zur Berechnung der Fakultät einer Zahl kennen: die Verwendung einer iterativen Schleife und einer rekursiven Funktion. Wir werden die vorherige Datei factorial.c modifizieren, um beide Ansätze zu implementieren.

Aktualisieren Sie die Datei factorial.c:

cd ~/project
nano factorial.c

Fügen Sie den folgenden Code hinzu, um die Fakultätsberechnung mit einer Schleife und Rekursion zu implementieren:

#include <stdio.h>

// Fakultätsberechnung mit iterativer Schleife
unsigned long long factorialLoop(int n) {
    unsigned long long result = 1;
    for (int i = 1; i <= n; i++) {
        result *= i;
    }
    return result;
}

// Fakultätsberechnung mit Rekursion
unsigned long long factorialRecursive(int n) {
    if (n == 0 || n == 1) {
        return 1;
    }
    return n * factorialRecursive(n - 1);
}

int main() {
    int n;

    printf("Geben Sie eine Zahl ein, um ihre Fakultät zu berechnen: ");
    scanf("%d", &n);

    if (n < 0) {
        printf("Die Fakultät ist für negative Zahlen nicht definiert.\n");
        return 1;
    }

    printf("Fakultät mit Schleife: %llu\n", factorialLoop(n));
    printf("Fakultät mit Rekursion: %llu\n", factorialRecursive(n));

    return 0;
}

Kompilieren und ausführen des Programms:

gcc factorial.c -o factorial
./factorial

Beispielausgabe:

Geben Sie eine Zahl ein, um ihre Fakultät zu berechnen: 5
Fakultät mit Schleife: 120
Fakultät mit Rekursion: 120

Wichtige Punkte in dieser Implementierung:

  • unsigned long long wird verwendet, um größere Fakultätswerte zu verarbeiten.
  • Die Schleifenmethode verwendet eine for-Schleife, um die Zahlen zu multiplizieren.
  • Die rekursive Methode ruft sich selbst mit n-1 auf, bis der Basisfall erreicht ist.
  • Es wurde eine Fehlerbehandlung für negative Zahlen hinzugefügt.
  • Beide Methoden liefern dasselbe Ergebnis.

Ausgabe der Fakultät

In diesem Schritt erweitern Sie das Fakultätsberechnungsprogramm, um detailliertere Ausgaben zu liefern und verschiedene Eingabefälle zu behandeln. Wir werden die Datei factorial.c modifizieren, um die Darstellung der Fakultätsergebnisse zu verbessern.

Aktualisieren Sie die Datei factorial.c:

cd ~/project
nano factorial.c

Ersetzen Sie den vorherigen Inhalt durch die folgende verbesserte Implementierung:

#include <stdio.h>

unsigned long long factorialLoop(int n) {
    unsigned long long result = 1;
    for (int i = 1; i <= n; i++) {
        result *= i;
    }
    return result;
}

void printFactorialDetails(int n, unsigned long long factorial) {
    printf("Details zur Fakultätsberechnung:\n");
    printf("Zahl (n): %d\n", n);
    printf("Fakultät (n!): %llu\n", factorial);

    printf("Fakultätserweiterung: ");
    for (int i = 1; i <= n; i++) {
        printf("%d%s", i, (i < n) ? " × " : " = ");
    }
    printf("%llu\n", factorial);
}

int main() {
    int n;

    printf("Geben Sie eine nicht-negative ganze Zahl ein, um ihre Fakultät zu berechnen: ");
    scanf("%d", &n);

    if (n < 0) {
        printf("Fehler: Die Fakultät ist für negative Zahlen nicht definiert.\n");
        return 1;
    }

    if (n > 20) {
        printf("Warnung: Die Fakultät für große Zahlen kann zu einem Integer-Überlauf führen.\n");
    }

    unsigned long long result = factorialLoop(n);
    printFactorialDetails(n, result);

    return 0;
}

Kompilieren und ausführen des Programms:

gcc factorial.c -o factorial
./factorial

Beispielausgabe:

Geben Sie eine nicht-negative ganze Zahl ein, um ihre Fakultät zu berechnen: 5
Details zur Fakultätsberechnung:
Zahl (n): 5
Fakultät (n!): 120
Fakultätserweiterung: 1 × 2 × 3 × 4 × 5 = 120

Wichtige Verbesserungen in dieser Version:

  • Hinzufügen einer detaillierten Funktion printFactorialDetails()
  • Anzeige der vollständigen Fakultätserweiterung
  • Einschließen einer Warnung für große Zahlen
  • Bereitstellung einer klaren und informativen Ausgabe

Zusammenfassung

In diesem Labor haben Sie gelernt, wie man eine ganzzahlige Eingabe vom Benutzer liest und deren Fakultät sowohl mit einer iterativen Schleife als auch mit einer rekursiven Funktion berechnet. Sie haben den Prozess der Erstellung eines C-Programms erkundet, das den Benutzer nach einer Zahl fragt, negative Eingaben behandelt und das Ergebnis der Fakultät ausgibt. Das Labor umfasste die wichtigsten Schritte der Benutzer-Eingabe-Lesung, der Implementierung von Fakultätsberechnungsalgorithmen und der Ausgabe des Endergebnisses.