EMZETT.
Login

Kurz: int main(void) { int punkte = 73; if (punkte >= 90) { puts(“sehr gut”); } else if (punkte >= 75) { puts(“gut”); } else if (punkte >= 50) { puts(“bestanden”); } else { puts(“nicht bestanden”); }

Teil des Kurses C

Kapitel 6 von 15 im Kurs C (Abschnitt „Programmablauf“). Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

if, else if, else

#include <stdio.h>
 
int main(void) {
    int punkte = 73;
    if (punkte >= 90) {
        puts("sehr gut");
    } else if (punkte >= 75) {
        puts("gut");
    } else if (punkte >= 50) {
        puts("bestanden");
    } else {
        puts("nicht bestanden");
    }
 
    int x = 0;
    if (x) puts("wahr"); else puts("falsch (0 ist falsch)");
    const char *text = "";
    if (text && text[0]) puts("nicht leer"); else puts("leer");
    return 0;
}

Ausgabe:

bestanden
falsch (0 ist falsch)
leer

Setze immer geschweifte Klammern, auch bei einer Zeile. Das vermeidet Fehler beim späteren Erweitern.

switch

#include <stdio.h>
 
int main(void) {
    for (int tag = 1; tag <= 7; tag += 2) {
        switch (tag) {
            case 1:  puts("Montag"); break;
            case 3:  puts("Mittwoch"); break;
            case 6:
            case 7:  puts("Wochenende"); break;
            default: puts("anderer Tag");
        }
    }
    return 0;
}

Ausgabe:

Montag
Mittwoch
anderer Tag
Wochenende

switch funktioniert nur mit ganzzahligen Werten (int, char, enum). Ohne break läuft der Code in den nächsten Fall weiter (Fall-through), manchmal gewollt, oft ein Fehler.

for, while, do-while

#include <stdio.h>
 
int main(void) {
    for (int i = 1; i <= 5; i++) printf("%d ", i);
    printf("\n");
 
    int n = 1;
    while (n < 100) n *= 2;
    printf("%d\n", n);
 
    int versuche = 0;
    do { versuche++; } while (versuche < 3);       // mindestens einmal
    printf("%d\n", versuche);
 
    for (int i = 10; i > 0; i -= 3) printf("%d ", i);
    printf("\n");
    return 0;
}

Ausgabe:

1 2 3 4 5
128
3
10 7 4 1

break, continue und goto

#include <stdio.h>
 
int main(void) {
    for (int i = 1; i <= 10; i++) {
        if (i % 2 == 0) continue;       // gerade überspringen
        if (i > 7) break;               // abbrechen
        printf("%d ", i);
    }
    printf("\n");
 
    for (int a = 1; a < 10; a++) {
        for (int b = 1; b < 10; b++) {
            if (a * b == 42) { printf("%d * %d\n", a, b); goto fertig; }
        }
    }
fertig:
    printf("ende\n");
    return 0;
}

Ausgabe:

1 3 5 7
6 * 7
ende

goto ist selten nötig; ein sinnvoller Einsatz ist das Verlassen tief verschachtelter Schleifen und das Aufräumen bei Fehlern.

Tabellen und Muster

#include <stdio.h>
 
int main(void) {
    for (int zeile = 1; zeile <= 4; zeile++) {
        for (int spalte = 1; spalte <= 5; spalte++) printf("%4d", zeile * spalte);
        printf("\n");
    }
    for (int i = 1; i <= 4; i++) {
        printf("%*s", 4 - i, "");                 // Einrückung
        for (int j = 0; j < 2 * i - 1; j++) putchar('*');
        putchar('\n');
    }
    return 0;
}

Ausgabe:

1   2   3   4   5
   2   4   6   8  10
   3   6   9  12  15
   4   8  12  16  20
   *
  ***
 *****
*******

Klassische Algorithmen

#include <stdio.h>
 
int main(void) {
    // Primzahlen bis 30
    for (int n = 2; n <= 30; n++) {
        int prim = 1;
        for (int t = 2; t * t <= n; t++) if (n % t == 0) { prim = 0; break; }
        if (prim) printf("%d ", n);
    }
    printf("\n");
    // Fibonacci
    long a = 0, b = 1;
    for (int i = 0; i < 12; i++) { printf("%ld ", a); long t = a + b; a = b; b = t; }
    printf("\n");
    // Quersumme
    int zahl = 12345, summe = 0;
    while (zahl > 0) { summe += zahl % 10; zahl /= 10; }
    printf("%d\n", summe);
    // FizzBuzz
    for (int i = 1; i <= 15; i++) {
        if (i % 15 == 0) printf("FizzBuzz ");
        else if (i % 3 == 0) printf("Fizz ");
        else if (i % 5 == 0) printf("Buzz ");
        else printf("%d ", i);
    }
    printf("\n");
    return 0;
}

Ausgabe:

2 3 5 7 11 13 17 19 23 29
0 1 1 2 3 5 8 13 21 34 55 89
15
1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz

Achtung

Ein Semikolon direkt hinter for (...) oder while (...) macht aus der Schleife eine leere Schleife: for (i = 0; i < 3; i++); Der Block danach läuft nur einmal.

Merke

  • 0 ist falsch, alles andere wahr; immer { } setzen
  • switch für Ganzzahlen, break nicht vergessen
  • for für Zählschleifen, while für Bedingungen, do-while läuft mindestens einmal
  • break beendet, continue überspringt; goto nur selten
  • Ein ; hinter der Schleife ist ein klassischer Fehler

Übungsaufgabe

Gib alle Zahlen von 1 bis 100 aus, die durch 7 teilbar sind, und berechne ihre Summe.

Quiz zur Selbstkontrolle

Weiter im Kurs

Zurück: Ein- und Ausgabe

Weiter: Funktionen

Alle Kapitel: C im Überblick