EMZETT.
Login

Kurz: int main() { int punkte = 73; if (punkte >= 90) std::cout << “sehr gut\n”; else if (punkte >= 75) std::cout << “gut\n”; else if (punkte >= 50) std::cout << “bestanden\n”; else std::cout << “nicht bestanden\n”;

Teil des Kurses C++

Kapitel 3 von 15 im Kurs C++. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

if, else, switch

#include <iostream>
 
int main() {
    int punkte = 73;
    if (punkte >= 90) std::cout << "sehr gut\n";
    else if (punkte >= 75) std::cout << "gut\n";
    else if (punkte >= 50) std::cout << "bestanden\n";
    else std::cout << "nicht bestanden\n";
 
    // if mit Initialisierung (C++17): Variable gilt nur im if-Block
    if (int rest = punkte % 10; rest == 3) std::cout << "endet auf 3\n";
 
    switch (punkte / 25) {
        case 0: case 1: std::cout << "unter 50\n"; break;
        case 2:         std::cout << "50 bis 74\n"; break;
        default:        std::cout << "ab 75\n";
    }
    std::cout << (punkte >= 50 ? "ok" : "nicht ok") << '\n';
    return 0;
}

Ausgabe:

bestanden
endet auf 3
50 bis 74
ok

Schleifen

#include <iostream>
#include <vector>
#include <map>
#include <string>
 
int main() {
    for (int i = 1; i <= 5; i++) std::cout << i << ' ';
    std::cout << '\n';
 
    int n = 1;
    while (n < 100) n *= 2;
    std::cout << n << '\n';
 
    int versuche = 0;
    do { versuche++; } while (versuche < 3);
    std::cout << versuche << '\n';
 
    // Bereichs-for: durch Container laufen (der Normalfall)
    std::vector<int> zahlen{5, 3, 9, 1};
    for (int z : zahlen) std::cout << z << ' ';
    std::cout << '\n';
    for (auto& z : zahlen) z *= 10;                       // Referenz: Elemente ändern
    for (const auto& z : zahlen) std::cout << z << ' ';   // const&: nur lesen, ohne Kopie
    std::cout << '\n';
 
    std::map<std::string, int> alter{{"Mia", 17}, {"Tom", 19}};
    for (const auto& [name, jahre] : alter)                 // Structured Binding (C++17)
        std::cout << name << "=" << jahre << ' ';
    std::cout << '\n';
    for (char c : std::string("abc")) std::cout << c << '-';
    std::cout << '\n';
    return 0;
}

Ausgabe:

1 2 3 4 5
128
3
5 3 9 1
50 30 90 10
Mia=17 Tom=19
a-b-c-

Das bereichsbasierte for ist kürzer und sicherer als Indizes. Nimm auto& zum Ändern, const auto& zum Lesen großer Elemente, auto (Kopie) für kleine Typen.

break, continue

#include <iostream>
 
int main() {
    for (int i = 1; i <= 10; i++) {
        if (i % 2 == 0) continue;
        if (i > 7) break;
        std::cout << i << ' ';
    }
    std::cout << '\n';
    bool gefunden = false;
    for (int a = 1; a < 10 && !gefunden; a++)
        for (int b = 1; b < 10; b++)
            if (a * b == 42) { std::cout << a << '*' << b << '\n'; gefunden = true; break; }
    return 0;
}

Ausgabe:

1 3 5 7
6*7

Algorithmen statt Schleifen

Für viele Aufgaben gibt es fertige Algorithmen in <algorithm> und <numeric>:

#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
 
int main() {
    std::vector<int> z{5, 3, 9, 1, 7};
    int summe = std::accumulate(z.begin(), z.end(), 0);
    auto [kleinste, groesste] = std::minmax_element(z.begin(), z.end());
    int gerade = std::count_if(z.begin(), z.end(), [](int x) { return x % 2 == 0; });
    std::sort(z.begin(), z.end());
    bool da = std::binary_search(z.begin(), z.end(), 7);
    std::cout << summe << ' ' << *kleinste << ' ' << *groesste << ' ' << gerade << ' ' << da << '\n';
    for (int x : z) std::cout << x << ' ';
    std::cout << '\n';
    return 0;
}

Ausgabe:

25 7 5 0 1
1 3 5 7 9

Merke

  • if (init; bedingung) begrenzt Hilfsvariablen auf den Block
  • Bereichs-for for (const auto& x : container) ist der Standard; Structured Bindings zerlegen Paare
  • break, continue wie in C
  • Algorithmen (sort, accumulate, count_if) ersetzen oft handgeschriebene Schleifen
  • Zählschleifen mit size_t-Vergleichen vorsichtig schreiben (vorzeichenlos!)

Übungsaufgabe

Lies Zahlen aus einem std::vector und gib mit Algorithmen Summe, Mittelwert und Anzahl der Elemente über dem Mittelwert aus.

Quiz zur Selbstkontrolle

Weiter im Kurs

Zurück: Variablen, Typen und Ausgabe

Weiter: Funktionen, Lambdas und constexpr

Alle Kapitel: C++ im Überblick