Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Margareta Rech Geändert vor über 10 Jahren
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
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.