Grundlagen der Programmierung in C
HTW Berlin • WiSe 2025/26
Schleifen wiederholen Programmteile mehrmals, abhängig von Bedingungen oder einer festgelegten Anzahl.
| Typ | Verwendung | Prüfung |
|---|---|---|
| for | Wenn die Anzahl der Durchläufe bekannt ist | Am Anfang |
| while | Bedingung wird am Anfang geprüft (kann 0-mal ausgeführt werden) |
Am Anfang |
| do-while | Bedingung wird am Ende geprüft (wird mindestens 1-mal ausgeführt) |
Am Ende |
💡 Tipp: Wählen Sie den passenden Schleifentyp je nach Anforderung!
Die for-Schleife verwendet man, wenn die Anzahl der Durchläufe bekannt ist.
for (int i = 0; i < 10; i++) { // Code wird 10-mal ausgeführt printf("Durchlauf %d\n", i); }
Aufgabe: Berechne Summe und Preis von 3 Artikeln
#include <stdio.h> int main() { int anzahl, nummer; double preis, summeRechnung; summeRechnung = 0.0; /* Regelmäßige Wiederholung */ for(nummer = 1; nummer < 4; nummer = nummer + 1) { printf("Artikel %d, Anzahl: ", nummer); scanf("%d", &anzahl); printf("Artikel %d, Preis in Euro: ", nummer); scanf("%lf", &preis); summeRechnung = summeRechnung + anzahl * preis; } printf("Summe der Rechnung: %.2f Euro\n", summeRechnung); return 0; }
Die while-Schleife prüft die Bedingung vor jedem Durchlauf.
while (bedingung) { // Code wird ausgeführt, solange Bedingung wahr ist }
⚠️ Achtung: Kein Semikolon direkt nach dem Kopf der while-Schleife!
Aufgabe: Benutzer bestimmt, wie oft die Schleife läuft
#include <stdio.h> int main() { int anzahl, nummer, nochEiner; double preis, summeRechnung; nummer = 0; summeRechnung = 0.0; /* Abfrage */ printf("Wollen Sie Artikel eingeben (Ja=1, Nein=0): "); scanf("%d", &nochEiner); /* Bedingte Wiederholung */ while(nochEiner == 1) { nummer = nummer + 1; printf("Artikel %d, Anzahl: ", nummer); scanf("%d", &anzahl); printf("Artikel %d, Preis in Euro: ", nummer); scanf("%lf", &preis); summeRechnung = summeRechnung + anzahl * preis; printf("Noch ein Artikel (Ja=1, Nein=0): "); scanf("%d", &nochEiner); } printf("Summe der Rechnung: %.2f Euro\n", summeRechnung); return 0; }
Die do-while-Schleife prüft die Bedingung nach jedem Durchlauf.
do { // Code wird mindestens 1-mal ausgeführt } while (bedingung); // Semikolon nicht vergessen!
💡 Merksatz: do-while wird auch als "fußgesteuerte Schleife" bezeichnet, da die Prüfung am Ende (Fuß) der Schleife stattfindet.
Aufgabe: Eingabe prüfen und bei Fehler erneut eingeben lassen
#include <stdio.h> int main() { int anzahl; double preis; /* Eingabe mit Validierung */ do { printf("Anzahl eingeben (positiv): "); scanf("%d", &anzahl); if(anzahl <= 0) printf("Anzahl muss positiv sein!\n"); } while(anzahl <= 0); do { printf("Preis in Euro eingeben (0-10): "); scanf("%lf", &preis); if(preis < 0 || preis > 10) printf("Preis muss zwischen 0 und 10 Euro sein!\n"); } while(preis < 0 || preis > 10); printf("Gesamtpreis: %.2f Euro\n", anzahl * preis); return 0; }
| Kriterium | for | while | do-while |
|---|---|---|---|
| Prüfung | Am Anfang | Am Anfang | Am Ende |
| Min. Durchläufe | 0 | 0 | 1 |
| Anzahl bekannt? | Ja | Nein | Nein |
| Typische Verwendung | Zählschleifen | Bedingte Wiederholung | Eingabekontrolle |
| Beispiel | for(i=0; i<10; i++) | while(weiter==1) | do {...} while(x<0) |
Bricht die Schleife sofort ab
for(int i=0; i<10; i++) { if(i == 5) break; printf("%d ", i); } // Ausgabe: 0 1 2 3 4
Verwendung: Vorzeitiges Beenden bei bestimmten Bedingungen
Überspringt den Rest des aktuellen Durchlaufs
for(int i=0; i<10; i++) { if(i == 5) continue; printf("%d ", i); } // Ausgabe: 0 1 2 3 4 6 7 8 9
Verwendung: Überspringen bestimmter Werte
Für übersichtliche Tabellenausgaben können wir die Ausgabe formatieren.
| Format | Bedeutung | Beispiel |
|---|---|---|
%6d |
Ganzzahl, mindestens 6 Zeichen breit | printf("%6d", 12); → "____12" |
%06d |
Ganzzahl, mit führenden Nullen | printf("%06d", 12); → "000012" |
%.2f |
Fließkommazahl, 2 Nachkommastellen | printf("%.2f", 1.456); → "1.46" |
%8.2f |
Fließkomma, 8 Zeichen breit, 2 Nachkommastellen | printf("%8.2f", 1.45); → "____1.45" |
💡 Tipp: Leerzeichen werden automatisch eingefügt, um die angegebene Breite zu erreichen!
#include <stdio.h> int main() { int anzahlApfel = 12, anzahlRadio = 2; double preisApfel = 1.45, preisRadio = 109.95; /* Ausgabe mit führenden Nullen */ printf("Anzahl\n"); printf("%06d\n", anzahlApfel); printf("%06d\n", anzahlRadio); /* Ausgabe mit Nachkommastellen */ printf("\n Preis\n"); printf("%8.2f Euro\n", preisApfel); printf("%8.2f Euro\n", preisRadio); return 0; }
Anzahl
000012
000002
Preis
1.45 Euro
109.95 Euro
Eine Schleife, die niemals endet, weil die Bedingung immer wahr bleibt!
int i = 0; while(i < 10) { printf("%d ", i); // i wird nie erhöht! → Endlosschleife! }
int i = 0; while(i < 10) { printf("%d ", i); i++; // i wird erhöht! }
💡 Tipp: Drücken Sie Strg+C (Windows/Linux) oder Cmd+. (macOS), um ein Programm mit Endlosschleife zu beenden!
Schleifen können ineinander verschachtelt werden.
#include <stdio.h> int main() { /* Kleines Einmaleins */ for(int i = 1; i <= 10; i++) { for(int j = 1; j <= 10; j++) { printf("%4d", i * j); } printf("\n"); // Neue Zeile nach jeder Reihe } return 0; }
Mit geschachtelten Schleifen können wir Muster erzeugen.
for(int i=1; i<=5; i++) { for(int j=1; j<=i; j++) { printf("* "); } printf("\n"); }
*
* *
* * *
* * * *
* * * * *
for(int i=1; i<=4; i++) { for(int j=1; j<=4; j++) { printf("# "); } printf("\n"); }
# # # #
# # # #
# # # #
# # # #
❌ Falsch:
for(int i=0; i<=10; i++) { // Läuft 11-mal! }
✅ Richtig:
for(int i=0; i<10; i++) { // Läuft 10-mal (0-9) }
❌ Falsch:
while(i < 10); // Semikolon! { i++; } // Endlosschleife!
✅ Richtig:
while(i < 10) // Kein Semikolon { i++; }
❌ Falsch:
int i = 0; while(i < 10) { printf("%d ", i); // i++ fehlt! } // Endlosschleife!
✅ Richtig:
int i = 0; while(i < 10) { printf("%d ", i); i++; // Variable erhöhen! }
❌ Falsch:
do { printf("Hallo\n"); } while(x < 10) // Fehlt!
✅ Richtig:
do { printf("Hallo\n"); } while(x < 10); // Semikolon!
Aufgabe: Summiere Zahlen, die der Benutzer eingibt, bis 0 eingegeben wird
#include <stdio.h> int main() { int zahl, summe = 0, anzahl = 0; printf("Zahlen addieren (0 zum Beenden):\n"); do { printf("Zahl eingeben: "); scanf("%d", &zahl); if(zahl != 0) { summe = summe + zahl; anzahl++; } } while(zahl != 0); if(anzahl > 0) { printf("Summe: %d\n", summe); printf("Durchschnitt: %.2f\n", (double)summe / anzahl); } return 0; }
for-Schleifen können auch rückwärts zählen!
#include <stdio.h> int main() { printf("Countdown:\n"); for(int i = 10; i >= 1; i--) { printf("%d...\n", i); } printf("Start!\n"); return 0; }
Countdown:
10...
9...
8...
...
2...
1...
Start!
Die Schrittweite muss nicht immer 1 sein!
for(int i=0; i<=10; i+=2) { printf("%d ", i); } // Ausgabe: 0 2 4 6 8 10
for(int i=0; i<=50; i+=5) { printf("%d ", i); } // Ausgabe: 0 5 10 15 ... 50
for(int i = 1; i <= 20; i += 2) { printf("%d ", i); // 1 3 5 7 9 11 13 15 17 19 }
for(int i=0; i<5; i++) { printf("%d ", i); } // i existiert hier NICHT mehr! printf("%d", i); // FEHLER!
int i; for(i=0; i<5; i++) { printf("%d ", i); } // i existiert noch! printf("\ni = %d", i); // OK! i=5
💡 Tipp: Wenn Sie die Schleifenvariable nach der Schleife benötigen, deklarieren Sie sie vorher!
Beispiel: Menü mit Eingabevalidierung
#include <stdio.h> int main() { int wahl, anzahl; do { printf("\n=== MENÜ ===\n"); printf("1. Zahlen ausgeben\n"); printf("2. Sterne ausgeben\n"); printf("3. Beenden\n"); printf("Wahl: "); scanf("%d", &wahl); if(wahl == 1) { printf("Wie viele? "); scanf("%d", &anzahl); for(int i = 1; i <= anzahl; i++) printf("%d ", i); printf("\n"); } else if(wahl == 2) { printf("Wie viele? "); scanf("%d", &anzahl); for(int i = 1; i <= anzahl; i++) printf("* "); printf("\n"); } } while(wahl != 3); printf("Auf Wiedersehen!\n"); return 0; }
int summe = 0; for(int i = 1; i <= 5; i++) { summe += i; } printf("Summe: %d\n", summe);
💭 Denken Sie nach... Die Lösung kommt auf der nächsten Folie!
| Durchlauf | i | summe vorher | summe += i | summe nachher |
|---|---|---|---|---|
| 1 | 1 | 0 | 0 + 1 | 1 |
| 2 | 2 | 1 | 1 + 2 | 3 |
| 3 | 3 | 3 | 3 + 3 | 6 |
| 4 | 4 | 6 | 6 + 4 | 10 |
| 5 | 5 | 10 | 10 + 5 | 15 |
int i = 0; while(i < 3) { printf("Hallo\n"); i++; }
💡 Wichtig: Die Bedingung wird vor jedem Durchlauf geprüft!
for(int i=0; i<strlen(text); i++) { // strlen() wird JEDES Mal berechnet! printf("%c", text[i]); }
int laenge = strlen(text); for(int i=0; i<laenge; i++) { // Länge nur 1x berechnet printf("%c", text[i]); }
Technik: printf() zum Debuggen verwenden
int summe = 0; for(int i = 1; i <= 5; i++) { /* Debug-Ausgabe HINZUFÜGEN */ printf("DEBUG: i=%d, summe vorher=%d\n", i, summe); summe += i; /* Debug-Ausgabe NACH der Berechnung */ printf("DEBUG: summe nachher=%d\n\n", summe); } printf("Endergebnis: %d\n", summe);
💡 Merke: Wähle die Schleife passend zur Aufgabe!
Viel Erfolg bei Labor 4! 🎯