C/C++-Übungen für Einsteiger

Primzahlen in C und C++ prüfen

In dieser Lektion prüfst du, ob eine ganze Zahl eine Primzahl ist, indem du Teiler bis zu ihrer Quadratwurzel testest.

Einführung

Eine Primzahl ist größer als 1 und nur durch 1 und sich selbst teilbar. Um das zu prüfen, teilen wir die Zahl durch kleinere Zahlen. Es reicht aber, bis zur Quadratwurzel der Zahl zu testen, was das Programm deutlich schneller macht.

Wichtige Punkte

  • Schalte die Compiler-Warnungen (compiler warnings) ein und behebe alle.
  • Verstehe den Datentyp und die Lebensdauer (lifetime) jedes Werts genau.
  • Prüfe immer die Eingabedaten und die Grenzen von Array-Indizes.

Codebeispiele in C und C++

C
Code ausführen →
main.c
#include <stdio.h>
int main(void) {
    int number = 29, prime = number > 1;
    // A composite number has a factor no larger than its square root.
    for (int divisor = 2; divisor * divisor <= number; ++divisor)
        if (number % divisor == 0) { prime = 0; break; }
    printf("%d is %sprime\n", number, prime ? "" : "not ");
}
Ergebnis der Ausführung
29 is prime
C++
Code ausführen →
main.cpp
#include <iostream>
int main() {
    int number = 29;
    bool prime = number > 1;
    // Stop after the square root and on the first divisor.
    for (int divisor = 2; divisor * divisor <= number && prime; ++divisor)
        prime = number % divisor != 0;
    std::cout << number << " is " << (prime ? "" : "not ") << "prime\n";
}
Ergebnis der Ausführung
29 is prime

C und C++ im Vergleich

Die Schleife läuft nur, solange divisor * divisor <= number gilt, denn hat die Zahl einen Teiler größer als die Quadratwurzel, gehört dazu ein kleinerer Teiler, der schon geprüft wurde. Sobald ein Teiler gefunden ist, verlässt die C-Version die Schleife mit break, die C++-Version endet dank der Bedingung && prime. Das Ergebnis zeigt, dass 29 eine Primzahl ist.

C

C verwendet kleine prozedurale Funktionen und zeigt offen, wie Daten im Speicher dargestellt werden.

C++

C++ erlaubt weiterhin Arbeit auf niedriger Ebene, ergänzt aber Bibliothekstypen und sicherere Abstraktionen.

Übungen zur Vertiefung

Führe beide Versionen aus und ändere dann den Code, um zu beobachten, welche Sicherheit jede Sprache bietet.

  • Teste ungültige Eingaben und Grenzwerte.
  • Kompiliere mit den Flags -Wall -Wextra -Wpedantic, um zusätzliche Warnungen einzuschalten.
  • Lagere gemeinsame Deklarationen in eine Header-Datei und die Implementierung in eine eigene Datei aus.

Mit einer Challenge üben

Nutze den Inhalt dieser Lektion, um ein echtes Problem zu lösen. Jede Challenge läuft im Browser, mit sofortigen Tests und einem KI-Review.

Alle Challenges