MINT üben

Kontrollstrukturen in C

Dreißig Übungen zu Verzweigungen und Schleifen in C — vom Wahrheitswert über switch bis zur Endlosschleife.

Dein Fortschritt:
0 / 0 Aufgaben
1

Übungsaufgaben

Dreißig Übungen in gemischter Reihenfolge — du klickst, ziehst, ordnest, rechnest und knobelst. Jede Übung gibt dir sofort eine Rückmeldung, und zu jeder Aufgabe gibt es zwei gestufte Tipps: Der erste zeigt die Richtung, der zweite den entscheidenden Schritt. Die Chips zeigen das Anforderungsniveau: AFB I heißt wiedergeben und direkt anwenden, AFB II selbst entscheiden und verknüpfen, AFB III begründen, beurteilen oder eine Falle durchschauen. Aufgaben mit dem Chip Mix verbinden Wissen aus früheren Unterkapiteln, bei Trick steckt eine Falle drin. Fährst du über ein unterstrichenes Arbeitswort, siehst du, was es genau von dir verlangt.

A1
Schleife mit Filter
AFB II
Gewünschte Ausgabe
20 16 8 4

Bestimme für jede Lücke den Eintrag, der genau diese Ausgabe erzeugt.

Wähle in jedem Menü den passenden Eintrag und prüfe dann alle auf einmal.
C · Ausschnitt
for (int i = ; i  4; ) {
    if (i % 3  0) {
        printf("%d ", i);
    }
}
printf("\n");
Zwei Stellen sind knifflig: Mit i > 4 oder i != 4 fehlt am Ende die 4 — die Schleife bricht ab, bevor sie ausgegeben wird. Im if muss != stehen: Ausgegeben werden die Zahlen, bei denen der Rest nicht 0 ist. Ein einzelnes = wäre eine Zuweisung, keine Frage.
Ansatz: Die 12 fehlt in der Ausgabe. Welche Eigenschaft hat die 12, die 20, 16, 8 und 4 nicht haben?
Weiter: Prüfe den letzten Durchlauf: Bei i = 4 muss die Bedingung noch wahr sein.
A2
Übersetzen oder Ausführen?
AFB IIMix

Vermute für jede Programmzeile, ob gcc sie beim Übersetzen ablehnt oder ob das Programm trotzdem startet.

Schiebe die oberste Karte auf den passenden Stapel: ziehen, einen der beiden Stapel-Knöpfe drücken oder auf der Karte ←/→. Eine abgelegte Karte holst du mit Klick oder Enter zurück. „Prüfen“ schickt falsch abgelegte Karten mit einem Hinweis zurück in den Stapel.
n = n - 1 ohne Semikolon
for (int i = 0; i < 3; i++);
if (a = b)
case x > 5:
while (n > 0) { n++; }
else { … } ohne vorheriges if
int x = 7 / 2;
do { n--; } while (n > 0) ohne Semikolon
gcc prüft nur die Form der Anweisungen (Syntax). Alles, was formal richtig ist — auch Endlosschleifen oder = statt == — startet und verhält sich dann falsch.
Ansatz: gcc prüft nur, ob das Programm nach den Regeln der Sprache aufgebaut ist.
Weiter: Fehlende Semikolons und unmögliche Konstruktionen (case mit Bedingung, else ohne if) stoppt gcc; falsches Verhalten bemerkt gcc nicht.
A3
Teile der for-Klammer
AFB I

Lies am Schleifenkopf ab, welcher Teil jeweils gemeint ist, und klicke ihn an.

Klicke das gesuchte Element an. Mit der Tastatur: Tab zum Wandern, Enter zum Auswählen.

for (;;) {int i = 0i < 10i += 2printf("%d ", i);
Die drei Teile der for-Klammer heißen Start; Bedingung; Schritt. Der Start läuft einmal, die Bedingung vor jedem Durchlauf, der Schritt nach jedem Durchlauf des Rumpfs.
Ansatz: Die Klammer hat drei Teile, durch Semikolons getrennt: Start; Bedingung; Schritt.
Weiter: Der Rumpf in den geschweiften Klammern ist kein Teil der Klammer, sondern das, was wiederholt wird.