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
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)
leerSetze 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
Wochenendeswitch 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 1break, 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
endegoto 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 FizzBuzzAchtung
Ein Semikolon direkt hinter
for (...)oderwhile (...)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 switchfür Ganzzahlen,breaknicht vergessenforfür Zählschleifen,whilefür Bedingungen,do-whileläuft mindestens einmalbreakbeendet,continueüberspringt;gotonur 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
Was passiert in switch ohne break?
- Der Code läuft im nächsten case weiter (richtig)
- Ein Compilerfehler
- Das Programm endet
- Der switch wiederholt sich
Welche Schleife läuft mindestens einmal?
- do-while (richtig)
- while
- for
- goto
Was bewirkt continue?
- Springt zum nächsten Durchlauf (richtig)
- Beendet die Schleife
- Beendet das Programm
- Wiederholt den Durchlauf
Weiter im Kurs
Zurück: Ein- und Ausgabe
Weiter: Funktionen
Alle Kapitel: C im Überblick