33
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

Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

Embed Size (px)

DESCRIPTION

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. - PowerPoint PPT Presentation

Citation preview

Page 1: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

Informatik IIGrundlagen 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

Page 2: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

Programmieren in C - 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!

Page 3: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

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) ...

Page 4: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 4

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

Page 5: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

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; dezimalshort x = 0x20 sedezimal (Basis 16)int y = 020; oktal (Basis 8)

Page 6: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 6

Datentyp short, int, long 2

• Syntaxdiagramm

Page 7: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 7

Datentyp short, int, long 3

• Dezimal-, Sedezimal-, Binärdarstellung

Page 8: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

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 = 2010 - i + j * 3 % 8;

Page 9: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

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

Page 10: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

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

Page 11: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 11

Datentyp short, int, long 7

• Bitoperatoren ~ & | ^

• expr1 op expr2 bzw. ~expr

Page 12: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

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

Page 13: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

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

Page 14: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

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

Page 15: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 15

Datentyp char 2

• ASCII-Zeichensatz 7 Bit

Page 16: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 16

Datentyp char 3

• ASCII-Zeichensatz 8 Bit (PC, MS-DOS)

Page 17: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 17

Datentyp char 4

• ANSI-Zeichensatz 8 Bit (Windows)

Page 18: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

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

Page 19: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 19

Datentyp char 6

• Ascii-Tabelle ausgeben: ascii.c

Page 20: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

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

Page 21: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 21

Datentypen float, double, long double 2

• Syntaxdiagramm

Page 22: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 22

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)

Page 23: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

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

Page 24: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

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

Page 25: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

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; … )

Page 26: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

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):

Page 27: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

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 + - Von links nach rechts

Shift << >> Von links nach rechts

Relational < <= > >= Von links nach rechts

Gleichheit == != Von links nach rechts

Bitweise & Von links nach rechts

Bitweise ^ Von links nach rechts

Bitweise | Von links nach rechts

Logisch && Von links nach rechts

Logisch || Von links nach rechts

Bedingte Bewertung ?: Von rechts nach links

Zuweisung = op= Von rechts nach links

Reihung , Von links nach rechts

Page 28: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 28

Typumwandlung in Ausdrücken 1

• Automatische Typumwandlung bei unterschiedlicher Typen in Ausdrücken

Page 29: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 29

Typumwandlung in Ausdrücken 2

• Beispiel:

• Explizite Typumwandlung (casting)(type) expr

Page 30: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

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

Page 31: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

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!

Page 32: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

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 anBsp: ia[3] *(&ia[0] + 3 * sizeof(int))

Page 33: Informatik II Grundlagen der Programmierung Programmieren in C Grundlagen C 2

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)