6 Die Programmiersprache C

Größe: px
Ab Seite anzeigen:

Download "6 Die Programmiersprache C"

Transkript

1 6 Die Programmiersprache C 6.1 Datentypen und Deklarationen 6.2 Operatoren und Ausdrücke 6.3 Ablaufsteuerung (Kontrollstrukturen) 6.4 Unterprogramme 6.5 Zeiger und komplexe Datenstrukturen 6.6 Dateien, Ein- und Ausgabe 6.7 Weitere Sprachkonstrukte 6.8 Die Umgebung von C-Programmen 6.9 Beispiel 6. Die Programmiersprache C 6-1

2 Die Bedeutung der Sprache C C ist die "Muttersprache" von UNIX C ist hochgradig portierbar und standardisiert (ANSI: X ) C ermöglicht eine sehr effiziente, maschinennahe Programmierung C Schlägt die Brücke von Java zu Assembler- Programmierung Aber: C erlaubt viele unsaubere Programmiertricks Literatur Karlheinz Zeiner "Programmieren lernen mit C" Carl Hanser Verlag 1994 Kernighan/Ritchie "Programmieren in C" Carl Hanser Verlag Die Programmiersprache C 6-2

3 6.1 Datentypen und Deklarationen Es gibt elementare Datentypen, z.b. zur Beschreibung von Zahlen oder einzelnen Zeichen, und es gibt komplexe Datentypen, z.b. zur Beschreibung von verketteten Listen oder von Datenstrukturen bestehend aus verschiedenen Komponenten. Merke: In C müssen alle Daten vor ihrer Verwendung vereinbart (deklariert) werden, wie in Java, anders als z.b. in Fortran oder Basic. Ein C-Programm setzt sich aus Vereinbarungen und Anweisungen zusammen. Die Anweisungen definieren die Kontrollstruktur eines Programms. Die Vereinbarungen beinhalten die Datenstrukturen, auf denen ein Programm arbeitet. 6. Die Programmiersprache C 6-3

4 Aufbau eines C-Programms Hauptprogramm void main int ( int argc, char * argv [] ) { Vereinbarungen und Anweisungen } argc und argv stellen die Verbindung des Programms zu seiner Umwelt her. Hier wird die Anzahl der Argumente und ein Vektor mit den Werten der Argumente von der Kommandozeile an das C-Programm übergeben. Sie sind zwar im ANSI-Standard nicht beschrieben, haben sich aber als de-facto-standard etabliert. 6. Die Programmiersprache C 6-4

5 Vereinbarungen in C Programmen (1) Vereinbarungen Typenvereinbarung Konstantenvereinbarung Variablenvereinbarung Routinenvereinbarung 6. Die Programmiersprache C 6-5

6 Vereinbarungen in C-Programmen (2) Merke: Die im Syntaxdiagramm angegebene Reihenfolge der Vereinbarungen ist nicht zwingend vorgeschrieben. Es ist jedoch sinnvoll, sich an diese Reihenfolge zu halten. In C gibt es zwei Arten von Vereinbarungen: Vereinbarungen, die Speicherplatz reservieren (Definitionen), z.b. Variablenvereinbarungen, Routinendefinitionen Vereinbarungen, die eine Variable/einen Datentyp/eine Routine beschreiben (Deklarationen) z.b. Typvereinbarungen, Prototypen von Routinen. 6. Die Programmiersprache C 6-6

7 Typvereinbarung Typvereinbarung typedef Typ Typname ;, typedef dient zur Definition eigener Datentypen als Ableitung aus bestehenden Datentypen. Beispiel typedef int alter; alter lebensalter, firmenbestand; 6. Die Programmiersprache C 6-7

8 Vordefinierte Datentypen in C Typ einfacher Typ strukturierter Typ Zeigertyp Hinweis: strukturierte Typen und Zeigertypen werden wir später erklären. 6. Die Programmiersprache C 6-8

9 Einfache Datentypen einfacher Typ elementarer Datentyp Aufzählungstyp 6. Die Programmiersprache C 6-9

10 Elementare Datentypen elementare Datentypen signed char unsigned int short int long int float double long double Elementare Datentypen sind die Grundbausteine aller anderen Datentypen. 6. Die Programmiersprache C 6-10

11 Beschreibung der elementaren Datentypen integer unsigned int = natürliche Zahlen inclusive 0, als Binärzahlen abgespeichert. (signed) int = Ganzzahlen, in der Regel in Zweierkomplementdarstellung abgespeichert. Beispiel: Bits unsigned signed N = Anzahl Bits Wertebereich unsigned: 0 bis 2 N - 1 Wertebereich signed: -2 N-1 bis 2 N Die Programmiersprache C 6-11

12 Ganze Zahlen unterschiedlicher Länge char/short/long int Datentypen für ganze Zahlen unterschiedlicher Länge. Es gilt: len(char) len(short) len(int) len(long) In der Regel belegt char 8 Bits (1 Byte), short 16 Bits (2 Bytes) und int 32 Bits (4 Bytes). Dies ist jedoch abhängig vom Compiler. 6. Die Programmiersprache C 6-12

13 Zeichen (1) Der Datentyp char Für den Datentyp char gilt, daß der Wertebereich aus diskreten Einzelwerten besteht, die einer Ordnungsrelation unterliegen. Zeichen werden in einem Byte gespeichert und auf ganze Zahlen abgebildet. Im ASCII-Code entspricht beispielsweise '0' der Zahl 48, 'A' der Zahl 65 und 'a' der Zahl 97. Für Steuerzeichen gibt es in C eine Ersatzdarstellung. Der backslash (\) wird dabei als Escape-Zeichen bezeichnet, welches "die normale Interpretationsebene verlässt". Beispiele \n steht für Zeilenvorschub \g steht für Glocke \t steht für Tabulator. 6. Die Programmiersprache C 6-13

14 Zeichen (2) Die Ordnung der Zeichen untereinander (die Kollationsfolge) ist in C implementierungsabhängig. Der Standard fordert lediglich, dass die Ziffern 0 9 aufsteigend und lückenlos angeordnet sind sowie dass die Großbuchstaben und die Kleinbuchstaben in alphabetischer Reihenfolge angeordnet sind. Eine Ordnung zwischen der Menge der Großbuchstaben und der Menge der Kleinbuchstaben ist beispielsweise nicht vorgeschrieben. 6. Die Programmiersprache C 6-14

15 Gleitkommazahlen (1) float/double/long double Die Datentypen float, double und long double werden zur Darstellung von reellen Zahlen verwendet. Der im Prinzip kontinuierliche Zahlenbereich der reellen Zahlen kann im Computer nicht vollständig dargestellt werden, da hierzu unendlich viele Codewörter benötigt würden. Man kann nur rationale Zahlen mit einer begrenzten Anzahl von Stellen darstellen. Dazu werden reelle Zahlen ins Dualsystem übertragen und in Gleitpunktdarstellung mit Vorzeichen, Mantisse und Exponent gespeichert. Beispiel 5.75 = = 1* * * * *2-2 = = * Die Programmiersprache C 6-15

16 Gleitkommazahlen (2) Eine Gleitkommazahl erfordert also die maschineninterne Codierung der Mantisse des Vorzeichens der Mantisse des Exponenten des Vorzeichens des Exponenten. Dazu gibt es verschiedene Konventionen; die bekannteste ist die von IEEE (Standard 754). Folgende Grenzwerte müssen von einem C-Compiler mindestens eingehalten werden: Typ kleinste Zahl größte Zahl Genauigkeit float 1E-37 1E+37 1E-5 double 1E-37 1E+37 1E-9 6. Die Programmiersprache C 6-16

17 Wahrheitswerte Jede ganze Zahl x kann in C einen Wahrheitswert darstellen. Dabei gilt per Konvention: x = 0 impliziert x = false x 0 impliziert x = true Falls ein Wahrheitswert auf eine ganze Zahl abgebildet werden soll, gilt: false entspricht x = 0 true entspricht x = 1 6. Die Programmiersprache C 6-17

18 Aufzählungstyp (enumeration type) (1) Eine Aufzählung ist eine Folge von Zeichenkonstanten, denen vom Compiler jeweils ein Integer-Wert zugeordnet wird. Syntax Aufzählungstyp enum Typname { Enumerator, } ; Beispiel enum fruit {apple = 7, pear, orange = 3, lemon, peach} Nun gilt: apple = 7, pear = 8, orange = 3, lemon = 4, peach = 5. Merke: Aufzählungen werden wie Konstanten behandelt. Die mehrfache Verwendung desselben Integerwertes ist möglich, aber die Enumeratoren müssen eindeutig sein. 6. Die Programmiersprache C 6-18

19 Konstantenvereinbarung In C gibt es zwei Möglichkeiten, Konstanten zu vereinbaren: const-vereinbarung Die const-vereinbarung definiert eine Variable, die nur gelesen und nicht zugewiesen werden darf. Die Verwendung zur Definition der Länge einer anderen Datenstruktur (z.b. einer Vektorlänge) ist deshalb syntaktisch nicht erlaubt. #define-klausel #define suchtext ersatztext Die #define-klausel definiert sogenannte Compiler- Konstanten. Beim Übersetzen wird im gesamten Programmcode der Suchtext durch den Ersatztext ersetzt. Wenn man also Suchtext als Konstantenname und Ersatztext als Konstante ansieht, hat man eine Compiler-Konstante. Bei #define können als Konstanten auch Ausdrücke eingesetzt werden. Beispiel #define max_length 1000 int a [max_length]; 6. Die Programmiersprache C 6-19

20 Syntax für Konstante in C Konstanten-Vereinbarung const Konstantenname Typ = Konstante ; Konstante Zahl Zeichen Zeichenkette #define-klausel #define Suchtext Ersatztext 6. Die Programmiersprache C 6-20

21 Beispiele für Konstantenvereinbarungen (1) Zahlen const float pi = ; const int ganze_zahl = 79; const int hexa_zahl = 0x13; Zeichen const char anfang = "a"; Zeichenkette const char alphabet = "abc"; 6. Die Programmiersprache C 6-21

22 Variablenvereinbarung Variablenvereinbarung Typ Variablenname Initialisierung ;, Beispiele int float char anz_kinder; groesse; initiale_vorname, initiale_nachname; Initialisierung = Konstante vom Typ der Variablen Beispiel int a = 5; 6. Die Programmiersprache C 6-22

23 6.2 Operatoren und Ausdrücke Ausdruck (expression) Verarbeitungsvorschrift zur Ermittlung eines Wertes besteht aus Operanden und Operatoren wichtigste Ausdrücke: arithmetische und logische (boole'sche) Ausdrücke Beispiele int i = 5, j = 2, k =23; float x = 2.0, y = 5.5; double d = 2.4; Ausdruck i / j k % i*j k 7 % 5 x*y -i y / x y % x d / 2 Resultat nicht erlaubt Die Programmiersprache C 6-23

24 Regeln Bei der Auswertung gelten, wie üblich, Vorrangregeln, z.b. Punktrechnung vor Strichrechnung a / b ergibt für int a,b wiederum einen int-wert, nämlich den Ganzzahl-Anteil der Division a % b (die modulo-funktion) ist auf float und double nicht erlaubt bei Mischung von int und float/double in einem Ausdruck ist das Resultat vom Typ float/double. 6. Die Programmiersprache C 6-24

25 Der L-Wert (1) Ein L-Wert ist ein Ausdruck, der einen benannten Speicherbereich bezeichnet. L-Werte sind Objekte, denen Ergebnisse von Operationen zugeordnet werden können. Ein Beispiel für einen L-Wert ist ein Variablenname mit geeignetem Typ und passender Speicherklasse. Manche Operatoren erwarten L-Werte als Operanden, manche liefern einen L-Wert als Resultat. Beispiele &lvalue *expression Adressoperator Inhaltsoperator (liefert L-Wert) 6. Die Programmiersprache C 6-25

26 Der L-Wert (2) L-Wert Bezeichner Bezeichner [ Ausdruck ] L-Wert. Bezeichner Bezeichner -> Bezeichner * Ausdruck ( L-Wert ) 6. Die Programmiersprache C 6-26

27 Arithmetische Operatoren arithmetischer Ausdruck Ausdruck 1 arithm. Operatoren Ausdruck 2 arithmetischer Operator + * / % Beispiel a+b (x-y) / (z%5) 6. Die Programmiersprache C 6-27

28 Zuweisungsoperator Zuweisung L-Wert Zuweisungsoperator Ausdruck ; Zuweisungsoperator + - * / % >> << = Beispiele a += 5 l[a] = 17+4 a = b = c = 7 6. Die Programmiersprache C 6-28

29 Unäre Ausdrücke Unärer Ausdruck unärer arithmetischer Ausdruck Postfix-Arithmetik Prefix-Arithmetik Inhalts- Operator Cast- Operator Sizeof- Operator 6. Die Programmiersprache C 6-29

30 Unärer arithmetischer Ausdruck Syntax unärer arithmetischer Ausdruck + -! ~ * Ausdruck Vorzeichen + (a+b) - (x*y)!a logische Negation (NOT) *a Inhaltsoperator ~a bitweise Negation Adreßoperator & L-Wert Beispiel &y (dazu später mehr im Kapitel Zeiger ) 6. Die Programmiersprache C 6-30

31 Inkrement/Dekrement (1) Syntax Postfixarithmetik ++ L-Wert -- Prefixarithmetik L-Wert 6. Die Programmiersprache C 6-31

32 Inkrement/Dekrement (2) Postinkrement Wert der Variablen wird erst nach Auswertung des Ausdrucks, in dem die Variable vorkommt, erhöht. Preinkrement Wert der Variablen wird vor Auswertung des Ausdrucks, in dem die Variable vorkommt, erhöht. Beispiel für das Postinkrement int a, b; a = 1; b = a++; /* b=1, a=2 */ Beispiel für das Preinkrement int a,b; a = 1; b = ++a; /* b=2, a=2 */ Analog für das Dekrement. 6. Die Programmiersprache C 6-32

33 Typkonversionsoperator (type cast) Syntax cast - Operator ( Typname ) Ausdruck In C gibt es keine strenge Bindung der Variablen an ihre Datentypen! Treffen in einer Operation Operanden mit unterschiedlichem Datentyp zusammen, so wandelt C nach definierten Regeln implizit um. Ist die Umwandlungsregel nicht offensichtlich (z.b. int ->float), so sollte explizit konvertiert werden, um anzuzeigen, wie die Konvertierung erfolgen soll. Beispiel int a; double x; a = (int) (5 * x); 6. Die Programmiersprache C 6-33

34 Der sizeof - Operator Syntax sizeof - Operator Typname sizeof ( ) Ausdruck C verwendet den unären Operator sizeof, um die Anzahl von Bytes zu bestimmen, die zur Speicherung eines Objektes benötigt werden. Beispiele int a; sizeof (char) liefert in der Regel 1 sizeof (a*2) liefert sizeof (int) 6. Die Programmiersprache C 6-34

35 Vergleichsoperatoren (1) Syntax Vergleich Gleichheitsoperator Relationsoperator Gleichheitsoperator == Ausdruck 1 Ausdruck 2!= Relationsoperator Ausdruck 1 < > <= >= Ausdruck 2 6. Die Programmiersprache C 6-35

36 Vergleichsoperatoren (2) Die Rangordnung der Relationsoperatoren ist kleiner als die der arithmetischen Operatoren. Die Rangordnung der Gleichheitsoperatoren ist kleiner als die der Relationsoperatoren. Das Ergebnis von Vergleichsoperatoren ist ein Wahrheitswert. Beispiele a ==b y >= z 6. Die Programmiersprache C 6-36

37 Logische Operatoren Syntax logische Verknüpfung && Ausdruck 1 Ausdruck 2 Die Präzedenz von && ist höher als die von, aber beide haben einen niedrigeren Rang als unäre, arithmetische und Vergleichsoperatoren. Lediglich die Zuweisungsoperatoren haben einen noch niedrigeren Rang 6. Die Programmiersprache C 6-37

38 Der Komma-Operator Syntax Komma - Ausdruck Ausdruck 1, Ausdruck 2 Zwei Ausdrücke werden nacheinander von links nach rechts ausgeführt. Datentyp und Resultat des Ausdrucks sind vom Typ und Wert von Ausdruck 2. Beispiel for ( s = 0, i = 0; i< n; i++) s += x [i]; 6. Die Programmiersprache C 6-38

39 Bitoperatoren (1) Die kleinste adressierbare Speichereinheit in C ist ein Byte (char). Es ist aber möglich, auch einzelne Bits zu manipulieren. Dies erfolgt mit Hilfe der Bitoperatoren. Bitweise logische Operatoren Aktion Bitweises Komplement ~ Bitweises AND & Bitweises OR Bitweises XOR ^ Symbol Shift-Operatoren LEFTSHIFT << RIGHTSHIFT >> 6. Die Programmiersprache C 6-39

40 Bitoperatoren (2) Der Operator ~ ist als einziger Bitoperator unär (einstellig). Er bildet das bitweise Komplement. Beispiel x = (int) 5 x = 0x ~x = 0x (dezimal) (hexadezimal) (hexadezimal) Die anderen Operatoren sind binäre (zweistellige) Operatoren und arbeiten, wie in der Aussagenlogik definiert. Beispiel x = 0x1100; y = 0x1010; x ^ y ergibt 0x0110 (XOR-Operator) 6. Die Programmiersprache C 6-40

41 Bitoperatoren (3) Die Shiftoperatoren verschieben den gesamten Bitstring um n Bits nach rechts oder links. So lässt sich z.b. auch leicht eine 2er-Multiplikation/Division implementieren. Beispiel x = 0x0101 x << 1 ergibt 0x1010 (= 5 dezimal) (=10 dezimal) Merke: Es kommt leicht zu Verwechselungen von & mit &&. Dies kann fatale Auswirkungen haben! Beispiel unsigned short int x = 2; /* Länge = 1 Byte */ x && 1 liefert als Ergebnis 0 oder 1 zurück, abhängig von x (Wert 0 wird als Wahrheitswert true interpretiert) x & 1 liefert Die Programmiersprache C 6-41

42 Ausdruck Ausdruck einfacher Ausdruck unärer Ausdruck Zuweisung arithmetischer Ausdruck Vergleich logische Verknüpfung Bit - Ausdruck Komma - Ausdruck bedingter Ausdruck 6. Die Programmiersprache C 6-42

43 Bedingter Ausdruck Syntax bedingter Ausdruck Ausdruck 1? Ausdruck 2 : Ausdruck 3 Der Code ist äquivalent zu x = (y < z)? y : z; if (y < z) x = y; else x = z; Beispiel max = (a < b)? b : a; 6. Die Programmiersprache C 6-43

44 Präzedenzregeln Die Präzedenzregeln (Rangordnung der Operatoren) sind (wie üblich) an die Gepflogenheiten der Mathematik angelehnt. Geklammerte Ausdrücke zuerst Ungeklammerte Ausdrücke gemäß vier Präzedenzklassen: 1.) NOT 2.) Multiplikationsoperatoren 3.) Additionsoperatoren 4.) Vergleichsoperatoren bei gleicher Präzedenz erfolgt die Abarbeitung von links nach rechts Beispiele a) (3 <= 8 * 8 + 4) (9 / * 3 <= 10) = (3 <= 68) (15 <= 10) =1 0 =1 (TRUE) b) *2-9 / 2 % 3*2 + 1 = 3-9 / 2 % 3 * =4 2 =2 c)!a && b c entspricht ((!a) && b) c 6. Die Programmiersprache C 6-44

45 Überlauf/Unterlauf bei ganzen Zahlen Auch ganze Zahlen (integers) haben wegen der begrenzten Wortlänge des Computers einen beschränkten Wertebereich (z.b. 32 Bits). Ein Ganzzahl- Überlauf/Unterlauf tritt bei Verlassen des Wertebereichs auf. Sei z eine ganze Zahl (also vom Datentyp int). Dann gilt: min z max, min < max, wobei min und max den zulässigen Wertebereich für z begrenzen. 6. Die Programmiersprache C 6-45

46 Beispiele für Überläufe Merke: Damit bei arithmetischen Operationen das Ergebnis korrekt ist, müssen auch alle Zwischenresultate innerhalb des zulässigen Wertebereiches bleiben! Sei -min = max = * 20 / 4 erzeugen Überläufe in Zwischenresultaten, wenn sie von links nach rechts ausgewertet werden. Solche Überläufe können unter Umständen durch Klammerung vermieden werden: ( ) 80 * (20 / 4) Manche Compiler kümmern sich bereits selbst um eine solche Änderung der Reihenfolge der Auswertung. Man kann sich jedoch nicht darauf verlassen! Man könnte sagen: Das Assoziativgesetz gilt nicht mehr, wenn Bereichsgrenzen überschritten werden. 6. Die Programmiersprache C 6-46

47 Rang Art Operatoren (1) Symbol in der Logik/ Arithmetik Operator in C Name Beispiel 1 ( ) ( ) Klammern (a+b) 1 monadisch [ ] [ ] Array/ a[ ] Vektor 1 monadisch -> Komponente a-> b 1 monadisch. Komponente a. b 2 monadisch/ arithmetisch ++ Addition von 1 a++ monadisch/ arithmetisch -- Subtraktion --b von 1 2 monadisch/! Negation!treu logisch 2 monadisch/ logisch NOT ~ Bitkomplement ~y 2 monadisch (type) typecast (int) x 2 monadisch sizeof sizeof sizeof(int) 6. Die Programmiersprache C 6-47

48 Operatoren (2) 2 monadisch/ arithmetisch monadisch/ arithmetisch + + Plusvorzeichen - - Minusvorzeichen monadisch * Verweis *a 2 monadisch & Adresse &a 3 dyadisch/ * * Multiplikatin 3*4 arithmetisch dyadisch/ / / Division 3 / 4 arthimetisch/ dyadisch/ DIV / ganzz. Division 3 / 4 = 0 arithmetisch dyadisch/ MOD % ganzz. Rest 3%4 = 3 arithmetisch 4 dyadisch/ + + Addition 3+4 arithmetisch dyadisch/ arithmetisch - - Subtraktion dyadisch/ logisch LSHIFT << Linksshift um x<<5 Bitpositionen 5 dyadisch/ logisch RSHIFT >> Rechtsshift um Bitpositionen x>>5 6. Die Programmiersprache C 6-48

49 Operatoren (3) 6 dyadisch < < Relationsoperatoren dyadisch <= dyadisch > > dyadisch >= 7 dyadisch == == Gleichheitsoperatoren =! =! 8 dyadisch/ logisch ^ & Logisches `und` auf Bits 9 dyadisch/ logisch 10 dyadisch/ logisch XOR ^ Logisches `XOR` auf Bits Logisches `oder` auf Bits && logisches 'und' logisches 'oder' 11 dyadisch/ logisch 12 dyadisch/ logisch 13?: bedingter Ausdruck a>b a==b x & y x ^ y x y a && b a b a? c : b 6. Die Programmiersprache C 6-49

50 Operatoren (4) 14 = += -= *= /= %= &= ^= = <<= >>= Wertzuweis-ung 15, Kommaoperator s=0, i=0 6. Die Programmiersprache C 6-50

51 6.3 Ablaufsteuerung (Kontroll struktren) Sequenz von Anweisungen (Hintereinander- Ausführung) Selektion if... else switch... Iteration while... do... while... for Die Programmiersprache C 6-51

52 6.3.1 Anweisungen Ein Programm besteht aus einer Folge von Anweisungen. Anweisung leere Anweisung Zuweisung Routinen-Aufruf Anweisungsblock Iterations-Anweisung Auswahl-Anweisung Anweisung mit Marke Sprung-Anweisung 6. Die Programmiersprache C 6-52

53 Wertzuweisung ("Ergibt - Anweisung", assignment statement) Berechnung des rechts stehenden Ausdrucks Wertzuweisung an die links stehende Variable Syntax Zuweisung L-Wert Zuweisungsoperator Ausdruck ; Merke: Der Ausdruck sollte stets denselben Datentyp haben wie die Variable; wenn dies nicht sowieso der Fall ist, sollte ein Typecast programmiert werden! 6. Die Programmiersprache C 6-53

54 Beispiel summe += 4; /*identisch zu summe = summe +4;*/ produkt *= i; /*identisch zu produkt = produkt * i;*/ Da in C Zuweisungen syntaktisch selbst Ausdrücke sind, sind "Mehrfachzuweisungen" (verkettete Zuweisungen) in C möglich! Beispiele a = b = c = 0.0; if ((c=getc(datei))!= EOF)... [Man beachte die Klammerung wegen der Vorrangregel] Die Initialisierung mehrerer Werte in einer Anweisung und die Verwendung als Operand in einem Aufruf sind typische Anwendungen. 6. Die Programmiersprache C 6-54

55 Wertzuweisung ungleich Vergleichsoperator! i = i + 1; ist eine Wertzuweisung an i; Neuer Wert ist alter Wert + 1 i == i + 1 ist ein boole'scher Ausdruck, der immer falsch ist! Syntaktisch ist auch dieser Ausdruck korrekt. Er kann ersetzt werden durch 0 (false). Häufige Ursache von Programmierfehlern! 6. Die Programmiersprache C 6-55

56 Beispiele für Wertzuweisungen Die Variablen seien wie folgt deklariert: int i, j, k; double x, y, z; int fertig; i = j / k + i; z = x / y; fertig = (z < j) &&! (x == y); i = j / x; implizite Typkonvertierung! */ i = z / x + 15; implizite Typkonvertierung */ fertig = 1 && x; zugewiesen wird 0 oder 1! */ 6. Die Programmiersprache C 6-56

57 Folgen von einfachen Anweisungen (Sequenz) Folge von Anweisungen, sequentiell aufgeschrieben, getrennt durch ";" Sequenz Anweisung Beispiele a = b; x = y + 3; z = 17; a = 3 * 87-5; wahr = (x < 5) (y > 20); 6. Die Programmiersprache C 6-57

58 Anweisungsblock Anweisungsblock Anweisungs- { Deklaration } Sequenz Ein Anweisungsblock kann überall da stehen, wo eine einfache Anweisung stehen kann, insbesondere in Abhängigkeit von einer Bedingung im Rumpf einer Schleife. Der gesamte ausführbare Teil eines C-Programms kann als Anweisungsblock aufgefasst werden. In C kann zu Beginn jedes Anweisungsblocks eine Variablendeklaration eingefügt werden. Die hier deklarierten Variablen sind jedoch nur innerhalb dieses Blockes gültig (lokale Variable). 6. Die Programmiersprache C 6-58

59 6.3.2 Bedingte Anweisung if-anweisung if ( Ausdruck ) Anweisung else Anweisung 6. Die Programmiersprache C 6-59

60 Anmerkungen zur bedingten Anweisung Anmerkung 1 Als "Anweisung" tritt häufig ein Anweisungsblock der Form { Anweisung; Anweisung;.. Anweisung; } auf, die dann als Ganzes von der Bedingung abhängt. Anmerkung 2 Eine bedingte Anweisung der Form if Ausdruck Anweisung; Anweisung; else Anweisung; ist syntaktisch falsch! 6. Die Programmiersprache C 6-60

61 Geschachtelte if - Anweisungen Die Zugehörigkeit der else-klausel zur if-klausel wird üblicherweise durch Einrückung deutlich gemacht. Die Einrückung ist aber nicht signifikant für den Compiler! Regel Ein else gehört immer zu dem letzten if, das noch keine else - Klausel hat. 6. Die Programmiersprache C 6-61

62 Beispiel: Knobelspiel Zwei Spieler geben unabhängig voneinander gleichzeitig je eine nicht-negative ganze Zahl an (etwa durch Ausstrecken von Fingern auf Kommando oder durch verdecktes Aufschreiben). Nennen beide Spieler die gleiche Zahl, so endet das Spiel unentschieden; andernfalls gewinnt, falls die Summe der genannten Zahlen gerade ist, der Spieler, der die kleinere Zahl genannt hat, und sonst (falls also die Summe ungerade ist) derjenige, der die größere Zahl genannt hat. 6. Die Programmiersprache C 6-62

63 Erster Entwurf /* PROGRAMM knobelspiel */ void main () { /* Variablen deklarieren */ /*... */ if (eingabe fehlerhaft) {fehlermeldung} else {Entscheidung} } 6. Die Programmiersprache C 6-63

64 Schrittweise Verfeinerung Die Entscheidung lässt sich schreiben als if else {eingaben gleich} {unentschieden} {ermittle sieger} Der Sieger kann ermittelt werden mit if {summe gerade} {kleinerer siegt} else {grösserer siegt} Um anzugeben, welcher der beiden gewonnen hat, kann man den Sieg des Spielers mit der kleineren Zahl beschreiben als {erster spieler kleinere zahl} if else {erster spieler siegt} {zweiter spieler siegt} Der Sieg des Spielers mit der größeren Zahl wird beschrieben als {erster spieler grössere zahl} if else {erster spieler siegt} {zweiter spieler siegt} 6. Die Programmiersprache C 6-64

65 Programm "Knobelspiel" in Pseudo-Code /* PROGRAMM knobelspiel */ /* Variablendeklaration */ void main () { {eingabe} if {eingabe fehlerhaft} {fehlermeldung} else if {eingaben gleich} {unentschieden} else if {summe gerade} if{erster Spieler kleinere zahl} {erster spieler siegt} else {zweiter spieler siegt} else {summe ungerade} if {erster spieler grössere zahl} {erster spieler gewinnt} else {zweiter spieler siegt} } /* main */ (In unserer Notation im Pseudocode ist vereinbarungsgemäß die Einrückung signifikant.) 6. Die Programmiersprache C 6-65

66 Programm "Knobelspiel" in C /* PROGRAMM knobelspiel */ void main () { int k,l; printf ("Bitte die beiden Knobelwerte eingeben:"); scanf ("%d \n", &k); scanf ("%d \n", &l); /* "call by reference", Erklärung folgt später */ if (( k < 0) (l < 0)) printf ("unzulässige eingabe"); else if (k == l) printf ("unentschieden"); else if (((k + l) %2)!=0) /*ungerade Summe*/ if k < l) printf ("1. spieler siegt"); else printf ("2. spieler siegt"); else if (k > l) printf ("1. spieler siegt"); else printf ("2. spieler siegt"); } /* main */ 6. Die Programmiersprache C 6-66

67 6.3.3 Mehrfach-Selektion (Fallunterscheidung) Die Mehrfachselektion ist eine Auswahlanweisung mit mehreren Alternativen. Es wird untersucht, ob ein Ausdruck einen aus einer Liste von mehreren konstanten ganzzahligen Werten besitzt, dann wird entsprechend verzweigt. 6. Die Programmiersprache C 6-67

68 Syntax der Mehrfach-Selektion Mehrfachauswahl switch ( Ausdruck ) { Listenelement } Listenelement Marke : Anweisung break ; default Marke case Konstante Die default-klausel kann dabei maximal einmal am Ende der Liste verwendet werden. 6. Die Programmiersprache C 6-68

69 Beispiel für switch void main () { typedef enum {sieben, acht, neun, zehn, bube, dame, könig, as} spielkartentyp ; spielkartentyp karte; int wert; switch (karte) { case sieben : wert = 7; break; case acht : wert = 8; break; case neun : wert = 9; break; case zehn : case bube : case dame : case könig : wert = 10; break; case as : wert = 11; break; } default : wert = 0; } 6. Die Programmiersprache C 6-69

70 Abarbeitung der switch-anweisung Die Anweisungen in einem switch -Block werden sequentiell abgearbeitet. Die break-anweisung bewirkt ein Verlassen des switch-blocks. Einen case-block ohne eine break-anweisung abzuschließen bewirkt, dass alle darauffolgenden case-blöcke bis zu einem break oder dem Ende der switch-anweisung ausgeführt werden. Beispiel int x = 0, y; switch (x) { case 0 : y = 1; case 1 : y = 2; break; case 2 : y = 3; break; default : } Der Benutzer wollte y den Wert 1 zuweisen. So aber erhält y den Wert 2! 6. Die Programmiersprache C 6-70

71 6.3.4 Iteration (Wiederholungsanweisung) Es gibt in C drei Varianten von Iterationsanweisungen: while-schleife do-schleife for-schleife 6. Die Programmiersprache C 6-71

72 while-schleife Bedingungsschleife while ( Ausdruck ) Anweisung Merke: Die Abbruchbedingung wird jeweils vor der Ausführung der Anweisungen geprüft. 6. Die Programmiersprache C 6-72

73 do-schleife do-schleife Anweisung while Ausdruck do ( ) ; Merke: Die Abbruchbedingung wird jeweils nach der Ausführung der Anweisungen geprüft. 6. Die Programmiersprache C 6-73

74 for-schleife ("Zählschleife") (1) Die for-schleife sieht allgemein wie folgt aus: Zählschleife for ( Ausdruck 1 ; Ausdruck 2 ; Ausdruck 3 ) Anweisung 6. Die Programmiersprache C 6-74

75 for-schleife ("Zählschleife") (2) Es gelten folgende Regeln: Ausdruck1 wird nur einmal berechnet und dient zur Initialisierung der Schleife (in der Regel zur Anfangszuweisung an Kontrollvariable). Ausdruck2 ist ein logischer Ausdruck (boolean), in der Regel eine Abbruchbedingung. Er wird vor jedem Schleifendurchlauf neu berechnet. Die for-schleife bricht ab, wenn Ausdruck2 = 0 (false) ist. Ausdruck3 wird ebenfalls vor jedem Schleifendurchlauf neu berechnet. Er dient zur Veränderung von Schleifenvariablen für den neuen Durchlauf. 6. Die Programmiersprache C 6-75

76 Analogie zwischen for- und while-schleife Eine for-schleife der Form for ( expr1; expr2; expr3) Anweisungsblock; ist äquivalent zu einer while-schleife der Form expr1; while (expr2) { Anweisungsblock; expr3; } Eine for-schleife ist in der Regel immer dann sinnvoll, wenn die Anzahl der Wiederholungen im voraus bekannt ist. 6. Die Programmiersprache C 6-76

77 break und continue in Schleifen (1) continue bewirkt, dass der Anweisungsblock im Inneren der Schleife nicht weiter abgearbeitet wird, sondern sofort mit dem nächsten Schleifendurchlauf begonnen wird. Beispiel /* negative Elemente werden nicht bearbeitet */ #define N 10 int i, a[n]; for (i=0; i < N; i++) { if (a[i] < 0) continue; } /* Bearbeitung positiver Elemente */ Die Programmiersprache C 6-77

78 break und continue in Schleifen (2) break bewirkt, dass die gesamte Schleife verlassen wird, nicht nur der aktuelle Schleifendurchlauf. Beispiel Im obigen Beispiel bewirkt break an der Stelle von continue, dass beim Auftreten des ersten negativen Elements die Bearbeitung des gesamten Arrays abgebrochen wird. 6. Die Programmiersprache C 6-78

79 6.4 Unterprogramme Unterprogramme dienen zur Modularisierung von Programmen. Unterprogramme werden deklariert und aufgerufen. Man unterscheidet traditionell zwei Arten von Unterprogrammen Prozeduren Führen einen Teil der Arbeit des aufrufenden Programms durch. Ergebnisse werden in der Regel in Form von Parametern zurückgegeben. Funktionen führen die Berechnung von Funktionswerten im mathematischen Sinn durch. Ergebnisse werden (gegebenfalls zusätzlich zu Parametern) durch den Funktionsaufruf zurückgeliefert; der Wert des Ergebnisses tritt an die Stelle des Funktionsnamens im umgebenden Ausdruck. In C gibt es nur einen Typ von Unterprogrammen, nämlich Funktionen. Ergebniswerte von Funktionen können in C jedoch ignoriert werden, so dass eine C-Funktion sich wie eine Prozedur verhält. 6. Die Programmiersprache C 6-79

80 Deklaration von Unterprogrammen (1) Unterprogrammvereinbarung Unterprogrammkopf Unterprogrammrumpf Unterprogrammkopf ( Typname Routinenname Parameterliste ) Unterprogrammrumpf { Vereinbarungsfolge Anweisungsfolge ; } 6. Die Programmiersprache C 6-80

81 Deklaration von Unterprogrammen (2) Unterprogramme sollten im Deklarationsteil eines Programms, im Anschluss an die Variablen-Deklarationen vereinbart werden. Es sollte immer ein Typ für das Unterprogramm (und damit für den zurückgelieferten Wert) angegeben werden, auch wenn der C-Compiler dies nicht verlangt. Wird kein Typ angegeben, geht der Compiler vom Typ "int" aus. 6. Die Programmiersprache C 6-81

82 Die return-anweisung Die Rückgabe von Ergebnissen einer Funktion erfolgt in der Funktion durch die Anweisung return: return-anweisung return Ausdruck ; Nach dem Schlüsselwort return kann ein beliebiger Ausdruck stehen. Das Ergebnis der Funktion ist das Ergebnis der Auswertung dieses Ausdrucks. Merke: Eine Routine muss keinen Resultatwert liefern. Ein leeres return bzw. die abschließende geschweifte Klammer beenden die Routine und geben 0 zurück (normales Routinenende). Eine Routine sollte jedoch aus Gründen der Klarheit immer eine return- Anweisung besitzen. 6. Die Programmiersprache C 6-82

83 Aufruf von Unterprogrammen (1) Routinenaufruf Variable = Routinenname ( aktueller Parameter ) ;,..., Der Aufruf ohne Zuweisung an eine Variable ist, syntaktisch gesehen, eine Anweisung (statement); dies entspricht der traditionellen Prozedur. Solche Unterprogramme werden mit dem Typ void vereinbart. Der Aufruf mit Zuweisung an eine Variable ist, syntaktisch gesehen, ein Ausdruck (expression); dies entspricht der traditionellen Funktion, bei der ein Wert zurückgegeben wird. 6. Die Programmiersprache C 6-83

84 Aufruf von Unterprogrammen (2) Beispiele void mache_garnichts () { } double square_root (double value) { return (sqrt(value)); } Aufrufe: double a, b;... mache_garnichts();... b = 4.0; a = square_root(b); Die Programmiersprache C 6-84

85 Korrespondenz zwischen formalen und aktuellen Parametern Aktuelle und formale Parameter sollten in der Anzahl übereinstimmen. Aktuelle und formale Parameter sollten im Typ übereinstimmen. Aktuelle und formale Parameter entsprechen einander in der Reihenfolge, in der sie in der Vereinbarung und im Aufruf auftreten (Stellungsparameter). 6. Die Programmiersprache C 6-85

86 Variable Parameterlisten Es dürfen beim Aufruf eines Unterprogramms auch mehr Parameter übergeben werden als vereinbart sind. Dazu ist in der Deklaration '...' als letzter Parameter notwendig. Dies ist sinnvoll, wenn vorab nicht bekannt ist, wieviele Parameter übergeben werden sollen. Beispiel: Die später noch einzuführende Funktion printf ist folgendermaßen deklariert: int printf (const char *format,... ) Sie gibt u.a. den Inhalt beliebig vieler Variablen auf dem Bildschirm aus. Achtung Es dürfen nie weniger Argumente als vereinbart übergeben werden, da ansonsten der Effekt des Aufrufs undefiniert ist. 6. Die Programmiersprache C 6-86

87 Beispiel für schwierige Semantik int i; void test (int k; int j) { k = k + 1; j = 3 i; return; } /*test*/ main () { int a[3]; a[0] = 1; a[1] = 2; a[2] = 3; i = 1; test (i, a[i]); return; } Fragen bzgl. i und a[i]: Wie wird auf den aktuellen Parameter zugegriffen? indem innerhalb der Routine Speicherplatz angelegt und der Wert dorthin kopiert wird? indem direkt auf den Speicherplatz der Variablen im Hauptprogramm zugegriffen wird? indem der Parameter-Ausdruck bei jeder Benutzung neu berechnet wird? 6. Die Programmiersprache C 6-87

88 Call - by - value (1) Argumente werden bei Routinenaufruf in die Routine auf lokalen Speicherplatz kopiert. Berechnung der Parameterwerte bei Aufruf der Routine. Alle Operationen innerhalb der Routine werden auf dem lokalen Speicherplatz ausgeführt. Also: Keine Auswirkungen außerhalb der Prozedur. Nur geeignet für Eingangsparameter. 6. Die Programmiersprache C 6-88

89 Call - by - value (2) int i, a[3]; void test (int k, int j) { k = k + 1; j = 3 * a[i]; return; } /*test*/ main () { a[0] = 1; a[1] = 2; a[2] = 3; i = 1; test (i, a[i]); return; } i a[0] a[1] a[2] Die Programmiersprache C 6-89

90 Call - by - reference (1) bei Eintritt in die Routine wird die Speicheradresse des Parameters berechnet. alle Operationen innerhalb der Routine werden direkt auf den so berechneten Speicheradressen ausgeführt. Also: Änderungen des Parameterinhaltes ändern die Umgebung. Geeignet für Eingangs- und Ausgangsparameter, d.h. damit können Daten der aufrufenden Routine geändert werden! 6. Die Programmiersprache C 6-90

91 int i, a[3]; Call - by - reference (2) void test (int *k, int *j) { *k = *k + 1; *j = 3 * a[i]; return; } /*test*/ main () { a[0] = 1; a[1] = 2; a[2] = 3; i = 1; test (&i, &a[i]); return; } i a[0] a[1] a[2] Die Programmiersprache C 6-91

92 Call - by - name (1) Ausdrücke sind als aktuelle Parameter erlaubt. Operationen werden auf den Original-Speicherplätzen außerhalb der Routine ausgeführt. Erneute Auswertung des Ausdrucks bei jeder Verwendung innerhalb des Unterprogramms! Also: Der Call-by-name führt dann zu anderen Werten als der Call-by-reference, wenn mehrere Parameter übergeben werden, die voneinander abhängen. Nicht empfehlenswert, da oft sehr schwer verständlich. 6. Die Programmiersprache C 6-92

93 Call - by - name (2) int i, a[3]; void test (int *k, int *j) { *k = *k + 1; *j = 3 * a[i]; return; } /*test*/ main () { a[0] = 1; a[1] = 2; a[2] = 3; i = 1; test (&i, &a[i]); return; } Call-by-name ist in C nicht möglich! Dazu müsste "*j" im Unterprogramm "test" erst nach der Anweisung "* k=*k+1" erneut ausgewertet werden, d.h. da "*j" für "a[i]" steht und "i= * k" ist, wäre "*j= a [2]". Damit würde das Programm folgende Ergebnisse liefern: a[0] a[1] a[2] Die Programmiersprache C 6-93

94 Binderegeln in C (1) Es gibt nur Call-by-value in C. Call-by-reference kann durch den Referenzoperator * dargestellt werden. Parameterklasse Übergaberegel aktueller Parameter Wertparameter Referenzparameter Routinenparameter Call-by-value call-by-reference call-by-reference Ausdruck Variablenreferenz Routinenreferenz 6. Die Programmiersprache C 6-94

95 Binderegeln in C (2) Parameterliste, Wertparameter Routinenreferenzparameter Variablenreferenzparameter 6. Die Programmiersprache C 6-95

96 Binderegeln in C (3) Wertparameter Typname Parametername Variablenreferezparameter Typname * Parametername Routinenreferezparameter Typname ( * Routinenname ) * ( ) Parametertyp 6. Die Programmiersprache C 6-96

97 Binderegeln in C (4) Beispiele a) Call-by-value float Betrag (float x) { if (x >= 0) return(x); else return(-x); } Aufgerufen wird die Funktion z.b. durch y = Betrag (3.14 * z); 6. Die Programmiersprache C 6-97

98 Binderegeln in C (5) b) Call-by-reference void Tausch (int *a, int *b) { int hilf; } hilf = *a; *a = *b; *b = hilf; return; Aufgerufen wird die Funktion z.b. durch Tausch(&x, &y); (wobei x und y integer sind) 6. Die Programmiersprache C 6-98

99 Binderegeln in C (6) c) Routinen als Parameter (*F)(float) sei eine beliebige reellwertige Funktion, bei der (*F)(a)<0 und (*F)(b)>0 ist. Das Unterprogramm "Nullstelle" berechnet nun nach der Methode der Intervallhalbierung eine Nullstelle von (* F). float Nullstelle(float(*F)(float), float a, float b) { float mittelpunkt = 0.0; while (fabs((*f)(mittelpunkt) > (1e-10))) { mittelpunkt = (a+b)/2; if ( (*F)(mittelpunkt) < 0) a = mittelpunkt; else b = mittelpunkt; } return (mittelpunkt); } 6. Die Programmiersprache C 6-99

100 Binderegeln in C (7) F(x) a Mittelpunkt b Achtung: Bei der Angabe der Routine (*F) als Parameter muss auf die Klammern geachtet werden, da man sonst eine Funktion angibt, die einen Zeiger auf ein float zurück gibt, und nicht einen Funktionszeiger. 6. Die Programmiersprache C 6-100

101 Standardfunktionen in C (1) In der Standard include-datei <math. h> vereinbarte mathematische Standardfunktionen: Aufruf abs (x) labs (x) fabs (x) ceil (x) floor (x) sin (x) cos (x) exp (x) log (x) sqrt (x) atan (x) pow (x,y) Parametertyp integer long float double double double double double double double double double Ergebnistyp Bedeutung integer long float double double double double double double double double double Betrag eines Integers Betrag eines Longs Betrag eines Floats kleinster ganzzahliger Wert,der nicht kleiner als x ist größter ganzzahliger Wert,der nicht größer als x ist Sinusfunktion Cosinusfunktion Exponentialfunktion 10er- Logarithmus Wurzel einer Zahl Arcustangensfunktion x hoch y 6. Die Programmiersprache C 6-101

102 Standardfunktionen in C (2) In der Standard include-datei <string. h> vereinbarte Standardfunktionen zur Handhabung von Zeichenketten: Aufruf char *strcpy(s,ct) char *strncpy(ct,n) char *strcat(s,ct) char *strncat(s,ct,n) int strcmp(cs,ct) int strncmp(cs,ct,n) char *strstr(cs,ct) size_t strlen(cs) Bedeutung Kopiert Zeichenkette ct in Vektor s Kopiert höchstens n Zeichen aus ct in s Hängt Zeichenkette ct an s hinten an Hängt höchstens n Zeichen an Vergleicht Zeichenketten cs und ct Vergleicht höchstens n Zeichen von cs und ct Liefert Zeiger auf erste Kopie von ct in cs Liefert Länge von cs 6. Die Programmiersprache C 6-102

103 Gültigkeitsbereich von Namen Wenn Variablen, Konstanten usw. innerhalb einer Prozedur oder Funktion denselben Namen haben wie Variablen, Konstanten usw. außerhalb, muss klar definiert sein, welches Objekt jeweils gemeint ist. Es gilt: Jede Vereinbarung eines Namens hat nur in dem Block Gültigkeit, in dem sie vorgenommen wird. Also: Ein Name bezieht sich immer auf die am nächsten liegende Deklaration. Namen müssen innerhalb eines Blockes eindeutig sein. Die Deklaration muss der Verwendung vorangehen. Ein innerhalb eines Blockes vereinbarter Name heißt lokal. Ein außerhalb des Blockes vereinbarter Name heißt global. 6. Die Programmiersprache C 6-103

104 Blockstruktur In C kann jeder Anweisungsblock am Beginn eigene Deklarationen enthalten. Ansonsten gibt es Vereinbarungen außerhalb von Routinen ("globale") und zu Beginn von Routinen. UP 1 Block 1 UP 2 Block 2 Block 3. UP n Hauptprogramm Block 4 Block 5 Achtung: In ANSI-C können Routinen nicht geschachtelt werden. Insbesondere darf auch das Hauptprogramm keine Unterprogramme enthalten. Es können jedoch Anweisungsblöcke geschachtelt werden. 6. Die Programmiersprache C 6-104

105 Regeln für die Sichtbarkeit von Vereinbarungen Sichtbarkeit von äußeren Blöcken nach innen keine Sichtbarkeit von innen nach außen keine gegenseitige Sichtbarkeit für Blöcke derselben Schachtelungstiefe Beispiel int a,b,c function g int x,y,z main int x,y b1 int d,e,f b2 int c,d,e 6. Die Programmiersprache C 6-105

106 Gültigkeitsbereich vs. Lebensdauer Der Gültigkeitsbereich eines Namens umfasst den Block, in dem der Name deklariert ist. Die Lebensdauer eines Objekts umfasst den Block, in dem es definiert ist: es existiert nur so lange, wie Anweisungen des zugehörigen Blocks ausgeführt werden. Das Laufzeitsystem von C legt beim Eintritt in einen Block den Speicherplatz für die dort lokal benötigten Objekte an und gibt ihn beim Verlassen des Blocks wieder frei. Eine Ausnahme hierzu bildet die static-deklaration: Wird eine Variable innerhalb einer Funktion als static deklariert, so behält sie ihren Wert auch nach Beendigung der Funktion. Bei erneutem Aufruf hat sie den Wert vom vorigen Verlassen der Prozedur. Beispiel: static int alert; Merke: Objekte, die nur innerhalb eines Blocks benötigt werden, sollten innerhalb dieses Blocks vereinbart werden. Dies verbessert die Übersichtlichkeit und vermeidet Seiteneffekte. 6. Die Programmiersprache C 6-106

107 Rekursion in C (1) Da für alle Call-by-Value-Parameter und für alle lokalen Variablen Speicherplatz beim Prozedureintritt dynamisch angelegt wird, können Funktionen und Prozeduren in C rekursiv aufgerufen werden. Die Anweisungen innerhalb eines Prozedurrumpfes beziehen sich dabei jeweils auf die lokalen Variablen und Parameter. Bei der Rückkehr aus der Rekursion findet die Funktion bzw. Prozedur dann jeweils wieder die alten Werte vor. 6. Die Programmiersprache C 6-107

108 Rekursion in C (2) Beispiel int fak (int k) { if (k==0) return (1); else return (k * fak (k-1)); } 3 * fak (2) 2 * fak (1) 1 * fak (0) 1 1 * 1 2 * 1 3 * Die Programmiersprache C 6-108

109 Rekursion und Kellerspeicher (Stack) Bei jedem rekursiven Aufruf wird ein neuer Speicherbereich für die lokalen Variablen und Parameter angelegt. Zugleich werden die lokalen Variablen und Parameter aus der nächsthöheren Rekursionsstufe unzugänglich. Daher lässt sich der Speicher für Unterprogrammdaten als Kellerspeicher (Stack) organisieren. Dies geschieht auch in den C-Laufzeitsystemen. Beim Umsetzen einer Rekursion in eine Iteration muss der Kellerspeicher oft vom Programmierer angelegt und verwaltet werden. Hauptspeicher: Keller /Stack : }globale Variablen k : 3 k : 2 k : 1 k : 0 6. Die Programmiersprache C 6-109

110 Seiteneffekte Auswirkungen von Funktionen und Prozeduren, die nicht unmittelbar aus der intendierten Semantik hervorgehen, heißen Seiteneffekte. Sie treten meist auf im Zusammenhang mit Funktionsaufrufen und globalen Variablen verschachtelten Zuweisungen Beispiel: x = 0; v = --x - (x=4); Makros Merke: Externe, global gültige Variablen sind nur für große, den Kern eines Programms bestimmende Datenstrukturen sinnvoll. Grundsätzlich sollten alle in einer Routine verwendeten Variablen entweder lokal sein, oder als Parameter übergeben werden. 6. Die Programmiersprache C 6-110

111 Beispiel für einen Seiteneffekt (1) /* Globale Variablen */ int r; float s, wert; float hoch (float x, int y) { float u, v; } u = 1; v = x; r = y; while (r > 0) { if (r % 2) /*r ist ungerade? */ u = u * v; v = v * v; / * v -Quadrat * / r = r/2; } return (u); (Fortsetzung nächste Seite) 6. Die Programmiersprache C 6-111

112 Beispiel für einen Seiteneffekt (2) main () { printf ("Bitte ein Zahlenpaar eingeben; mit <ENTER> beenden: \n"); scanf ("%f", &s); scanf ("%d", &r); wert = hoch (s, r); printf ("%f hoch %d ist %f \n", s, r, wert); return; } Eine Eingabe von 2 7 erzeugt eine Ausgabe von "2 hoch 0 ist 49" 6. Die Programmiersprache C 6-112

113 6.5 Zeiger und komplexe Datenstrukturen 1. Zeiger Ein Zeiger (pointer) ist ein Verweis auf ein anderes Datenobjekt. Beispiel Ted Fred Mary Null Null Adam Eva Null Null Null Null 6. Die Programmiersprache C 6-113

114 Implementierung von Zeigern (1) Der Speicher einer Maschine unter dem Betriebssystem UNIX ist in fortlaufend nummerierte Speicherzellen aufgeteilt, wobei die Nummer die Adresse der Speicherzelle darstellt. Ein Zeiger wird implementiert durch Abspeichern der Speicheradresse des anderen Objektes, auf das verwiesen werden soll. 6. Die Programmiersprache C 6-114

115 Implementierung von Zeigern (2) Beispiel 40 "Ted" Adr("Fred")=80 Adr("Mary")= "Fred" Adr("Adam")=80 Null 100 "Adam" Null Null 160 "Mary" Null Adr("Eva")= "Eva" Null Null 6. Die Programmiersprache C 6-115

116 Syntax in ANSI C (1) Deklaration: Zeigerdeklaration, typ * Variable ; Beispiele int *a; struct person { char name[20]; struct person * vater, * mutter; }; 6. Die Programmiersprache C 6-116

117 Syntax in ANSI C (2) Werte, die ein Zeiger annehmen kann: spezielle Adresse NULL (Zeiger, der nirgendwo hinzeigt) (in <stdio.h> definiert) positive Ganzzahl (Maschinenadresse im Speicher des Systems) Merke Der Typ der Datenelemente, auf die gezeigt wird (Bezugstyp), ist aus der Deklaration des Zeigertyps ersichtlich! Mit der Deklaration "void *" kann ein unspezifischer (generischer) Zeiger (ohne Typ) generiert werden. Solche Zeiger dürfen jedoch nicht selbst zum Zugriff verwendet werden, sondern können nur als Platzhalter für Argumente in Funktionen dienen. 6. Die Programmiersprache C 6-117

118 Operationen auf Zeigern (1) a) Wertzuweisung Einem Zeiger kann der Wert eines anderen Zeigers zugewiesen werden. Beispiel typedef int ganze_zahl; typedef (ganze_zahl *) zeiger_auf_ganze_zahl; ganze_zahl a; zeiger_auf_ganze_zahl p1, p2;... { Die Programmiersprache C 6-118

119 Operationen auf Zeigern (2) p2 = p1; /* p2 zeigt nun auf das selbe Objekt wie p1 */... }. p1 p2. Es ist auch möglich, absolute Speicheradressen zuzuweisen. Beispiel p1 =(zeiger_auf_ganze_zahl) 1501; /* Typecast vermeidet Compiler-Warnung */ Merke Es ist gefährlich, absolute Speicheradressen zu verwenden, da die Einteilung des Speichers i.d.r. nicht bekannt ist. 6. Die Programmiersprache C 6-119

120 Operationen auf Zeigern (3) b) Unärer Adreßoperator & Einem Zeiger kann die Adresse eines Objektes zugewiesen werden. Beispiel int c; int *p;... { c. p... p = &c; c p /* p zeigt nun auf die Adresse von c */ } 6. Die Programmiersprache C 6-120

121 Operationen auf Zeigern (4) c) Unärer Inhaltsoperator * Einem Objekt kann der Inhalt eines anderen Objektes zugewiesen werden, auf das ein Zeiger zeigt. (dereferencing/indirection) Beispiel int c1, c2; int *p;... { c1 = x c2 = y... p = &c1; p c1 = x c2 = y p 6. Die Programmiersprache C 6-121

122 Operationen auf Zeigern (5)... c2 = *p; c1 = x c2 = x p... *p = 5; c1 = 5 c2 = x p... } Merke Die unären Adreßoperatoren * und & haben höheren Vorrang als dyadisch arithmetrische Operatoren. 6. Die Programmiersprache C 6-122

123 Operationen auf Zeigern (6) Beispiel y = *p + 1 inkrementiert den Wert, auf den p zeigt, um 1 und weist das Ergebnis y zu *p += 1 inkrementiert den Wert, auf den p zeigt, um 1 ++*p ebenso (++(*p)) (*p)++ ebenso *p++ inkrementiert p (die Adresse) (es wird von rechts nach links zusammengefaßt) (*(p++)) 6. Die Programmiersprache C 6-123

124 Operationen auf Zeigern (7) d) Direktes Einrichten eines neuen Datenobjekts, auf das der Zeiger zeigt void *malloc (size_t size) (size_t ist ein Datentyp, der architekturspezifisch für "1Byte" steht.) Diese Funktion dient zum Allokieren von Speicherplatz der angegebenen Größe und liefert die Anfangsadresse des allokierten Blocks als generic- Pointer. type *p;... p = (type *) malloc (sizeof (type)); malloc wird dazu verwendet, Speicherplatz für ein Datenobjekt des Bezugstyps von p (Bezugsvariable) einzurichten und läßt p auf diesen Speicherplatz zeigen. Beispiel: int *p, p = Null; p = (int *) malloc (sizeof (int)); p Datenobjekt vom Typ int 6. Die Programmiersprache C 6-124

125 Operationen auf Zeigern (8) Der unäre Operator sizeof wird dabei verwendet, um die Größe des zu allokierenden Speicherplatzes anzugeben. sizeof Objekt sizeof (Typname) z.b. sizeof (char) = 1 liefert die Größe des angegebenen Speicherobjekts (z.b. Variable) in "Byte". liefert die Größe des angegebenen Typs in "Byte". Zu Allokierung mehrerer gleichartiger Objekte am Stück gibt es eine spezielle Funktion: void * calloc (size_t nitems, size_t size) calloc reserviert für "nitems" Objekte der Größe "size" Speicherplatz. Diese Funktion ist insbesondere für das dynamische Erzeugen eines Vektors interessant. Beispiel p = calloc (7, sizeof (int)); 6. Die Programmiersprache C 6-125

126 Operationen auf Zeigern (9) e) Löschen eines Datenobjekts, auf das der Zeiger zeigt free (p); Der Speicherplatz für das Datenobjekt, auf das p zeigt, wird freigegeben. Der Wert von p ist anschließend undefiniert. Merke Die Lebensdauer von Bezugsvariablen wird vom Programmierer explizit durch malloc und free bestimmt. Sie ist nicht an die Blockstruktur eines Programms gebunden. Die Lebensdauer der Zeigervariablen selbst folgt dagegen der dynamischen Blockstruktur, wie die aller anderen Variablen auch. 6. Die Programmiersprache C 6-126

127 Operationen auf Zeigern (10) f) Vergleich von Zeigern Alle Vergleichsoperatoren sind auch auf Zeigern möglich, aber nicht immer ist das Ergebnis sinnvoll. Wenn p1 und p2 auf Elemente im gleichen linearen Adreßprogramm zeigen, dann sind Vergleiche wie ==,!=, <, >, <=, >= etc sinnvoll. Insbesondere ist dies bei einem Vektor von Elementen der Fall. Beispiel: Seien p1 und p2 Zeiger auf Elemente eines Vektors (array oder calloc). p1 < p2 gilt, wenn p1 auf ein früheres Element im Vektor zeigt als p2 Sind p1 und p2 jedoch nicht Elemente des gleichen Vektors, ist das Ergebnis i.d.r. nicht sinnvoll. 6. Die Programmiersprache C 6-127

128 Operationen auf Zeigern (11) g) Arithmetik mit Zeigern Addition und Subtraktion ganzzahliger Werte ist auf Zeigern erlaubt. Beispiel p += n p++ p-- setzt p auf die Adresse des n-ten Objektes nach dem Objekt, auf das p momentan zeigt, (nicht n-tes Byte!) setzt p auf die Adresse des nächsten Objektes setzt p auf die Adresse des vorherigen Objektes Merke Alle anderen Operationen mit Zeigern sind verboten: wie Addition, Multiplikation, Division oder Subtraktion zweier Zeiger, Bitoperationen oder Addition von Gleitpunktwerten. (Leider lassen manche Compiler solche Operationen trotzdem zu. Sie sind aber nicht standardkonform und sollten deshalb auch nicht eingesetzt werden.) Abgesehen von "void *" sollte ohne explizite Umwandlungsoperatoren kein Zeiger auf einen Datentyp an einen Zeiger auf einen anderen Datentyp zugewiesen werden. 6. Die Programmiersprache C 6-128

2. Datentypen und Deklarationen

2. Datentypen und Deklarationen 2. Datentypen und Deklarationen Programm = Datenstrukturen+Kontrollstruktur Programme verarbeiten Daten. Daten werden in C durch Datenstrukturen aus verschiedenen Datentypen beschrieben. Es gibt (wie in

Mehr

6. Unterprogramme 6-1

6. Unterprogramme 6-1 6. Unterprogramme 6.1 Prozeduren und Funktionen 6.2 Deklaration und Aufruf 6.3 Call-by-Value / Call-by-Reference 6.4 Standardfunktionen in C 6.5 Gültigkeitsbereich von Namen 6.6 Rekursion 6. Unterprogramme

Mehr

4. Ablaufsteuerung (Kontrollstrukturen) 4.1 Anweisungen 4.2 Selektion (bedingte Anweisung) 4.3 Iteration 4.4 Flussdiagramm (Programmablaufplan)

4. Ablaufsteuerung (Kontrollstrukturen) 4.1 Anweisungen 4.2 Selektion (bedingte Anweisung) 4.3 Iteration 4.4 Flussdiagramm (Programmablaufplan) 4. Ablaufsteuerung (Kontrollstrukturen) 4.1 Anweisungen 4.2 Selektion (bedingte Anweisung) 4.3 Iteration 4.4 Flussdiagramm (Programmablaufplan) 4. Ablaufsteuerung 4-1 4.1 Anweisungen Ein Programm besteht

Mehr

4. Ablaufsteuerung (Kontrollstrukturen)

4. Ablaufsteuerung (Kontrollstrukturen) 4. Ablaufsteuerung (Kontrollstrukturen) 4.1 Anweisungen 4.2 Selektion (bedingte Anweisung) 4.3 Iteration 4.4 Flussdiagramm (Programmablaufplan) 4. Ablaufsteuerung 4-1 4.1 Anweisungen Ein Programm besteht

Mehr

Dr. Monika Meiler. Inhalt

Dr. Monika Meiler. Inhalt Inhalt 3 C-Ausdrücke...3-2 3.1 Arithmetische Ausdrücke...3-3 3.2 Wertzuweisungen...3-5 3.3 Inkrementieren und Dekrementieren...3-6 3.4 Logische Ausdrücke (Bedingungen)...3-7 3.5 Bedingte Ausdrücke...3-8

Mehr

4.2 Programmiersprache C

4.2 Programmiersprache C 4.2.1. Elementare Datentypen (signed) int, unsigned int, (signed) short (int), unsigned short (int), (signed) long (int), unsigned long (int) Elementare Datentypen für ganze Zahlen mit oder ohne Vorzeichen.

Mehr

Java I Vorlesung Imperatives Programmieren

Java I Vorlesung Imperatives Programmieren Java I Vorlesung 2 Imperatives Programmieren 3.5.2004 Variablen -- Datentypen -- Werte Operatoren und Ausdrücke Kontrollstrukturen: if Imperatives Programmieren Im Kern ist Java eine imperative Programmiersprache.

Mehr

C-Programmierung: Ausdrücke und Operatoren#Division.2F

C-Programmierung: Ausdrücke und Operatoren#Division.2F C-Programmierung: Ausdrücke und Operatoren#Division.2F http://de.wikibooks.org/wiki/c-programmierung:_ausdrücke_und_operatoren#division_.2f This Book Is Generated By Wb2PDF using RenderX XEP, XML to PDF

Mehr

Programmieren I. Kapitel 5. Kontrollfluss

Programmieren I. Kapitel 5. Kontrollfluss Programmieren I Kapitel 5. Kontrollfluss Kapitel 5: Kontrollfluss Ziel: Komplexere Berechnungen im Methodenrumpf Ausdrücke und Anweisungen Fallunterscheidungen (if, switch) Wiederholte Ausführung (for,

Mehr

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08 Kapitel 4 Programmierkurs Birgit Engels, Anna Schulze Wiederholung Kapitel 4 ZAIK Universität zu Köln WS 07/08 1 / 23 2 Datentypen Arten von Datentypen Bei der Deklaration einer Variablen(=Behälter für

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Dynamische Datenobjekte Pointer/Zeiger, Verkettete Liste Eigene Typdefinitionen 1 Zeigeroperatoren & und * Ein Zeiger ist die Speicheradresse irgendeines Objektes. Eine

Mehr

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++ 1. Teil 11. April 2012 Organisatorisches MÜNSTER Übung zur Vorlesung Wissenschaftliches

Mehr

RO-Tutorien 3 / 6 / 12

RO-Tutorien 3 / 6 / 12 RO-Tutorien 3 / 6 / 12 Tutorien zur Vorlesung Rechnerorganisation Christian A. Mandery WOCHE 2 AM 06./07.05.2013 KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft

Mehr

Programmierung mit C Zeiger

Programmierung mit C Zeiger Programmierung mit C Zeiger Zeiger (Pointer)... ist eine Variable, die die Adresse eines Speicherbereichs enthält. Der Speicherbereich kann... kann den Wert einer Variablen enthalten oder... dynamisch

Mehr

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften Programmiertechnik Teil 4 C++ Funktionen: Prototypen Overloading Parameter C++ Funktionen: Eigenschaften Funktionen (Unterprogramme, Prozeduren) fassen Folgen von Anweisungen zusammen, die immer wieder

Mehr

2. Programmierung in C

2. Programmierung in C 2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten Operatoren, Ausdrücke und Anweisungen Kontrollstrukturen (Steuerfluss)

Mehr

Projekt 3 Variablen und Operatoren

Projekt 3 Variablen und Operatoren Projekt 3 Variablen und Operatoren Praktisch jedes Programm verarbeitet Daten. Um mit Daten programmieren zu können, muss es Möglichkeiten geben, die Daten in einem Programm zu verwalten und zu manipulieren.

Mehr

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter}); S. d. I.: Programieren in C Folie 7-1 7 Funktionen 7.1 Definition Prototyp-Syntax: Speicherklasse Typ Name (formale Parameter); der Funktions-Prototyp deklariert eine Funktion, d.h. er enthält noch nicht

Mehr

RO-Tutorien 15 und 16

RO-Tutorien 15 und 16 Tutorien zur Vorlesung Rechnerorganisation Tutorienwoche 2 am 04.05.2011 1 Christian A. Mandery: KIT Universität des Landes Baden-Württemberg und nationales Grossforschungszentrum in der Helmholtz-Gemeinschaft

Mehr

Operatoren und Ausdrücke

Operatoren und Ausdrücke Operatoren und Ausdrücke Zuweisungsoperator Arithmetische Operatoren Vergleichsoperatoren Logische Operatoren und Ausdrücke Implizite Typ-Umwandlung Rangordnung der Operatoren / Reihenfolge der Auswertung

Mehr

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22 C++ Teil 2 Sven Groß IGPM, RWTH Aachen 16. Apr 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 2 16. Apr 2015 1 / 22 Themen der letzten Vorlesung Hallo Welt Elementare Datentypen Ein-/Ausgabe Operatoren Sven

Mehr

5. Zeiger und komplexe Datenstrukturen

5. Zeiger und komplexe Datenstrukturen 5.1 Zeiger (pointer) 5.2 Vektoren (arrays) 5.3 Zeichenketten (strings) 5.4 Zeiger auf Funktionen 5.5 Komplexe (structs) 5-1 5.1 Zeiger (pointer) Ein Zeiger (pointer) ist ein Verweis auf ein anderes Datenobjekt.

Mehr

Einheit Datentypen in der Programmiersprache C Schwerpunkt: Elementare (arithmetische) Datentypen

Einheit Datentypen in der Programmiersprache C Schwerpunkt: Elementare (arithmetische) Datentypen Einheit Datentypen in der Programmiersprache C Schwerpunkt: Elementare (arithmetische) Datentypen Kurs C/C++ Programmierung, WS 2008/2009 Dipl.Inform. R. Spurk Arbeitsgruppe Programmierung FR 6.2 Informatik

Mehr

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen 16OH21005 gefördert. Die Verantwortung für den Inhalt dieser

Mehr

JAVA-Datentypen und deren Wertebereich

JAVA-Datentypen und deren Wertebereich Folge 8 Variablen & Operatoren JAVA 8.1 Variablen JAVA nutzt zum Ablegen (Zwischenspeichern) von Daten Variablen. (Dies funktioniert wie beim Taschenrechner. Dort können Sie mit der Taste eine Zahl zwischenspeichern).

Mehr

Algorithmen & Programmierung. Ausdrücke & Operatoren (1)

Algorithmen & Programmierung. Ausdrücke & Operatoren (1) Algorithmen & Programmierung Ausdrücke & Operatoren (1) Ausdrücke Was ist ein Ausdruck? Literal Variable Funktionsaufruf Ausdruck, der durch Anwendung eines einstelligen (unären) Operators auf einen Ausdruck

Mehr

Typ : void* aktuelle Parameter Pointer von beliebigem Typ

Typ : void* aktuelle Parameter Pointer von beliebigem Typ 2. Funktionen - Prototypvereinbarung typangabe funktionsname(parameterliste); - Funktionsdefinition typ funktionsname(parameterliste){ Anweisung - Funktionstyp -> Typ der Funktionswertes zulaessige Typangaben

Mehr

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke Java 2 Markus Reschke 07.10.2014 Datentypen Was wird gespeichert? Wie wird es gespeichert? Was kann man mit Werten eines Datentyps machen (Operationen, Methoden)? Welche Werte gehören zum Datentyp? Wie

Mehr

Unterlagen. CPP-Uebungen-08/

Unterlagen.  CPP-Uebungen-08/ Unterlagen http://projects.eml.org/bcb/people/ralph/ CPP-Uebungen-08/ http://www.katjawegner.de/lectures.html Kommentare in C++ #include /* Dies ist ein langer Kommentar, der über zwei Zeilen

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 12/13. Kapitel 3. Grunddatentypen, Ausdrücke und Variable

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 12/13. Kapitel 3. Grunddatentypen, Ausdrücke und Variable 1 Kapitel 3 Grunddatentypen, Ausdrücke und Variable 2 Eine Datenstruktur besteht aus Grunddatentypen in Java einer Menge von Daten (Werten) charakteristischen Operationen Datenstrukturen werden mit einem

Mehr

Algorithmen zur Datenanalyse in C++

Algorithmen zur Datenanalyse in C++ Algorithmen zur Datenanalyse in C++ Hartmut Stadie 16.04.2012 Algorithmen zur Datenanalyse in C++ Hartmut Stadie 1/ 39 Einführung Datentypen Operatoren Anweisungssyntax Algorithmen zur Datenanalyse in

Mehr

RO-Tutorien 17 und 18

RO-Tutorien 17 und 18 RO-Tutorien 17 und 18 Tutorien zur Vorlesung Rechnerorganisation Christian A. Mandery TUTORIENWOCHE 2 AM 10.05.2012 KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der

Mehr

4.2 Gleitkommazahlen. Der Speicherbedarf (in Bits) ist üblicherweise. In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen

4.2 Gleitkommazahlen. Der Speicherbedarf (in Bits) ist üblicherweise. In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen . Gleitkommazahlen In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen Umrechnen von Einheiten und Währungen Jede Zahl x Q mit x 0 lässt sich folgendermaßen schreiben: x = s m e mit

Mehr

Inhalt. 1 Einstieg in die Welt von C Erste Schritte in C 31. Vorwort... 15

Inhalt. 1 Einstieg in die Welt von C Erste Schritte in C 31. Vorwort... 15 Vorwort... 15 1 Einstieg in die Welt von C 17 1.1 Die Sprache C... 17 1.2 Die C-Standardbibliothek... 18 1.3 Die nötigen Werkzeuge für C... 21 1.4 Übersetzen mit der Entwicklungsumgebung... 23 1.5 Übersetzen

Mehr

2.1 Fundamentale Typen

2.1 Fundamentale Typen 2. Elementare Typen 2.1 Fundamentale Typen C++ stellt die wichtigsten Datentypen mit passender Form der Abspeicherung und zugehörigen Rechenoperationen zur Verfügung : Boolscher Datentyp (bool) für logische

Mehr

2. Programmierung in C

2. Programmierung in C 2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten, Operatoren und Ausdrücke Anweisungen und Kontrollstrukturen (Steuerfluss)

Mehr

Kapitel 3. Grunddatentypen, Ausdrücke und Variable

Kapitel 3. Grunddatentypen, Ausdrücke und Variable Kapitel 3 Grunddatentypen, Ausdrücke und Variable Grunddatentypen, Ausdrücke und Variable 1 Eine Datenstruktur besteht aus Grunddatentypen in Java einer Menge von Daten (Werten) charakteristischen Operationen

Mehr

Operatoren (1) Operatoren (2)

Operatoren (1) Operatoren (2) Operatoren (1) Binäre Operatoren + - * / % < = > & ^ > && Addition Subtraktion Multiplikation Division Divisionsrest Vergl. auf kleiner Vergl. auf kleiner oder gleich Vergl. auf gleich Vergl.

Mehr

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML. JavaScript JavaScript wird direkt in HTML-Dokumente eingebunden. Gib folgende Zeilen mit einem Texteditor (Notepad) ein: (Falls der Editor nicht gefunden wird, öffne im Browser eine Datei mit der Endung

Mehr

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung C Sprachelemente für Übung 2 Typumwandlungen (type casts) Bei Ausdrücken, in denen Operanden mit unterschiedlichem Typ vorkommen, werden diese vom Compiler vor der Ausführung automatisch in einen gemeinsamen

Mehr

Programmierkurs C++ Variablen und Datentypen

Programmierkurs C++ Variablen und Datentypen Programmierkurs C++ Variablen und Datentypen Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer #2 Überblick Welche Datentypen gibt es in

Mehr

Die einfachsten Anweisungen

Die einfachsten Anweisungen 2 Die einfachsten Anweisungen 2-1 Inhalt Die einfachsten Anweisungen Einführung Datentypen Arithmetische Operatoren Mathematische Funktionen Mehrfache Zuweisungen Übungsaufgaben Einführung Wir wollen unser

Mehr

Inhalt. 4.5 Arbeit mit Zeigern (engl. Pointer)

Inhalt. 4.5 Arbeit mit Zeigern (engl. Pointer) Inhalt Inhalt: 4. Programmiersprache C 4.1 Programmaufbau in C 4.2 Basisdatentypen und einfache Anweisungen 4.3 Steuerfluss-Konstrukte 4.4 Arbeit mit indizierten Größen (Felder) 4.5 Arbeit mit Zeigern

Mehr

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny 9. Zeiger Arbeitsspeicher / Adressen Der Arbeitsspeicher des Computers (RAM) besteht aus einem Feld von Speicherzellen, beginnend bei Adresse

Mehr

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe Was sind Operatoren Ein Operator ist eine in die Programmiersprache eingebaute Funktion, die

Mehr

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom Einstieg in die Informatik mit Java, Vorlesung vom 2.5.07 Übersicht 1 2 definition 3 Parameterübergabe, aufruf 4 Referenztypen bei 5 Überladen von 6 Hauptprogrammparameter 7 Rekursion bilden das Analogon

Mehr

Programmieren in C / C++ Grundlagen C 2

Programmieren in C / C++ Grundlagen C 2 Programmieren in C / C++ Grundlagen C 2 Hochschule Fulda FB AI Wintersemester 2016/17 http://c.rz.hs-fulda.de Peter Klingebiel, HS Fulda, FB AI Anweisung / Ausdruck 1 Programm setzt sich aus vielen Anweisungen

Mehr

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2 Java Einführung VARIABLEN und DATENTYPEN Kapitel 2 Inhalt dieser Einheit Variablen (Sinn und Aufgabe) Bezeichner Datentypen, Deklaration und Operationen Typenumwandlung (implizit/explizit) 2 Variablen

Mehr

3. Java - Sprachkonstrukte I

3. Java - Sprachkonstrukte I Namen und Bezeichner Ein Programm (also Klasse) braucht einen Namen 3. Java - Sprachkonstrukte I Namen und Bezeichner, Variablen, Zuweisungen, Konstanten, Datentypen, Operationen, Auswerten von Ausdrücken,

Mehr

1. Referenzdatentypen: Felder und Strings

1. Referenzdatentypen: Felder und Strings 1. Felder und Strings Eigenschaften von Referenzdatentypen 1. Referenzdatentypen: Felder und Strings Referenzdatentypen sind Konstrukte, mit deren Hilfe wir aus einfachen Datentypen neue eigene Typen erzeugen

Mehr

1. Referenzdatentypen: Felder und Strings. Referenz- vs. einfache Datentypen. Rückblick: Einfache Datentypen (1) 4711 r

1. Referenzdatentypen: Felder und Strings. Referenz- vs. einfache Datentypen. Rückblick: Einfache Datentypen (1) 4711 r 1. Felder und Strings Eigenschaften von Referenzdatentypen 1. Referenzdatentypen: Felder und Strings Referenzdatentypen sind Konstrukte, mit deren Hilfe wir aus einfachen Datentypen neue eigene Typen erzeugen

Mehr

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff Programmieren in C Eine Einführung in die Programmiersprache C Prof. Dr. Nikolaus Wulff Textausgabe per printf Die Funktion printf ist kein Bestandteil der C Sprache sondern gehört zur C Bibliothek. printf

Mehr

L6. Operatoren und Ausdrücke

L6. Operatoren und Ausdrücke L6. Operatoren und Ausdrücke 1. Arithmetische Operatoren: +, -, *, /, %, --, ++ 2. Zuweisung-Operatoren: =, +=, -=, *=, /= 3. Vergleichsoperatoren: =, ==,!= 4. Logische Operatoren:!, &&, 5.

Mehr

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen Programmieren I Martin Schultheiß Hochschule Darmstadt Wintersemester 2011/2012 1 / 25 Operatoren für elementare Datentypen Bedingte Schleifen 2 / 25 Zuweisungsoperator Die Zuweisung von Werten an Variablen

Mehr

C- Kurs 03 Ausdrücke und Operatoren

C- Kurs 03 Ausdrücke und Operatoren C- Kurs 03 Ausdrücke und Operatoren Dipl.- Inf. Jörn Hoffmann jhoffmann@informadk.uni- leipzig.de Universität Leipzig InsDtut für InformaDk Technische InformaDk Ausdrücke Institut für Informatik Ausdrücke

Mehr

4.4 Imperative Algorithmen Prozeduren

4.4 Imperative Algorithmen Prozeduren 4.4.2 Prozeduren Der Wert eines Ausdrucks u in Zustand z Z lässt sich damit auch leicht definieren (jetzt W Z statt W σ ) Dazu erweitern wir die rekursive Definition von Folie 57 (Wert eines Ausdrucks):

Mehr

Variablen, Konstanten und Datentypen

Variablen, Konstanten und Datentypen Informatik für Elektrotechnik und Informationstechnik Benedict Reuschling benedict.reuschling@h-da.de Hochschule Darmstadt Fachbereich Informatik WS 2013/14 Variablen, Konstanten und Datentypen Überblick

Mehr

C-Grundlagen. zur Programmierung des MicroControllersystems MiCoWi

C-Grundlagen. zur Programmierung des MicroControllersystems MiCoWi 1. Datentypen C-Grundlagen zur Programmierung des MicroControllersystems MiCoWi Die Grafiken und Beispiele wurden dem Buch C von A bis z von Jürgen Wolf entnommen. Es werden hier die ANSI-Festlegungen

Mehr

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme Bisher Datentypen: einfach Zahlen, Wahrheitswerte, Zeichenketten zusammengesetzt Arrays (Felder) zur Verwaltung mehrerer zusammengehörender Daten desselben Datentypes eindimensional, mehrdimensional, Array-Grenzen

Mehr

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Martin Unold INFORMATIK. Geoinformatik und Vermessung Wiederholung So sieht ein leeres Java-Programm aus public class Programmname { public static void main (String[] args) { // Hier stehen die Anweisungen } } Beispiele für Anweisungen Wiederholung Ausgabe

Mehr

Programmieren in C. C Syntax Datentypen, Operatoren und Kontrollstrukturen. Prof. Dr. Nikolaus Wulff

Programmieren in C. C Syntax Datentypen, Operatoren und Kontrollstrukturen. Prof. Dr. Nikolaus Wulff Programmieren in C C Syntax Datentypen, Operatoren und Kontrollstrukturen Prof. Dr. Nikolaus Wulff Elementare Typen Imperative und objektorientierte Programmiersprachen bieten i.d.r. einen Satz elementarer

Mehr

Wertebereich und Genauigkeit der Zahlendarstellung

Wertebereich und Genauigkeit der Zahlendarstellung Wertebereich und Genauigkeit der Zahlendarstellung Sowohl F als auch C kennen bei ganzen und Floating Point-Zahlen Datentypen verschiedener Genauigkeit. Bei ganzen Zahlen, die stets exakt dargestellt werden

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 29 Einstieg in die Informatik mit Java Weitere Ausdrücke Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 29 1 Überblick 2 Kombinierte Zuweisungsoperatoren 3 Vergleichsoperatoren

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 25.4.07, Anweisungen Übersicht 1 Ausdrucksanweisung 2 Einfache Ausgabeanweisung 3 Einfache Eingabeanweisung, Vorbereitungen 4 Verbundanweisung 5 Bedingte Anweisung 6 Auswahlanweisung 7 for

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 27 Einstieg in die Informatik mit Java Klassen als Datenstrukturen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 27 1 Überblick: Klassen als Datenstruktur 2 Vereinbarung

Mehr

Die Sprache C# Datentypen, Speicherverwaltung Grundelemente der Sprache. Dr. Beatrice Amrhein

Die Sprache C# Datentypen, Speicherverwaltung Grundelemente der Sprache. Dr. Beatrice Amrhein Die Sprache C# Datentypen, Speicherverwaltung Grundelemente der Sprache Dr. Beatrice Amrhein Überblick Speicherverwaltung: Stack und Heap Ein- und Ausgabe über die Console Variablen und Operatoren Parameter

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf  Seite 1 von 29 Kapitel 2 Einführung in C++ Seite 1 von 29 C++ Zeichensatz - Buchstaben: a bis z und A bis Z. - Ziffern: 0 bis 9 - Sonderzeichen: ; :,. # + - * / % _ \! < > & ^ ~ ( ) { } [ ]? Seite 2 von 29 Höhere Elemente

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 27 Einstieg in die Informatik mit Java Methoden / Funktionen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 27 1 Überblick 2 Zweck von Methoden 3 Methodendefinition

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 47 Einstieg in die Informatik mit Java Anweisungen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 47 1 Ausdrucksanweisung 2 Einfache Ausgabeanweisung 3 Einfache Eingabeanweisung,

Mehr

S. d. I.: Programieren in C Folie 4-1. im Gegensatz zu Pascal gibt es in C kein Schlüsselwort "then"

S. d. I.: Programieren in C Folie 4-1. im Gegensatz zu Pascal gibt es in C kein Schlüsselwort then S. d. I.: Programieren in C Folie 4-1 4 Anweisungen 4.1 if-anweisung 1) if (Ausdruck) 2) if (Ausdruck) } else im Gegensatz zu Pascal gibt es in C kein Schlüsselwort "then" es wird nur der numerische Wert

Mehr

Grundlagen der Informatik 2. Operatoren

Grundlagen der Informatik 2. Operatoren 2. Operatoren Referenzen Typumwandlungen Vorrangregeln Kommentare Grundlagen der Informatik (Alex Rempel) 1 Ausdruck (z.b. "x = 34 + y;") Folge von Operatoren und Operanden Operatoren Arithmetische Operatoren

Mehr

Verwendung Vereinbarung Wert einer Funktion Aufruf einer Funktion Parameter Rekursion. Programmieren in C

Verwendung Vereinbarung Wert einer Funktion Aufruf einer Funktion Parameter Rekursion. Programmieren in C Übersicht Funktionen Verwendung Vereinbarung Wert einer Funktion Aufruf einer Funktion Parameter Rekursion Sinn von Funktionen Wiederverwendung häufig verwendeter nicht banaler Programmteile Wiederverwendung

Mehr

Sprachkonstrukte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Sprachkonstrukte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg Sprachkonstrukte Einführung in Java Folie 1 von 20 12. Mai 2011 Ivo Kronenberg Inhalt Kommentare Identifier (Bezeichner) Variablen Numerische Ausdrücke und Typen Kontrollstrukturen Verzweigungen Bedingungen

Mehr

Die Programmiersprache C

Die Programmiersprache C Die Programmiersprache C höhere Programmiersprache (mit einigen Assembler-ähnlichen Konstrukten) gut verständliche Kommandos muss von Compiler in maschinenlesbaren Code (Binärdatei) übersetzt werden universell,

Mehr

Zeiger (engl. Pointer)

Zeiger (engl. Pointer) Zeiger (engl. Pointer) Zeiger Ein Zeiger (engl. Pointer) speichert eine Adresse, unter der ein Wert im Speicher des Computers gespeichert werden kann. Eine Variable im Gegensatz speichert einen Wert. Der

Mehr

F Zeiger, Felder und Strukturen in C

F Zeiger, Felder und Strukturen in C F Zeiger, Felder und Strukturen in C F Zeiger, Felder und Strukturen in C F.1 Zeiger(-Variablen) 1 Einordnung Konstante: Bezeichnung für einen Wert a 0110 0001 Variable: Bezeichnung eines Datenobjekts

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 6.11.07, Weitere Anweisungen Übersicht 1 Verbundanweisung 2 Bedingte Anweisung 3 Auswahlanweisung 4 for Schleife 5 while Schleife 6 do Schleife 7 break Anweisung 8 continue Anweisung 9 Leere

Mehr

6 ZEIGER UND REFERENZEN - ALLGEMEINES

6 ZEIGER UND REFERENZEN - ALLGEMEINES 6 ZEIGER UND REFERENZEN - ALLGEMEINES Leitideen: Zeiger sind Adressen mit zusätzlicher Typinformation über das dort gespeicherte Objekt. Die Vereinbarungssyntax soll der Ausdruckssyntax entsprechen und

Mehr

einlesen n > 0? Ausgabe Negative Zahl

einlesen n > 0? Ausgabe Negative Zahl 1 Lösungen Kapitel 1 Aufgabe 1.1: Nassi-Shneiderman-Diagramm quadratzahlen Vervollständigen Sie das unten angegebene Nassi-Shneiderman-Diagramm für ein Programm, welches in einer (äußeren) Schleife Integer-Zahlen

Mehr

Einführung in die Programmierung II. 5. Zeiger

Einführung in die Programmierung II. 5. Zeiger Einführung in die Programmierung II 5. Zeiger Thomas Huckle, Stefan Zimmer 16. 5. 2007-1- Bezüge als Objekte Bisher kennen wir als Bezüge (Lvalues) nur Variablennamen Jetzt kommt eine neue Sorte dazu,

Mehr

Modellierung und Programmierung 1

Modellierung und Programmierung 1 Modellierung und Programmierung 1 Prof. Dr. Sonja Prohaska Computational EvoDevo Group Institut für Informatik Universität Leipzig 4. November 2015 Administratives Zur Abgabe von Übungsaufgaben Nein, wir

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 26 Einstieg in die Informatik mit Java Methoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 26 1 Methoden 2 Methodendefinition 3 Parameterübergabe, Methodenaufruf

Mehr

8. Referenzen und Zeiger

8. Referenzen und Zeiger 8. Referenzen und Zeiger Motivation Variable werden in C++ an speziellen Positionen im Speicher abgelegt. An jeder Position befindet sich 1 Byte. Sie sind durchnummeriert beginnend bei 0. Diese Positionen

Mehr

3.2 Datentypen und Methoden

3.2 Datentypen und Methoden Kap03.fm Seite 217 Dienstag, 7. September 2010 1:48 13 3.2 Datentypen und Methoden 217 3.2 Datentypen und Methoden Wie bei vielen höheren Programmiersprachen gibt es auch in Java einfache und strukturierte

Mehr

GI Vektoren

GI Vektoren Vektoren Problem: Beispiel: viele Variablen vom gleichen Typ abspeichern Text ( = viele char-variablen), Ergebnisse einer Meßreihe ( = viele int-variablen) hierfür: Vektoren ( = Arrays = Feld ) = Ansammlung

Mehr

Java - Schleifen. Bedingung. wiederhole. Anweisung Anweisung Anweisung. Leibniz Universität IT Services Anja Aue

Java - Schleifen. Bedingung. wiederhole. Anweisung Anweisung Anweisung. Leibniz Universität IT Services Anja Aue Java - Schleifen Bedingung wiederhole ja Anweisung Anweisung Anweisung Leibniz Universität IT Services Anja Aue Anweisung int zahl; zahl = 2; zahl = zahl * 10; int zahl; ; Jede Anweisung endet mit einem

Mehr

PIC16 Programmierung in HITECH-C

PIC16 Programmierung in HITECH-C PIC16 Programmierung in HITECH-C Operatoren: Arithmetische Operatoren - binäre Operatoren + Addition - Subtraktion * Multiplikation / Division % Modulo + - * / sind auf ganzzahlige und reelle Operanden

Mehr

3. Anweisungen und Kontrollstrukturen

3. Anweisungen und Kontrollstrukturen 3. Kontrollstrukturen Anweisungen und Blöcke 3. Anweisungen und Kontrollstrukturen Mit Kontrollstrukturen können wir den Ablauf eines Programmes beeinflussen, z.b. ob oder in welcher Reihenfolge Anweisungen

Mehr

Die Sprache C# Datentypen, Speicherverwaltung Grundelemente der Sprache. Dr. Beatrice Amrhein

Die Sprache C# Datentypen, Speicherverwaltung Grundelemente der Sprache. Dr. Beatrice Amrhein Die Sprache C# Datentypen, Speicherverwaltung Grundelemente der Sprache Dr. Beatrice Amrhein Überblick Speicherverwaltung: Stack und Heap Ein- und Ausgabe über die Console Variablen und Operatoren Parameter

Mehr

Programmiersprachen Einführung in C

Programmiersprachen Einführung in C Programmiersprachen Einführung in C Teil 2: Prof. Dr. Unser erstes C-Programm int main (int argc, char *argv[]) int i; int sum = 0; for (i = 0; i

Mehr

Tag 5. Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme)

Tag 5. Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme) Tag 5 Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Übersicht Methoden Deklaration

Mehr

2. Programmierung in C

2. Programmierung in C 2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten Operatoren, Ausdrücke und Anweisungen Kontrollstrukturen (Steuerfluss)

Mehr

Tutorium Rechnerorganisation

Tutorium Rechnerorganisation Woche 2 Tutorien 3 und 4 zur Vorlesung Rechnerorganisation 1 Christian A. Mandery: KIT Universität des Landes Baden-Württemberg und nationales Grossforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu

Mehr

Java: Eine kurze Einführung an Beispielen

Java: Eine kurze Einführung an Beispielen Java: Eine kurze Einführung an Beispielen Quellcode, javac und die JVM Der Quellcode eines einfachen Java-Programms besteht aus einer Datei mit dem Suffix.java. In einer solchen Datei wird eine Klasse

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 25.4.07, Ausdrücke Übersicht 1 Die wichtigsten arithmetischen Ausdrücke Arithmetische Operatoren Inkrement und Dekrementoperatoren Zuweisungsoperator Mathematische Standardfunktionen Vergleichsoperatoren

Mehr

Intensivübung zu Algorithmen und Datenstrukturen

Intensivübung zu Algorithmen und Datenstrukturen Intensivübung zu Algorithmen und Datenstrukturen Silvia Schreier Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen Übersicht Programmierung Fallunterscheidung Flussdiagramm Bedingungen Boolesche

Mehr

Programmieren in C / C++ Grundlagen C 4

Programmieren in C / C++ Grundlagen C 4 Programmieren in C / C++ Grundlagen C 4 Hochschule Fulda FB AI Wintersemester 2016/17 http://c.rz.hs-fulda.de Peter Klingebiel, HS Fulda, FB AI Anweisungen Anweisung im allgemeinsten Sinn: Programmieren

Mehr

Einführung in die Informatik

Einführung in die Informatik Einführung in die Informatik Jochen Hoenicke Software Engineering Albert-Ludwigs-University Freiburg Sommersemester 2014 Jochen Hoenicke (Software Engineering) Einführung in die Informatik Sommersemester

Mehr

Vorsichtige Programmierer verwenden Inkrement- Operatoren nicht in komplizierteren Ausdrücken

Vorsichtige Programmierer verwenden Inkrement- Operatoren nicht in komplizierteren Ausdrücken Vorsichtige Programmierer verwenden Inkrement- Operatoren nicht in komplizierteren Ausdrücken Aufgabe 1.60 a) Welchen Wert erhält die boolesche Variable z in folgendem Beispiel? int i = 2, j = 5; boolean

Mehr