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;
}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;
}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;
}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;
}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;
}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;
}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
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
Aufgabe
Gib alle Zahlen von 1 bis 100 aus, die durch 7 teilbar sind, und berechne ihre Summe.