350 likes | 534 Views
Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2. Hochschule Fulda – FB ET Sommersemester 2010 http://www.rz.hs-fulda.de/et Peter Klingebiel, HS Fulda, DVZ. Anweisung / Ausdruck 1.
E N D
Informatik IIGrundlagen der ProgrammierungProgrammieren in CGrundlagen C 2 Hochschule Fulda – FB ET Sommersemester 2010 http://www.rz.hs-fulda.de/et Peter Klingebiel, HS Fulda, DVZ
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
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
Anweisung / Ausdruck 3 • Ausdruck Gültige Kombination vonKonstanten, 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
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 • signedmit Vorzeichen • unsignedvorzeichenlos • Konstanten, Beispiele:int a = 4711, b = -18; dezimalshort x = 0x20 sedezimal (Basis 16)int y = 020; oktal (Basis 8) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Datentyp short, int, long 2 • Syntaxdiagramm Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Datentyp short, int, long 3 • Dezimal-, Sedezimal-, Binärdarstellung Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Datentyp short, int, long 4 • Operatoren / Operationen: • Zuweisung = • Beispiel: int i; i = 4711; • Vorzeichen+ - • Beispiel: int j = -4711; • Arithm. Op.+ - * / % • Beispiel: k = 2010 - i + j * 3 % 8; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Datentyp short, int, long 5 • Vergleichsoperatoren== != < > <= >= • expr1 op expr2 • Ergebnis: wahr 1, falsch 0 • Ergebnistypint Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
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
Datentyp short, int, long 7 • Bitoperatoren ~ & | ^ • expr1 op expr2 bzw. ~expr Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
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
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
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
Datentyp char 2 • ASCII-Zeichensatz 7 Bit Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Datentyp char 3 • ASCII-Zeichensatz 8 Bit (PC, MS-DOS) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Datentyp char 4 • ANSI-Zeichensatz 8 Bit (Windows) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
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
Datentyp char 6 • Ascii-Tabelle ausgeben: ascii.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
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
Datentypen float, double, long double 2 • Syntaxdiagramm Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Datentypen float, double, long double 3 • Konstanten, Beispiele:float p = 3.141, a = -21.56, b = 0.54671.0 0.0 (Obacht: 1 oder 0 int)7.0e-3 (0.007) 7.6543e2(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
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
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
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
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
Vorrangregeln bei Operatoren Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Typumwandlung in Ausdrücken 1 • Automatische Typumwandlung bei unterschiedlicher Typen in Ausdrücken Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
Typumwandlung in Ausdrücken 2 • Beispiel: • Explizite Typumwandlung (casting)(type) expr Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
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
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
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 anBsp:ia[3] *(&ia[0] + 3 * sizeof(int)) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
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