42
Informatik II Grundlagen der Programmierung Programmieren in C Ausdrücke, Operatoren Hochschule Fulda – FB ET Sommersemester 2014 http://c-et.rz.hs-fulda.de Peter Klingebiel, HS Fulda, DVZ

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

Embed Size (px)

Citation preview

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

Informatik IIGrundlagen der Programmierung

Programmieren in C

Ausdrücke, Operatoren

Hochschule Fulda – FB ET

Sommersemester 2014

http://c-et.rz.hs-fulda.de

Peter Klingebiel, HS Fulda, DVZ

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

Programmieren in C - 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– Datentyp– Namen / Identifier– Parametertypen bei Funktionen

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

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

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

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

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

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

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

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

Wahl von Datentypen 2

• Beispiel: Fakultätsfunktion n! mit Datentyp unsigned long (0 bis 4.294.967.295)– 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! = 362880– 10! = 10 * 9! = 3628800– 11! = 11 * 10! = 39916800– 12! = 12 * 11! = 479001600– 13! = 13 * 12! = 1932053504 falsch!– 14! = 14 * 13! = 1278945280 falsch!

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

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

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

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

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

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ückeeffizient auswerten / optimieren

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

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

Operatoren 1

• Szene aus: Is' was, Doc? (1972) - youtube

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

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

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

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

Operatoren 3

• Zahl der Operanden– unär - ein Operand, Bsp.: 4711 oder -3456– binär - zwei Operanden, Bsp.: 4711 + 3456– 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

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

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

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 14: Informatik II Grundlagen der Programmierung Programmieren in C Ausdrücke, Operatoren Hochschule Fulda – FB ET Sommersemester 2014

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

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

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

Ganzzahloperatoren 2

• Dezimal-, Sedezimal-, Binärdarstellung

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

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

Ganzzahloperatoren 3

• binprt.c – Integer dez / hex / binär ausgeben

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

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

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

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

Ganzzahloperatoren 5

• Vergleichsoperatoren == != < > <= >=• expr1 op expr2

• Ergebnis: wahr 1, falsch 0• Ergebnistyp int

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

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

Ganzzahloperatoren 6

• Logische Operatoren ! && ||

• Ergebnis: wahr 1, falsch 0 (Typ int)• expr1 op expr2

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

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

Ganzzahloperatoren 7

• Bitoperatoren ~ & | ^

• expr1 op expr2 bzw. ~expr

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

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

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

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

Ganzzahloperatoren 9

• bitops.c - Bitoperationen

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

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

Ganzzahloperatoren 10

• bitshift.c – Bitshift links und rechts

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

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

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

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

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

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

Zeichenoperatoren 2

• ASCII-Zeichensatz 7 Bit

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

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

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

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

Zeichenoperatoren 4

• ascii.c – ASCII-Tabelle ausgeben

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

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' 4810 und '2' 5010

n = '2' - '0' = 50 – 48; // = 2• Beispiel:int c, n;printf( Ziffer 0 .. 9 eingeben: );c = getchar();n = c - '0'; // n = Dezimalwert von c

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

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

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

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

Fließkommaoperatoren 2

• 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 32: Informatik II Grundlagen der Programmierung Programmieren in C Ausdrücke, Operatoren Hochschule Fulda – FB ET Sommersemester 2014

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

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

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

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

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

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

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

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

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

Beispiel: EA-Simulation 1

• Microcontroller mit E/A-Geräten, z.B. Sensoren

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

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

Beispiel: EA-Simulation 2

• Schematischer Aufbau eines Embedded System

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

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

Beispiel: EA-Simulation 3

• Modell EA-Register für EA-Simulation

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

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

Beispiel: EA-Simulation 4

• Modellierung der EA-Register in Ctypedef unsigned char byte;static byte eac; // EA-Controlstatic byte ead1; // EA-Data 1static byte ead2; // EA-Data 2

• Status-/Programmierbits als CPP-Makros#define EAC_R 0x01 // Data Ready: 00000001#define EAC_D1 0x02 // Read/Write D1: 00000010#define EAC_D2 0x04 // Read/Write D2: 00000100#define EAC_I 0x08 // Initialize: 00001000#define EAC_R1 0x10 // Data1 Read: 00010000#define EAC_R2 0x20 // Data2 Read: 00100000#define EAC_W1 0x40 // Data1 Write: 01000000#define EAC_W2 0x80 // Data2 Write: 10000000

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

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

Beispiel: EA-Simulation 5

• Initialisierung EA-Gerät: data1, data2 lesenif(ea_ctrl(eac) & EAC_R) // EA bereit? eac = EAC_I | EAC_R1 | EAC_R2; // EA progr.

• Lesen von data1, data2c = ea_ctrl(eac); // control lesenif(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}

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

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

Beispiel: EA-Simulation 6

• easim.c – EA-Simulation

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

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

Beispiel: EA-Simulation 7

• easim in Aktion