Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Hochschule Fulda – FB ET Sommersemester 2014

Ähnliche Präsentationen


Präsentation zum Thema: "Hochschule Fulda – FB ET Sommersemester 2014 "—  Präsentation transkript:

1 Informatik II Grundlagen der Programmierung Programmieren in C Ausdrücke, Operatoren
Hochschule Fulda – FB ET Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ

2 Wiederholung 1 Definition von Variablen (und Konstanten und Funktionen)  Festlegung von Datentyp Namen / Identifier Speicherplatz Lebensdauer und Scope Deklaration von Variablen (und Konstanten und Funktionen)  Festlegung von Parametertypen bei Funktionen Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

3 Wiederholung 2 Typwandlung implizit
Beispiel: int * float  float * float explizit durch Typecast (type) variable Beispiel: (float) int * float Beispiel ... int a = 10, b = 4, c = 8, d = 1; float x = 2.5, y; ... y = a / x + b / c + d; // Ergebnis? ... Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 3

4 Wiederholung 3 Sichtbarkeit von Variablen (und Konstanten)
abhängig vom Ort der Definition in Block {}  Block ausserhalb Block  global im Programm ausserhalb Block static  im Modul (Quelltext) Lebensdauer von Variablen (und Konstanten) abhängig von der Speicherklasse in Block {}  Blocklebensdauer in Block static  Programmlebensdauer ausserhalb Block  Programmlebensdauer Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 4

5 Wahl von Datentypen 1 Aufgabenstellung bestimmt Typen der Daten
Zahlen in Mathematik und Wissenschaft double reicht meist aus float i.d.R. zu ungenau long double in Spezialfällen Anzahlen oder Ganze Zahlen int reicht oft aus unsigned mit doppeltem Wertebereich Geldbeträge? Komplexere Daten? Z.B. Adressen Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 5

6 Wahl von Datentypen 2 Beispiel: Fakultätsfunktion n! mit Datentyp unsigned long (0 bis ) 1! = 1 2! = 2 * 1! = 2 3! = 3 * 2! = 6 4! = 4 * 3! = 24 5! = 5 * 4! = 120 6! = 6 * 5! = 720 7! = 7 * 6! = 5040 8! = 8 * 7! = 40320 9! = 9 * 8! = 10! = 10 * 9! = 11! = 11 * 10! = 12! = 12 * 11! = 13! = 13 * 12! = falsch! 14! = 14 * 13! = falsch! Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 6

7 Anweisung / Ausdruck 1 Programm setzt sich aus vielen Anweisungen (Zuweisungen, Vergleichen, Operationen, Funktionsaufrufen, usw.) zusammen Anweisung (statement) im strengen Sinn ist in C unbekannt Anweisung hat kein auswertbares 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

8 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; // wird nicht ausgewertet Zuweisung kann auch ausgewertet werden: int a, b, c, i, j; a = b = c = 3; // c = 3; b = c; a = b; if(i = 4711); while(j = 1) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

9 Anweisung / Ausdruck 3 Ausdruck  Gültige Kombination von
Konstanten, Variablen, Operatoren Funktionsaufrufen 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 effizient auswerten / optimieren Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

10 Operatoren 1 Szene aus: Is' was, Doc? (1972) - youtube
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

11 Operatoren 2 Was können wir mit Daten/Werten machen?
Speichern, Zuweisen, Auslesen, … Verknüpfen Verändern In C mit Operatoren Operator liefert neuen Wert Operator operiert auf Operanden Operatoren aus der Mathematik gut bekannt z.B. die Operatoren + - * / C bietet aber sehr viel mehr Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 11

12 Operatoren 3 Zahl der Operanden Position des Operators
unär - ein Operand, Bsp.: 4711 oder -3456 binär - zwei Operanden, Bsp.: ternär - drei Operanden Position des Operators Infix - steht zwischen den Operanden Präfix - steht vor den Operanden Postfix - steht nach den Operanden Linksassoziativität / Rechtsassoziativität Bsp.: x + y + z = (x + y) + z Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 12

13 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

14 Ganzzahloperatoren 1 Bekannt: Ganze Zahlen, Integerzahlen
Typen short, int, long, long long Speicherbedarf maschinenabhängig short <= int <= long <= long long Heute: short 16 Bit, int / long 32 Bit, long 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

15 Ganzzahloperatoren 2 Dezimal-, Sedezimal-, Binärdarstellung
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

16 Ganzzahloperatoren 3 binprt.c – Integer dez / hex / binär ausgeben
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

17 Ganzzahloperatoren 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

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

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

20 Ganzzahloperatoren 7 Bitoperatoren ~ & | ^ expr1 op expr2 bzw. ~expr
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

21 Ganzzahloperatoren 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

22 Ganzzahloperatoren 9 bitops.c - Bitoperationen
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

23 Ganzzahloperatoren 10 bitshift.c – Bitshift links und rechts
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

24 Ganzzahloperatoren 11 Inkrement- / Dekrementoperatoren ++ --
Linkseitiger Operator ++n --n n wird erst inkrementiert / dekrementiert das Resultat wird danach als Ergebnis geliefert Rechtsseitiger Operator n++ n-- n wird erst als Ergebnis geliefert n wird danach inkrementiert / dekrementiert Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

25 Zeichenoperatoren 1 Bekannt: Einzelzeichen 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

26 Zeichenoperatoren 2 ASCII-Zeichensatz 7 Bit
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

27 Zeichenoperatoren 3 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

28 Zeichenoperatoren 4 ascii.c – ASCII-Tabelle ausgeben
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

29 Zeichenoperatoren 5 „Zeichenarithmetik“
Was bedeutet: n = '2' - '0'; // ? Jedes Zeichen hat einen Wert, der dem Index des Zeichens in der ASCII-Tabelle entspricht '0'  und '2'  5010  n = '2' - '0' = 50 – 48; // = 2 Beispiel: int c, n; printf( Ziffer eingeben: ); c = getchar(); n = c - '0'; // n = Dezimalwert von c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

30 Fließkommaoperatoren 1
Bekannt: 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

31 Fließkommaoperatoren 2
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

32 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

33 Weitere Operatoren 2 Operator sizeof
Liefert Größe von Typen / 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

34 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

35 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

36 Beispiel: EA-Simulation 1
Microcontroller mit E/A-Geräten, z.B. Sensoren Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 36

37 Beispiel: EA-Simulation 2
Schematischer Aufbau eines Embedded System Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 37

38 Beispiel: EA-Simulation 3
Modell EA-Register für EA-Simulation Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 38

39 Beispiel: EA-Simulation 4
Modellierung der EA-Register in C typedef unsigned char byte; static byte eac; // EA-Control static byte ead1; // EA-Data 1 static byte ead2; // EA-Data 2 Status-/Programmierbits als CPP-Makros #define EAC_R 0x01 // Data Ready: #define EAC_D1 0x02 // Read/Write D1: #define EAC_D2 0x04 // Read/Write D2: #define EAC_I 0x08 // Initialize: #define EAC_R1 0x10 // Data1 Read: #define EAC_R2 0x20 // Data2 Read: #define EAC_W1 0x40 // Data1 Write: #define EAC_W2 0x80 // Data2 Write: Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 39

40 Beispiel: EA-Simulation 5
Initialisierung EA-Gerät: data1, data2 lesen if(ea_ctrl(eac) & EAC_R) // EA bereit? eac = EAC_I | EAC_R1 | EAC_R2; // EA progr. Lesen von data1, data2 c = ea_ctrl(eac); // control lesen if(c & EAC_R) { // EA bereit? if(c & EAC_D1) { // Daten in data d1 = ea_read(ead1); // ... lesen // ... verarbeiten } if(c & EAC_D2) { // Daten in data d2 = ea_read(ead2); // ... lesen // ... verarbeiten } Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 40

41 Beispiel: EA-Simulation 6
easim.c – EA-Simulation Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 41 41

42 Beispiel: EA-Simulation 7
easim in Aktion Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 42


Herunterladen ppt "Hochschule Fulda – FB ET Sommersemester 2014 "

Ähnliche Präsentationen


Google-Anzeigen