Grundlagen der Programmierung in C
Prof. Dr. Alexandra Mikityuk
HTW Berlin - Wintersemester 2025/26
In dieser Vorlesung lernen Sie:
✅ Zahlen speichern, ausgeben und vom Benutzer einlesen
✅ Mit verschiedenen Datentypen arbeiten
✅ Berechnungen durchführen
✅ Fehler finden und beheben
Innerhalb eines Programms müssen unterschiedliche Daten ermittelt, gespeichert, weiterverarbeitet und ausgegeben werden.
Wir tätigen einen Einkauf in einem Geschäft. Schritt für Schritt lernen Sie weitere Programmierelemente kennen, die Ihnen die Möglichkeit geben, diesen Einkauf immer realistischer zu gestalten.
Daten können sein:
Einzelne Daten werden in Variablen gespeichert. Variablen können ihren Wert verändern.
In C gibt es unterschiedliche Typen von Variablen. Jeder dieser sogenannten Datentypen hat einen eigenen Einsatzzweck und bietet bestimmte Vorteile.
| Datentyp | Beschreibung | Beispiel |
|---|---|---|
int |
Ganze Zahlen | 2, -5, 100 |
double |
Zahlen mit Nachkommastellen | 1.45, 3.14, -2.5 |
Eine Deklaration dient dazu, einer Variablen einen Namen zu geben und sie einem Datentyp zuzuordnen. Eine Variable kann erst nach einer Deklaration verwendet werden.
Eine Variable kann per Zuweisung einen Wert erhalten. Die Zuweisung wird
mithilfe des Zeichens = notiert. Die Variable auf der linken Seite erhält den Wert,
der auf der rechten Seite des Gleichheitszeichens steht.
⚠️ Wichtig: Vor der ersten Zuweisung hat eine Variable einen zufälligen Wert!
int, double, return)Verwenden Sie aussagekräftige Namen! Wenn Sie mehrere Preise speichern möchten,
nennen Sie die Variablen zum Beispiel preisApfel und preisBanane.
Diese Schreibweise nennt sich camelCase, wegen des "Kamelhöckers" mitten im Wort.
printf()Sie können zu jedem Zeitpunkt des Programms den aktuellen Wert einer Variablen auf dem Bildschirm ausgeben. Dazu werden sogenannte Platzhalter benötigt.
%d oder %i - für int (ganze Zahlen)%f - für double (Kommazahlen)Der Wert der Variablen anzahl steht am Ende der ersten Ausgabe.
Der Wert der Variablen preis wird jeweils mitten in der zweiten und dritten Ausgabe eingebettet.
Ohne genauere Angabe führt %f zu einer Formatierung der Ausgabe
auf sechs Nachkommastellen.
Durch die Angabe %.2f findet eine Formatierung
auf zwei Nachkommastellen statt.
⚠️ Dezimalpunkt beachten: In C verwenden wir immer einen Dezimalpunkt anstelle des deutschen Dezimalkommas.
scanf()Ein Programm wird erst interaktiv, wenn sein Benutzer die Möglichkeit hat, Eingaben zu machen.
Dazu setzen Sie als Entwickler die Funktion scanf() ein.
⚠️ Adressoperator & beachten!
Bei scanf() werden Platzhalter benötigt, wie bei der Funktion printf().
Wichtig:
• Für int verwenden Sie %d
• Für double verwenden Sie beim Einlesen %lf (nicht %f!)
Außerdem muss vor dem Namen der Variablen das Zeichen
& angegeben werden. Dabei handelt es sich um den sogenannten
Adressoperator, der auf die Adresse der Variablen im Speicher verweist.
Aber auch Sie als Entwickler könnten Fehler machen.
Hier sind einige Tipps, die Sie beim Einsatz der Funktion scanf() beachten sollten:
%d oder %lf, nicht etwa %d\n oder %.2lf.& zu notieren.Das Gefährliche an den genannten Fehlern des Entwicklers: Es sind keine Syntaxfehler. Das Programm wird also leider übersetzt, ohne sichtbare Fehlermeldung.
Erst während der Laufzeit des Programms treten Fehler auf, weil zum Beispiel eine Variable nicht den richtigen Eingabewert erhalten hat und in der Folge ein unverständliches Ergebnis auftritt.
Sie werden sich fragen: Wieso meldet der Compiler diese Fehler nicht als Syntaxfehler?
Der Grund liegt unter anderem in der Vielfalt der Programmierung mit C. Es gibt auch Operationen für andere Einsatzzwecke, die genau diese Schreibweise erfordern, die hier zunächst als falsch erscheint.
In diesem Abschnitt führen wir einige Berechnungen im Bereich der Grundrechenarten durch. Wir benutzen die Operatoren:
| Operator | Operation | Beispiel |
|---|---|---|
| + | Addition | a + b |
| - | Subtraktion | a - b |
| * | Multiplikation | a * b |
| / | Division | a / b |
Punkt vor Strich: Wie in der Mathematik gilt auch in C die Regel
Punktrechnung vor Strichrechnung. Die Operatoren * und /
haben also Vorrang vor den Operatoren + und -. Sie können zusätzlich
Klammern setzen, um die Reihenfolge der Berechnung zu beeinflussen.
Beispiel: Bei der Berechnung des mittleren
Preises pro Artikel wird eine double-Variable durch die Summe von zwei
int-Variablen geteilt. Es ergibt sich ein double-Wert.
Falls an einer Division zwei ganze Zahlen beteiligt sind, ergibt sich wiederum eine ganze Zahl. Sollten sich Nachkommastellen ergeben, werden diese abgeschnitten.
Beispiel: 11 durch 4 ergibt den Wert 2 und nicht etwa 2.75, wie es mathematisch richtig wäre.
Als Abhilfe kann zum Beispiel Folgendes dienen:
11.0 / 4 oder 11 / 4.0, geben also eine
der beiden Zahlen als double-Wert an.1.0 * 11 / 4, multiplizieren also einen
double-Wert mit der ersten Zahl.Bei der Entwicklung Ihrer eigenen Programme sollten Sie Schritt für Schritt vorgehen. Stellen Sie sich zuerst einige Überlegungen an, wie das gesamte Programm aufgebaut sein soll, und zwar auf Papier.
Aus welchen Teilen sollte es nacheinander bestehen? Versuchen Sie nicht, das gesamte Programm mit all seinen komplexen Bestandteilen auf einmal zu schreiben! Dies ist der größte Fehler, den Einsteiger (und manchmal auch Fortgeschrittene) machen können.
Sollte eines Ihrer Programme unerwartete Ergebnisse haben, so müssen Sie sich auf die Suche nach dem Fehler machen und diesen beseitigen.
Die verschiedenen Entwicklungsumgebungen bieten Ihnen einige Möglichkeiten für dieses sogenannte Debugging. Ich beschreibe diese Vorgänge anhand der Entwicklungsumgebung Visual Studio Code. In den anderen Umgebungen funktioniert die Fehlersuche auf vergleichbare Art und Weise.
Klicken Sie einmal auf den grauen Balken vor einer Programmzeile. Es wird ein roter Punkt angezeigt.
Über DEBUG → Start Debugging können Sie die Werte Ihrer Variablen in Echtzeit beobachten.
Mit F10 (Step Over) oder F11 (Step Into) führen Sie das Programm Zeile für Zeile aus.
Tipp: Beobachten Sie, wie sich die Variablenwerte im Watch-Fenster ändern, während Sie Zeile für Zeile durchgehen!
So sieht eine typische Debugging-Session in VS Code aus:
Gelbe Markierung: Aktuelle Zeile (wird als nächstes ausgeführt)
Roter Punkt: Breakpoint
Variablen-Panel: Zeigt aktuelle Werte (summe hat noch keinen Wert)
Setzen Sie Breakpoints an kritischen Stellen und verwenden Sie F10, um Zeile für Zeile zu gehen. Beobachten Sie im Variables-Panel, wie sich die Werte ändern. So finden Sie Fehler in der Logik Ihres Programms!
Schreiben Sie ein Programm in der Datei
u_daten.c. Es soll die folgende Ausgabe ermöglichen (hier mit Eingaben des Benutzers):
Der Benutzer soll also Anzahl und Preis für zwei verschiedene eingekaufte Artikel eingeben. Anschließend wird die Summe der Rechnung ermittelt. Außerdem wird ein Rabatt von 20 % gewährt.
Als Letztes soll die Summe einschließlich des eingerechneten Rabatts ausgegeben werden. Wählen Sie geeignete Variablennamen, und kommentieren Sie Ihr Programm ausreichend.
Der Rabatt von 20% bedeutet, dass der Kunde nur 80% bezahlen muss. Daher multiplizieren wir mit 0.8 (was 80% entspricht).
Alternative: summeMitRabatt = summeOhneRabatt - (summeOhneRabatt * 0.2);
int und doubleprintf() für Ausgabe%d, %fscanf() für Eingabe&Üben Sie die Konzepte mit der Übungsaufgabe! Experimentieren Sie mit verschiedenen Datentypen und Berechnungen. Nutzen Sie den Debugger, um Ihr Programm besser zu verstehen.
Die Variablen erhalten bereits bei der Deklaration einen Wert. Dies macht das Programm kompakter und übersichtlicher.
Wichtig: Die Werte können sich nach wie vor im Verlauf des Programms ändern!
Der Wert der Variablen anzahl steht am Ende der ersten Ausgabe.
Der Wert der Variablen preis wird jeweils mitten in der zweiten und
dritten Ausgabe eingebettet. Ohne genauere Angabe führt %f zu einer
Formatierung der Ausgabe auf sechs Nachkommastellen. Durch die Angabe
%.2f findet eine Formatierung auf zwei Nachkommastellen statt.
Mehrere Variablen desselben Typs können Sie durch Komma getrennt innerhalb einer Anweisung deklarieren und auch initialisieren.
Es werden zwei verschiedene Artikel eingekauft, in unterschiedlicher Anzahl. Weitere Variablen werden für die Ergebnisse der Rechenoperationen deklariert.
Tipp: Für bessere Lesbarkeit können Sie auch jede Variable in einer eigenen Zeile deklarieren!
| Platzhalter | Bedeutung | Beispiel |
|---|---|---|
%d oder %i |
Ganze Zahl (int) | 42 |
%f |
Kommazahl (double) | 3.140000 |
%.2f |
2 Nachkommastellen | 3.14 |
%.0f |
Keine Nachkommastellen | 3 |
%5d |
Mindestens 5 Zeichen breit | 42 |
%d (genau wie bei printf)%lf (NICHT %f!)Das &-Zeichen vor dem Variablennamen ist der Adressoperator.
Er gibt scanf() die Adresse der Variable im Speicher, sodass die Funktion
den eingelesenen Wert dort ablegen kann.
Merke: Bei scanf() immer &
vor dem Variablennamen!
Wie in der Mathematik gilt: Punktrechnung vor Strichrechnung.
Die Operatoren * und / haben also Vorrang vor den Operatoren
+ und -. Sie können zusätzlich Klammern setzen, um die Reihenfolge
der Berechnung zu beeinflussen.
| Priorität | Operatoren | Beschreibung |
|---|---|---|
| 1 (höchste) | ( ) |
Klammern |
| 2 | * / % |
Multiplikation, Division, Modulo |
| 3 (niedrigste) | + - |
Addition, Subtraktion |
Eine Rechenoperation, an der eine ganze Zahl und eine Zahl mit Nachkommastellen beteiligt sind, ergibt in C eine Zahl mit Nachkommastellen.
Bei der Berechnung des mittleren Preises pro Artikel wird eine double-Variable
durch die Summe von zwei int-Variablen geteilt. Es ergibt sich ein
double-Wert.
Prof. Dr. Alexandra Mikityuk
📧 HTW Berlin
🏢 Raum 308
📞 +49 30 5019-2664
Schreiben Sie das Rabatt-Programm und testen Sie es ausführlich.