Informatik IIGrundlagen der Programmierung
Programmieren in C
Annäherung an C
Hochschule Fulda – FB ET
Sommersemester 2014
http://c-et.rz.hs-fulda.de
Peter Klingebiel, HS Fulda, DVZ
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 2
Motivation 1
• Frage: Warum müssen Sie programmieren?• Einige wenige Antworten:• moderne Geräte sind software-intensiv und
software- bestimmt• Wertschöpfung in Produkten erfolgt durch
Software• Software erlaubt gänzlich neue Einsatz-
möglichkeiten• Software spart Produktentwicklungskosten• Produktentwicklung fast nur noch software-
gestützt möglich
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 3
Motivation 2
• Frage: Warum C?• Einige wenige Antworten:• C ist (trotz einiger Tücken) (relativ) einfach• C ist (immer noch) sehr verbreitet• C hat ein sehr weites Anwendungsspektrum• C erlaubt problemnahe Programmierung• C erlaubt hardwarenahe Programmierung• C ist Ausgangspunkt für höhere Sprachen wie
ParC, C++, C#, Objective C, Java, …• und und und ..
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 4
Motivation 3
• "Was ich nicht in C programmieren kann, kann ich überhaupt nicht programmieren!"
• "In C programmieren heisst, den Computer zu verstehen!"
• Zitate: Peter Gietz, Softwareentwickler und Geschäftsführer einer Firma
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 5
Motivation 4
• C ist eine imperative Programmiersprache• Anweisungen: Befehle, Daten• C ist
– in Ansätzen eine deklarative Sprache (Rekursion)– keine Skriptsprache
• auch wenn es C-Interpreter gibt
– keine objektorientierte Sprache• auch wenn C Objektorientierung erlaubt
– keine Sprache für die funktionale Programmierung– keine Sprache mit eingebauter Nebenläufigkeit
• auch wenn in C parallel programmiert werden kann (Betriebssystem-Prozesse, -Threads)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 6
Was ist ein Programm?
• Grundsatzerklärung einer Partei• Abfolge von Sendungen in Fernsehen oder
Radio• Abfolge von Vorträgen auf einer Tagung• Abfolge von zu behandelnden Tages-
ordnungspunkten• und und und
• eine Folge von Anweisungen für einen Computer
Programm 1
• Ein Programm / C-Programm besteht (vereinfacht dargestellt) aus
Daten Funktionen• Daten
– Eingangsdaten Ergebnisdaten– evtl. (viele) Zwischendaten– Konstante Daten Werte unveränderbar– Variable Daten Werte veränderbar
• Funktionen verarbeiten die Daten
Programm 2
Programm 3
Programm 4
Programm 5
Programm 6
• Typischer Ablauf eines C-Programms
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 13
Wie entsteht ein Programm? 1
• Programme werden formuliert von Menschen• Programme werden ausgeführt von Computern• Problemlösungen werden sofort als Programm
formuliert ???? Besser nicht!• wie komme ich zu einem Programm?• erst: es gibt ein Problem• dann: Verstehen des eigentlichen Problems• ggfs. Zerlegung des Problems in Teilprobleme• dann: Modellierung einer Problemlösung• erst dann: Umsetzen in ein Computerprogramm
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 14
Wie entsteht ein Programm? 2
• Problem analysieren undModell entwerfen
• Algorithmus entwickeln• Programm kodieren• Programm übersetzen
(bis syntaktisch fehlerfrei)• Programm testen
(bis semantisch fehlerfrei ?)• Programm produktiv (??)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 15
Wie entsteht ein Programm? 3
• Nach Problemanalyse und dem Entwurfdes Lösungsalgorithmus:
• Entwurf des Programms in Pseudocode, mitHilfe von Programmablaufplänen, Strukto-grammen oder anderen Entwurfsverfahren
• Kodieren des Programmtextes mit Editor(standalone oder in Programmierumgebung)
• Übersetzen des Programmtextes mit einemCompiler und Montieren zu einem ausführbaren Programm
• Programm testen
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 16
Wie entsteht ein Programm? 4
• Einfaches Beispiel: Kapitalberechnung• Problem: Berechnung eines fest verzinsten
Kapitals über eine feste Laufzeit in Jahren. Jährliche Ausgabe von Zinsen und Kapital
• Was benötigen wir für die Lösung?– Ausgangsdaten– Berechnungsalgorithmus– Ablauf der Berechnung
• Was brauchen wir noch?– Datenmodellierung (= Datentypen für Daten)– eventuell Hilfsdaten
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 17
Wie entsteht ein Programm? 5
• Anfangsdaten - Eingangsdaten
• Berechnungsalgorithmus
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 18
Wie entsteht ein Programm? 6
• Ablauf der Berechnung - Programmablauf
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 19
Wie entsteht ein Programm? 7
• Benötigte Hilfsdaten - Temporäre Daten
• Modellierung der Daten Datentypen
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 20
Wie entsteht ein Programm? 8
• Pseudocode für Kapitalberechnung
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 21
Wie entsteht ein Programm? 9
• Realisierung mit C
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 22
Wie entsteht ein Programm? 10
• Lauf des Programms kapital.c
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 23
Wie entsteht ein Programm? 11
• Das Programm ist sehr einfach gestrickt• Mögliche Erweiterungen / Verbesserungen?
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 24
Pseudocode
• Formulierung der Lösung kleinerer Probleme in sog. Pseudocode
• Pseudocode:– Verständliche Anweisungen für Menschen– Ohne strikte Syntax, aber intuitiv– Ähnlich unserer Umgangssprache
• Dann: Übertragung Pseudocode in Programmiersprache
• Ggfs. Zusammenfügen der Codeteile zu einem das Problem lösenden größeren Programm
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 25
Sprachmittel
• Sequenz („sodann“)• Auswahl und Verzweigungen
(Fallunterscheidungen)• Wiederholung (Schleifen)• Wiederverwendbare Einheiten (Funktionen)• Kommentare• Sprünge• Zusicherung (Bedingungen, die erfüllt sein
müssen)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 26
Sequenz
• Einfaches Sprachmittel• Anweisung 1 – Anweisung 2 – Anweisung 3• Beispiele:
– Einfaches Rezept– Formel mit Werten berechnen
• Grafische Darstellungen:– Flussdiagrammsymbole nach DIN 66001– Struktogramm
– Beispiel: Ergebnis = 90 Punkte
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 27
Fallunterscheidung
• wenn … dann … sonst• falls … dann … sonst … andernfalls … ende
• Beispiel: wenn Punktzahl > 50 dann bestanden sonst nicht bestanden
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 28
Schleifen 1
• Beispiele in Pseudocode: • wiederhole … solange• solange … mache … ende solange• von … bis … mache … nächstes• für alle … mache … nächstes• while … do … end while• repeat … until …• for … to … step … next• for all … do … next
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 29
Schleifen 2
• Abweisende Schleife (kopfgesteuert)
• Beispiel: solange bierglas nicht voll bier in glas einschenken
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 30
Schleifen 3
• Offene Schleife (fußgesteuert)
• Beispiel: bier zapfen solange bestellungen offen
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 31
Schleifen 4
• Endlosschleife
• Beispiel: immer auf tastendruck oder mausklick warten und aktion ausführen
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 32
Pseudocodebeispiele 1
• Algorithmus: MaxElementInArray• Input: Ein Feld A mit n Integerwerten• Output: Das größte Element im Feld A• Pseudocode: currentMax = A[1]for i = 1 to n do if A[i] > currentMax then currentMax = A[i] endifendforreturn currentMax
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 33
Pseudocodebeispiele 2
• Algorithmus: MaxStudentInClass• Input: Reihen von besetzten Stühlen• Output: Maximale Größe oder -1• Pseudocode:
max = -1 // Jeder ist größer als -1for each Reihe im Raum for each Stuhl in Reihe if Stuhl besetzt & Größe Teilnehmer auf Stuhl > max then max = Größe Teilnehmer auf Stuhl endif endforendforreturn max
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 34
Programmieren - Alltagsproblem
• Friedemann Weise: Fall asleep optimizing (auf youtube)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 35
Was kennen wir schon von C?
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 36
Woher kommt C? 1
• 1971-73 Dennis Ritchie entwickelt bei den Bell Laboratorien C für die Programmierung des neuen UNIX-Betriebssystems
• 1973 Implementierung von UNIX in C
• Vorläufer: B (1969/70) und BCPL (1960er Jahre)
• 1978 Ritchie/Kernighan: „The C Programming Language“ (dt. „Programmieren in C“)
• 1989 Norm ANSI X3.159-1989 Programming Language C
• 1990 ISO Standard C90
• 1995 erweiterter ISO Standard C95
• 1999 ISO/IEC 9899:1999
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 37
Woher kommt C? 2
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 38
Einsatzgebiete von C
• CAD-, CAE-, Simulationssysteme• Text- und Grafikverarbeitungssysteme• Mathematik-, Numerische Systeme• Betriebssysteme (Unix, Linux, ...)• Systemprogramme (Unix, Linux, Windows, ...)• Sprachinterpreter, -compiler (GNU C++, CC)• Netz-, Webdienste (Apache Webserver, ...)• Steuerungs-, Regelungssysteme• Aber auch: Mathlab C-Code
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 39
Wie entsteht ein C-Programm? 1
• Problem analysieren undModell entwerfen
• Algorithmus entwickeln• Programm in C kodieren• Programm mit C-Compiler
übersetzen (bis fehlerfrei)• Programm testen
(bis semantisch fehlerfrei ?)• Programm produktiv (??)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 40
Wie entsteht ein C-Programm? 2
• Übersetzung passiert in mehreren Schritten:• C-Preprozessor (cpp) - reine Textoperationen
(include, define, if, ..) im Quelltext• C-Compiler übersetzt C-Quelltext in
maschinenabhängigen Assemblercode• Assembler erzeugt noch nicht ausführbaren
Maschinencode, sog. Objektcode• Linker montiert den Objektcode mit
Funktionen aus Bibliotheken zu einem dann ausführbarem Programm
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 41
Wie wird ein C-Programm entworfen? 1
• Pseudocode, Bsp. Euklidischer Algorithmus euklid(a, b) wenn a = 0 dann liefere b sonst solange b ≠ 0 wenn a > b dann a = a – b sonst b = b – a liefere a
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 42
Wie wird ein C-Programm entworfen? 2
• On the fly? Quick and dirty?
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 43
Wie wird ein C-Programm entworfen? 3
• Pseudocode als Kommentar in C/* Funktion euklid – euklid. Algorithmus */int euklid(int a, int b){ /* wenn a = 0 dann liefere b */ if(a == 0) return(b); /* sonst solange b ≠ 0 */ while(b != 0) { /* wenn a > b dann a = a – b */ if(a > b) a = a – b;
/* sonst b = b – a */ else b = b –a; } /* liefere a */ return(a);}
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 44
Wie wird ein C-Programm entworfen? 4
• Programmablaufplan
• wirklich geeignet?• eher für Assembler• doch oft eingesetzt
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 45
Wie wird ein C-Programm entworfen? 5
• Struktogramm
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 46
Wie wird ein C-Programm entworfen? 6
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 47
Wie wird ein C-Programm ausgeführt? 1
• Ausführung direkt auf dem Prozessor– z.B. Temperaturregelung in Kühltruhe– Programm in ROM, EPROM o.ä. gespeichert– alle Funktionalitäten müssen im Programm in
Maschinencode vorhanden sein
• Ausführung auf einem Betriebssystem– Hardware ist durch das BS gekapselt– Starten/Beenden des Programms über das BS– Unterstützung durch BS bzw. BS-Funktionen,
z.B. IO, Dateien, Timer, Signale, Threads usw.
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 48
Wie wird ein C-Programm ausgeführt? 2
• Betriebssystem
• MikrocontrollerHardware / Prozessor
AnwendungsprogrammFunktionsbibliotheken
Systemcalls / Systemaufrufe
Anwendungsprogramm(incl. aller Funktionen)
Hardware / Prozessor
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 49
Wie wird ein C-Programm ausgeführt? 3
• Betriebssystem
• Mikrokontroller
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 50
Wie ist ein C-Programm aufgebaut? 1
• Beispiel hallo.c/* * hallo.c */
#include <stdio.h>
int main(void){ char *text = „Hallo, Welt!“; puts(text); return(0);}
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 51
Wie ist ein C-Programm aufgebaut? 2
• Kommentare, mit /* und */ geklammert, keine Schachtelung möglich!!!
• Zeilenkommentare mit //• Preprozessoranweisungen beginnen mit #• Schlüsselwörter, z.B. return• Bezeichner (Identifier) für Variablen, Funk-
tionsnamen usw. fangen mit Buchstaben oder Unterstrich _ an, enthalten dann weitere Buchstaben, _ und Ziffern.
• Jede Anweisung wird durch ; beendet!
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 52
Wie ist ein C-Programm aufgebaut? 3
• Funktionen / Prozeduren• Funktionskopf gibt Typ des Rückgabewerts an,
den Namen der Funktion und in Klammern ggfs. die Parameter mit Typ und Bezeichnername
• Funktionskörper ist mit { und } geklammert,enthält Deklaration von Variablen, Konstanten, den Programmablauf sowie das return
• Jedes C-Programm hat eine Funktion main()
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 53
Wie ist ein C-Programm aufgebaut? 4
• Allgemeiner Aufbau eines C-Programms /* Kommentare *//* Preprozessoranweisungen *//* Globale Variablen *//* Funktionen / Unterprogramme */type function1(...){ /* Lokale Variablen */ /* Anweisungen */}/* Hauptprogramm */int main(...){ /* Lokale Variablen */ /* Anweisungen */}
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 54
Wie ist ein C-Programm aufgebaut? 5
• Beispiel: Kapitalberechnung
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 55
Wie ist ein C-Programm aufgebaut? 6
• Beispiel: Temperaturregelung
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 56
Wie soll ein C-Programm nicht aussehen? 1
• Quelle: International Obfuscated C Code Contest
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 57
Wie soll ein C-Programm nicht aussehen? 2
• Quelle: main.c des X-Programms xterm
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 58
Wie soll ein C-Programm nicht aussehen? 3
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 59
Wie soll ein C-Programm nicht aussehen? 4
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 60
Wie soll ein C-Programm nicht aussehen? 5
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 61
So kann ein C-Programm aussehen! 1
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 62
So kann ein C-Programm aussehen! 2
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 63
So kann ein C-Programm aussehen! 3