Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Programmieren in C Grundlagen C 2

Ähnliche Präsentationen


Präsentation zum Thema: "Programmieren in C Grundlagen C 2"—  Präsentation transkript:

1 Programmieren in C Grundlagen C 2
Hochschule Fulda – FB AI Wintersemester 2013/14 Peter Klingebiel, HS Fulda, DVZ

2 Anweisung / Ausdruck 1 Programm setzt sich aus vielen Anweisungen (Zuweisungen, Vergleichen, Operationen, Funktionsaufrufen, usw.) zusammen Anweisung (statement) im strengen Sinn in C unbekannt Anweisung hat kein verwertbares Ergebnis Beispiel: Zuweisung in Pascal, Ada, … integer i; i := 123; Variable i hat nach Zuweisung den Wert 123, die Zuweisung selbst ist allerdings nicht weiter auswertbar! Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

3 Anweisung / Ausdruck 2 C kennt keine Anweisungen (statements), sondern nur Ausdrücke (expressions) Ausdruck hat einen Wert (wie in Assembler!) Beispiel: Zuweisung in C int i; i = 4711; Zuweisung kann auch ausgewertet werden: int a, b, c, i, j; a = b = c = 3; if(i = 4711) while(j = 1) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

4 Anweisung / Ausdruck 3 Ausdruck  Gültige Kombination von Konstanten, Variablen, Operatoren, Funktionen Reihenfolge der Auswertung Vorrangregeln der Operatoren legen Reihenfolge der Auswertung implizit fest Klammern ( ) legen Vorrangregeln explizit fest Sind Vorrangregeln nicht eindeutig  Reihenfolge der Auswertung nicht definiert Compiler kann Ausdrücke / Teilausdrücke in effizient auswerten / optimieren Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

5 Datentyp short, int, long 1
Ganze Zahlen Typen short, int, long, long long Speicherbedarf maschinenabhängig short <= int <= long <= long long Heute z.B: short 16 Bit, int 32 Bit, long 64 Bit Vorzeichen signed mit Vorzeichen unsigned vorzeichenlos Konstanten, Beispiele: int a = 4711, b = -18; dezimal short x = 0x sedezimal (Basis 16) int y = 020; oktal (Basis 8) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

6 Datentyp short, int, long 2
Syntaxdiagramm Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

7 Datentyp short, int, long 3
Dezimal-, Sedezimal-, Binärdarstellung Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

8 Datentyp short, int, long 4
Operatoren / Operationen: Zuweisung = Beispiel: int i; i = 4711; Vorzeichen + - Beispiel: int j = -4711; Arithm. Op * / % Beispiel: k = i + j * 3 % 8; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

9 Datentyp short, int, long 5
Vergleichsoperatoren == != < > <= >= expr1 op expr2 Ergebnis: wahr  1, falsch  0 Ergebnistyp  int Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

10 Datentyp short, int, long 6
Logische Operatoren ! && || Ergebnis: wahr  1, falsch  0 (Typ int) expr1 op expr2 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

11 Datentyp short, int, long 7
Bitoperatoren ~ & | ^ expr1 op expr2 bzw. ~expr Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

12 Datentyp short, int, long 8
Bitshiftoperatoren << >> expr1 op expr2 Bits in expr1 um expr2 Bits verschoben Bsp. 1 << 2 1 um 2 Bits nach links Bsp: n >> 5 n um 5 Bits nach rechts Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

13 Datentyp short, int, long 9
Inkrement- / Dekrementoperatoren Linkseitiger Operator ++n --n Wert von n wird inkrementiert / dekrementiert das Resultat wird als Ergebnis geliefert Rechtsseitiger Operator n++ n-- Wert von n wird als Ergebnis geliefert Danach wird n inkrementiert / dekrementiert Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

14 Datentyp char 1 Einzelzeichen oder Integer 8 Bit
Speicherbedarf 1 Byte (8 Bit) Konstanten, Zeichen durch ' ' geklammert char c1 = 'A', c2 = '1', c3 = '\n' Sonderzeichen mit \ beschrieben, Bsp: '\n' Zeilentrenner (NL) '\t' Tabulator (TAB) '\0' Stringende (NUL) '\"' Anführungszeichen '\\' Backslash, Fluchtzeichen Darstellung im ASCII-Code  char Untertyp von Ganzzahlen int Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

15 Datentyp char 2 ASCII-Zeichensatz 7 Bit
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

16 Datentyp char 3 ASCII-Zeichensatz 8 Bit (PC, MS-DOS)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

17 Datentyp char 4 ANSI-Zeichensatz 8 Bit (Windows)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

18 Datentyp char 5 Repräsentation (ASCII):
Sinnvolle Operatoren/Operationen bei char: = (Zuweisung) (arithm. Operationen) == != < > <= >= (Vergleich) Wird char als Byte (8 Bit-Integer) genutzt  alle int-Operationen sinnvoll Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

19 Datentyp char 6 Ascii-Tabelle ausgeben: ascii.c
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

20 Datentypen float, double, long double 1
Fließkommazahlen Typen float, double, long double Speicherbedarf float < double < long double float 32 Bit, double 64 Bit, long double 128 Bit Repräsentation nach IEEE 754 Beispiel: float 32 Bit Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

21 Datentypen float, double, long double 2
Syntaxdiagramm Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

22 Datentypen float, double, long double 3
Konstanten, Beispiele: float p = 3.141, a = , b = (Obacht: 1 oder 0  int) 7.0e-3 (0.007) e2(765.43) Operatoren / Operationen: = (Zuweisung) (Vorzeichen) * / (arithm. Op.) == != < > <= >= (Vergleich) Vorsicht bei Vergleichsoperationen wegen Ungenauigkeiten in Darstellung (z.B. bei 0.0) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

23 Weitere Operatoren 1 Spezielle Zuweisungsoperatoren  verkürzte Schreibweise für Operationen auf Variablen a op= b  a = a op b Arithm. Operatoren: * / % Bitoperatoren: << >> & | ^ Beispiele: int n = 12 n -= 24 n /= 3 n <<= 3 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

24 Weitere Operatoren 2 Operator sizeof
Ermittelt Größe von Typ / Variablen in Bytes Beispiel: long l; sl = sizeof(l) sd = sizeof(double) Beispiel: Sun Sparc 32 Bit Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

25 Weitere Operatoren 3 Komma-Operator ,
Erlaubt die Aneinanderreihung mehrerer Ausdrücke Wert = Wert des letzen Teilausdrucks Beispiel (etwas sinnlos): Beispiel (sinnvoller): for(i = 0, j = 0, k = 1; … ) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

26 Weitere Operatoren 4 Bedingte Bewertung ? : expr1 ? expr 2 : expr3
Verkürzte Formulierung von Bedingungen Auswertung Erst Auswertung von expr1 Wenn expr1 ≠ 0 dann gesamter Ausdruck expr2 Sonst gesamter Ausdruck expr3 Beispiel max(a, b) und min(a, b): Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

27 Vorrangregeln bei Operatoren
Operatorenklasse Operatoren Assoziativität Unär ! ~ Von rechts nach links Multiplikativ * / % Von links nach rechts Additiv + - Shift << >> Relational < <= > >= Gleichheit == != Bitweise & ^ | Logisch && || Bedingte Bewertung ?: Zuweisung = op= Reihung , Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

28 Typumwandlung in Ausdrücken 1
Automatische Typumwandlung bei unterschiedlicher Typen in Ausdrücken Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

29 Typumwandlung in Ausdrücken 2
Beispiel: Explizite Typumwandlung (casting) (type) expr Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

30 Felder 1 Ein Feld (array) ist die Zusammenfassung von Daten gleichen Typs in einer Variablen Felder haben eine oder auch mehrere Dimensionen (Vektoren, Matrizen, …) Definition von Feldern: char sbuf[128]; int arr[] = { 1, 8, 7, -1, 2 }; short mat[2][2] = { 11, 12, 21, 22}; Mit der Felddefinition wird der benötigte Speicherplatz für die Variable reserviert Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

31 Felder 2 Zugriff auf Feldelemente mit Index in []: char c; c = sbuf[32]; sbuf[0] = 'A'; Die Feldindizierung beginnt immer mit 0! short s, mat[3][3]; s = mat[0][0]; Felder werden elementweise und Zeile für Zeile hintereinander abgespeichert Es gibt beim Zugriff keinerlei Überprüfungen auf Bereichsgrenzen von Feldern! Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

32 Felder 3 Feldnamen sind eigentlich Pointer, zeigen auf das erste Element im Feld Felder werden mit Adresse an Funktionen übergeben (wie Pointer) Feldindizes sind eigentlich Offsets und geben den Abstand zum Feldanfang an Bsp: ia[3]  *(&ia[0] + 3 * sizeof(int)) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

33 Felder und Zeiger Felder reservieren bei der Definition den benötigten Speicherplatz Zeiger erhalten den Speicherplatz erst bei der Zuweisung des Objekts, auf das sie zeigen, oder bei dynamischer Speicherallokation Ähnlichkeit von Feldern und Zeigern  mächtige Pointerarithmetik möglich Manchmal ein wenig unverständlich! Pointer essentiell bei Zeichenketten (strings) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Herunterladen ppt "Programmieren in C Grundlagen C 2"

Ähnliche Präsentationen


Google-Anzeigen