Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Informatik II Grundlagen der Programmierung Programmieren in C Ausdrücke, Operatoren 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 Peter Klingebiel, HS Fulda, DVZ

2 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ2 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 –Datentyp –Namen / Identifier –Parametertypen bei Funktionen

3 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ3 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?...

4 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ4 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

5 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ5 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

6 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ6 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! = –9! = 9 * 8! = –10! = 10 * 9! = –11! = 11 * 10! = –12! = 12 * 11! = –13! = 13 * 12! = falsch! –14! = 14 * 13! = falsch!

7 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ7 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!

8 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ8 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)...

9 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ9 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

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

11 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ11 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

12 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ12 Operatoren 3 Zahl der Operanden –unär - ein Operand, Bsp.: 4711 oder –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

13 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ13 Vorrangregeln bei Operatoren OperatorenklasseOperatorenAssoziativitä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

14 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ14 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 = 0x20 sedezimal (Basis 16) int y = 020; oktal (Basis 8)

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

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

17 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ17 Ganzzahloperatoren 4 Operatoren / Operationen: Zuweisung = –Beispiel: int i; i = 4711; Vorzeichen + - –Beispiel: int j = -4711; Arithm. Op. + - * / % –Beispiel: k = i + j * 3 % 8;

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

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

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

21 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ21 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

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

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

24 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ24 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

25 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ25 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

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

27 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ27 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

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

29 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ29 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' n = '2' - '0' = 50 – 48; // = 2 Beispiel: int c, n; printf( Ziffer eingeben: ); c = getchar(); n = c - '0'; // n = Dezimalwert von c

30 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ30 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 754IEEE 754 –Beispiel: float 32 Bit

31 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ31 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)

32 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ32 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

33 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ33 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

34 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ34 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; … )

35 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ35 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):

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

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

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

39 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ39 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:

40 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ40 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 data1 d1 = ea_read(ead1); //... lesen... //... verarbeiten } if(c & EAC_D2) { // Daten in data2 d2 = ea_read(ead2); //... lesen... //... verarbeiten }

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

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


Herunterladen ppt "Informatik II Grundlagen der Programmierung Programmieren in C Ausdrücke, Operatoren Hochschule Fulda – FB ET Sommersemester 2014"

Ähnliche Präsentationen


Google-Anzeigen