Informatik II Grundlagen der Programmierung Programmieren in C Erste Programme Hochschule Fulda – FB ET Sommersemester 2014 http://c-et.rz.hs-fulda.de Peter Klingebiel, HS Fulda, DVZ
Trial and Error Programmieren in C: Trial and Error? Inspector Closeau - Der beste Mann bei Interpol Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
C-Programm 1 Ein 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 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
C-Programm 2 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
C-Programm 3 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
C-Programm 4 Typischer Ablauf eines C-Programms Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
C-Programm 5 C-Programme bestehen aus Dateien in Verzeichnissen auf dem Rechner Der Quellcode befindet sich in C-Dateien Reine Textdateien, keine Formatierung u.ä. Bearbeitung mit einem Texteditor Regel: Dateinamen ohne Umlaute, Leerzeichen, Sonderzeichen Empfehlung: Nur Kleinbuchstaben Dateinamen endet auf .c Beispiel: hallowelt.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 7
C-Programm 6 Beispielprogramm hallowelt.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 8
C-Programm 7 Kommentare Include-/Headerdateien sollen Kode und Programm erläutern mehrzeilige Kommentare mit /* */ geklammert einzeilige Kommentare nach // Include-/Headerdateien #include <stdio.h> Preprozessor ersetzt die Zeile durch den Inhalt der Datei stdio.h Ggfs. mit Pfadnamen, z.B. bei eigenen Projekten Mehr zum Preprozessor später Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
C-Programm 8 Jedes C-Programm hat eine main-Funktion Hier startet die Programmausführung nach dem Laden des Programms Aufruf einer Bibliotheksfunktion printf("Hallo, Welt!\n"); zur Ausgabe der Zeichenkette auf der Konsole Exit-Status bei Programmende an das Betriebssystem bzw. an aufrufende Ebene return(0); Returncode des Programms ggfs. zur späteren Auswertung (0 ok, 0 fehlerhaft) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
C-Programm 9 Programm hallowelt auf der Konsole Programmieren in C - Peter Klingebiel - HS Fulda - DVZ Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 11
C-Bausteine 1 Aus den "Grundbausteinen" von C ... Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
C-Bausteine 2 ... werden "Programme" Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
C-Bausteine 3 Zeichensatz von C Buchstaben (incl. Unterstrich) ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz _ Ziffern 0123456789 Semikolon (z.B. am Ende einer Anweisung) ; Punkt (Gleitpunktzahlen, Selektionsoperator) . Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
C-Bausteine 4 Sonderzeichen (Operatoren, Satzzeichen) ( ) [ ] < > + - * / % ^ ~ & | = ! ? , : Anführungszeichen (Einzelzeichen, Strings) ' " Blockklammern { } Fluchtzeichen (für Sonderzeichen) \ Doppelkreuz (Preprozessordirektiven) # Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
C-Bausteine 5 Reservierte Worte / Schlüsselworte auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while C kennt nur 32 reservierte Worte Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
C-Bausteine 6 C-Programme verarbeiten Daten Konstante Daten Werte sind unveränderbar Variable Daten Werte sind im Programmlauf veränderbar Daten sind typisiert Datentypen Datentypen bestimmen Darstellung der Werte im Rechner Wertebereiche der Daten benötigten Speicherplatz der Daten zulässige Operationen auf den Daten Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
C-Bausteine 7 Anweisungen Funktionen Statement, Ausdruck, "Kommando" z.B. Variablendefinition int a; z.B. Zuweisung a = 4711; z.B. mathematischer Ausdruck a = a * 2; Funktionen Unterprogramme, z.B. main()oder printf() Kapselung von Funktionalität und internen Daten Funktionen haben Typ und liefern einen Wert kann auch ignoriert werden, z.B. bei printf() Prozeduren = Funktionen ohne Rückgabewert Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
C-Bausteine 8 Vordefinierte Grunddatentypen in C char Zeichen (ASCII-Kode, 8 Bit) int Ganzzahl (maschinenabhängig, meist 16 oder 32 Bit) float Gleitkommazahl (32 Bit, IEEE, etwa auf 6 Stellen genau) double doppelt genaue Gleitkommazahl (64 Bit, IEEE, etwa auf 12 Stellen genau) void ohne Wert (z.B. Zeiger) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
C-Bausteine 9 Type-Modifier spezifizieren Grunddatentypen short int, long int - legen Länge der Ganzzahl fest - maschinenabhängig, 16 Bit, 32 Bit - int kann auch fehlen long double - Gleitkommazahl, erw. Genauigkeit - oft 128 Bit, IEEE signed, unsigned - char/int mit/ohne Vorzeichen Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
C-Bausteine 10 Bezeichner (Identifier) sind Namen für Variable, Konstanten, Funktionen, Typen Identifier müssen mit einem Buchstaben oder Unterstrich beginnen danach können Buchstaben, Unterstriche und Ziffern folgen Groß- und Kleinschreibung wird streng unterschieden keine Sonderzeichen (z.B. $ oder #) keine reservierten Worte Vorsicht bei vordefinierten Funktionsnamen Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Variablen 1 Variable sind Platzhalter für Daten haben einen festgelegten Speicherort, an dem der aktuelle Wert gespeichert wird der aktuelle Wert (an seinem Speicherort) ist veränderbar Attribute von Variablen: Datentyp Namen (Bezeichner, Identifier) Lebensdauer / Speicherklasse evtl. initialer Wert Sichtbarkeit (Scope) im Programm Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Variablen 2 Variablen-Definitionen, z.B. double u; short int i, tab = 5; char *hallo = "Hallo, Welt!"; Position im Programm: außerhalb von Funktionen am Anfang eines Blocks, also nach { Wert ist veränderbar (Zuweisung, Operation) Programmstruktur Lebensdauer / Scope Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Wie speichert C? 1 Hauptspeicher Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Wie speichert C? 2 Beispiel: Zugriff auf Variable Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Wie speichert C? 3 Vor Programmstart Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Wie speichert C? 4 Programmstart und Aufruf von main() Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Wie speichert C? 5 Zuweisung a = 4; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Wie speichert C? 6 Zuweisung b = 8; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Wie speichert C? 7 Berechnung a * b; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Wie speichert C? 8 Zuweisung c = a * b; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Wie speichert C? 9 Danach Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Exkurs: Ausgabe 1 Aufbau eines C-Programms mit Ausgabe #include <stdio.h> int main() { int a, b, c; a = 4711; b = 13; c = a * b; printf("c = %d\n", c); return(0); } Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Exkurs: Ausgabe 2 Einfache zeichenweise Ausgabe mit putchar(),z.B.: int c = '!'; putchar(c); // Zeichen auf stdout Ausgaben zeilenweise mit puts(), z.B.: char *s = "Hallo, Welt!"; puts(s); // String auf stdout Formatierte Ausgabe mit printf(),z.B.:i int n = 123; char *s = " Studierende"; printf("%d %s", n, s); Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Exkurs: Ausgabe 3 Formatierte Ausgabe mit printf() Aufruf: printf(fmt, arg1, arg2, ...) printf()hat variable Anzahl Parameter printf()konvertiert und gibt die Parameter unter Kontrolle des Formatstrings aus Der Formatstring fmt ist eine Zeichenkette Parameter args können auch fehlen Die Parameter args müssen den Typ haben, wie er im Formatstring fmt angegeben ist Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Exkurs: Ausgabe 4 Wichtige Formatzeichen (Platzhalter) für Ausgabewerte im printf()-Formatstring: %c Einzelzeichen char %d Ganzzahl int %ld Ganzzahl long int %f Gleitkommazahl float %lf Gleitkommazahl double %s Zeichenkette char [] / char * Beispiel: int n = 123; char *s = "Studierende"; printf("%d %s", n, s); Formatstring "%d %s" erfordert 2 Parameter, Typen (int, char *) müssen übereinstimmen! Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Exkurs: Ausgabe 5 Format erzwingt Anzahl +Typ der Parameter Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Exkurs: Ausgabe 6 Was passiert, wenn Typ des Platzhalters und Typ des Parameters nicht übereinstimmen? Gefährlich! C erfordert Sorgfalt! Wichtige Sonderzeichen im Formatstring (und auch als Einzelzeichen) \n Newline, Zeilensprung \t Tabulator \0 EOS - Endezeichen in String \' einfaches Anführungszeichen ' \" doppeltes Anführungszeichen " \% Prozentzeichen % \\ Fluchtzeichen \ Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
C-Programmierumgebungen 1 Übersetzung passiert in mehreren Schritten: C-Quellkode editieren C-Preprozessor macht reine Textoperationen C-Compiler übersetzt C-Quelltext in maschinenabhängigen Assemblercode Assembler erzeugt noch nicht ausführbaren Maschinencode, sog. Objektcode Linker montiert Objektcode und Bibliotheks-funktionen zu ausführbarem Programm Debuggen zur Fehlersuche Programmieren in C - Peter Klingebiel - HS Fulda - DVZ Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 39
C-Programmierumgebungen 2 Klassischer Weg Editor Compiler Linker Debugger System C-Compiler (z.B. auf Unix/Linux) TinyC Compiler MinGW (Minimalist GNU for Windows) Cygwin GNU Compiler Collection Programmieren in C - Peter Klingebiel - HS Fulda - DVZ Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 40
C-Programmierumgebungen 3 Integrierte Entwicklungsumgebung IDE fasst Editor, Compiler, Linker, Debugger unter einer Oberfläche zusammen Code::Blocks Netbeans Eclipse Microsoft Visual Studio Express Bloodshed Dev C/C++ Workflow der Programmentwicklung wird "geschmeidiger" Projekte intuitiver formulierbar Programmieren in C - Peter Klingebiel - HS Fulda - DVZ Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 41