C- Syntax. Bestandteile der Sprache C: Ausdrücke Anweisungen.

Slides:



Advertisements
Ähnliche Präsentationen
Hier einige Hieroglyphen:
Advertisements

3. Operatoren und Ausdrücke
Algebraische Zahlen: Exaktes Rechnen mit Wurzeln
Invariante und Algorithmenentwurf
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Frame-Logik Eine Einführung Andreas Glausch.
Zusammenfassung der Vorwoche
Programmieren in Logik
10. Grundlagen imperativer Programmiersprachen
Lösung 7.1 Syntax und Semantik
Imperative Programmierung
Syntax der Aussagenlogik
Verifizieren versus Berechnen
Prolog und Prädikatenlogik I
Der Einstieg in das Programmieren
Scratch Der Einstieg in das Programmieren. Scatch: Entwicklungsumgebung Prof. Dr. Haftendorn, Leuphana Universität Lüneburg,
Algorithmus. Ein Kochrezept, zum Beispiel: Kartoffelbrei.
Datentyp- umwandlung. Literale sind: Bezeichner mit einem festen Wert wie z.B:
Strukturen. In einer Struktur kann eine beliebige Anzahl von Komponenten (Daten) mit unterschiedlichen Datentypen (im Gegensatz zu Feldern) zusammengefaßt.
ARRAY oder FELD oder VEKTOR
Der Präprozessor. Bevor der Compiler das Programm in Maschinencode übersetzt (nur dieser kann von der CPU, dem Herz des Computers, bearbeitet werden)
Java- Syntax.
Robotik mit LEGO Mindstorms
Lösen einer Gleichung Hinweis: 1. Anweisung - lesen - ausführen
Fakten, Regeln und Anfragen
Parsing regulärer Ausdrücke
Imperative Programmierung
Beispiele für Ausdrucksalgebren
Fantasieregel Die Aussagenlogik
Boolesche Ausdrücke Ist der Rückgabewert eines Ausdrucks vom Typ boolean, so wird dieser als Boolescher Ausdruck bezeichnet (nach dem Mathematiker George.
Java-Kurs - 2. Übung Entwicklungsumgebung Struktur von Programmen
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Programm besteht aus mehreren Bestandteilen: Schlüsselwörter Sonderzeichen Bezeichner Kommentare Texte.
PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen.
Semantische Fehler Seminar im Grundstudium WS2002/2003:
Ralf KüstersDagstuhl 2008/11/30 2 Ralf KüstersDagstuhl 2008/11/30 3.
Einführung in die Programmiersprache C 1
Übungsaufgaben für Microsoft Excel
Hartmut Klauck Universität Frankfurt WS 06/
Agenda für heute, 19. Januar 2007 Informationssysteme: ETH-BibliothekInformationssysteme: ETH-Bibliothek Logische Verknüpfungen als Grundlage für die Informationsgewinnung.
Terme mit der TK lösen Wozu das Ganze? 1 TK einrichten 2
Multiplikation mit Klammern
Datentypen: integer, char, string, boolean
Agenda für heute, 7. April, 2005 Bedingte ProgrammausführungBedingte Programmausführung Algorithmische Grundlagen Vergleichsoperatoren, Wahrheitswerte.
Daten verwalten (2) Agenda für heute, 29. April 2009
Daten verwalten (2) Agenda für heute, 30. April 2008
Programmieren in C Grundlagen C 2
Agenda für heute, 20. November 2009
Agenda für heute, 21. November 2008
PHP: Operatoren und Kontrollstrukturen
Hochschule Fulda – FB ET Sommersemester 2014
Programmieren in C Grundlagen C 2
Programmierparadigmen
Vertauschungs-, Verbindungs-, Verteilungsgesetz
Informatik Formale Sprachen 1.2 Grammatiken formaler Sprachen
eine Präsentation von Christian Preyer
Übersicht Nachtrag zu Ausdrücken
7. Formale Sprachen und Grammatiken
Anführungszeichen?! echo 'Apfel$atf'; // ergibt: Apfel$aft
Kapitel 4: Aussagen-, Prädikatenlogik
Grundlagen der mathematischen Logik
(Wirtschafts-)mathematik I Mathe im Wandel der Zeit Volksschule 1960: Ein Bauer verkauft einen Sack Kartoffeln für 50 DM. Die Erzeugerkosten betragen 40.
Rechnen mit negativen Klammern
Variablen und Datentypen
Reihenfolge der Operatoren
Namensräume (namespaces). verwendet man umfangreiche eigene und fremde Bibliotheken (Sammlungen von Funktionen) so ist die Wahrscheinlichkeit groß, daß.
TRUE und FALSE in C Der Wert 0 steht für FALSE Jeder von 0 verschiedene Wert steht für TRUE FALSE wird als 0 dargestellt TRUE wird als 1 dargestellt.
Variablen und Operatoren. C++ Teil 2: Grundstrukturen Variablen Operatoren Kontrollstrukturen Funktionen Header-Dateien Pointer und Referenzen.
Datentypen: integer, char, string, boolean
Datentypen: integer, char, string, boolean
Datentyp- umwandlung.
 Präsentation transkript:

C- Syntax

Bestandteile der Sprache C: Ausdrücke Anweisungen

Ausdruck

Ein Ausdruck ist eine Folge von Operatoren und Operanden. Ein Ausdruck ist - grob gesagt - ein Term oder eine mathematische Formel. Jeder Ausdruck hat einen Wert !!

Es gibt folgende Ausdrücke: - arithmetische Ausdrücke - relationale und logische Ausdrücke - Zuweisungsausdrücke

Arithmetische Ausdrücke

Beispiele: In allen folgenden Beispielen wird stillschweigend vorausgesetzt, dass die benutzten Variablen alle vorher deklariert wurden!!!

3 Literal (Konstante), Wert des Ausdrucks: Wert des Ausdrucks: 6 3+ kein Ausdruck (syntaktisch falsch) x Variable, Wert des Ausdrucks: unbekannt, da der Wert von x in diesem Zusammenhang dem Programmierer nicht bekannt ist. 2x keine Variable: Variablenname darf nicht mit einer Ziffer beginnen ! (syntaktisch falsch)

3+x-2x kein Ausdruck, da * in 2x fehlt (syntaktisch falsch) x+3 x-y/b+3-(3+y)*4 Wert des Ausdrucks: unbekannt 27%4 ganzzahliger Rest bei der Division: 27 : 4 = 6 Rest 3, also Wert des Ausdrucks: 3 / bedeutet Division, zuerst werden Klammern ausgewertet, dann Punkt vor Strich Ausdruck, Wert des Ausdrucks: unbekannt

26%4 a++ erhöht a um 1, Wert des Ausdrucks: unbekannt b-- verringert b um 1, Wert des Ausdrucks: unbekannt ganzzahliger Rest bei der Division: 26 : 4 = 6 Rest 2, also Wert des Ausdrucks: 2 25%4 ganzzahliger Rest bei der Division: 25 : 4 = 6 Rest 1, also Wert des Ausdrucks: 1 24%4 ganzzahliger Rest bei der Division: 24 : 4 = 6 Rest 0, also Wert des Ausdrucks: 0

Relationale und logische Ausdrücke

Relationale und logische Ausdrücke sind wahr oder falsch

Kleiner Ausflug in die formale Logik

Die zusammengesetzte Aussage A UND B ist nur wahr, wenn A und B wahr sind, ansonsten ist sie falsch

Die zusammengesetzte Aussage A ODER B ist nur falsch, wenn A und B falsch sind, ansonsten ist sie wahr.

Die negierte Aussage NICHT A ist falsch, wenn A wahr ist und wahr, wenn A falsch ist.

Diese Zusammenhänge lassen sich auch mit einer sogenannten Wahrheitstafeln darstellen:

ABA und BA oder B WWWW WFFW FWFW FFFF

Anicht A WF FW

C kennt aber kein "wahr" oder "falsch", sondern: AusdruckWert falsch0 wahr1

C++ kennt aber "wahr" oder "falsch": AusdruckWert falschfalse wahrtrue

Beispiele:

0 < 5 8 > 9 x+3 >= 5 1 == 2 Wert: 0 1 != 3 Wert: 1 Wert: 0 Wert: 1 Wert hängt von x ab. mathematisches = mathematisches

4 < x < 7 Relationale Operatoren sind zweistellig und dürfen nur mit zwei Operanden arbeiten. Deswegen ist folgende Zeichenkette kein Ausdruck:

Logische Ausdrücke

Beispiele:

a && b x || y (x>0) && (x<10) !(x<y) logisches UND logisches ODER logisches NICHT

0 && 1 0 || 0 !0 !1 Wert: 0 Wert: 1 Wert: 0

Was macht der Compiler, wenn er Ausdrücke der folgenden Art auswerten soll ?

3 && 4 7 || 9.5 !17 !

C wertet wie folgt aus: AusdruckWert falsch0 wahr 0

Wert: 1 Wert: 0 3 && 4 7 || 9.5 !17 ! ungleich 0, also wahr, also Wert: 1 4 ungleich 0, also wahr, also Wert: 1

Operatoren Arithmetische Operatoren: + - * / %++-- Vergleichsoperatoren: >= == != Logische Operatoren: ! && || Bitweise Operatoren: ~& |

Zuweisungsausdrücke

Ein Zuweisungsausdruck enthält einen Zuweisungsoperator wie z.B. = += ++ --

Ein Zuweisungsausdruck ist ein Ausdruck, keine Anweisung, der eine Wirkung (Nebenwirkung) hat, nämlich die Zuweisung. Diese Zuweisung verändert den Wert der Variablen.

Da ein Zuweisungsausdruck ein Ausdruck ist, hat ein Zuweisungsausdruck also einen Wert !!!

Beispiele:

a = 17 x = 3+2*4 Wert des Ausdrucks : 17 Nebenwirkung: Wert der Variablen a ist 17 Wert des Ausdrucks : 11 Nebenwirkung: Wert der Variablen x ist 11 Punkt vor Strich. Dies bedeutet, dass dass z.B. die Multiplikation Priorität (=Vorrang) vor der Addition hat

y = x = 2 Wie wird der Wert diesen Ausdrucks berechnet ?

y = x = 2 Wert des Ausdrucks : 2 Nebenwirkung: Wert der Variablen y ist 2 Abarbeitung: von rechts nach links Wert des Ausdrucks : 2 Nebenwirkung: Wert der Variablen x ist 2 Warum Abarbeitung von rechts nach links? Weil dies in der Norm so festgelegt ist! Nähers dazu später! (Assoziativität = Auswertung eines Ausdrucks von rechts oder links)

y = x = 2 Weil links des Zuweisungszeichens (also =) eine Variable stehen muss. Aber warum macht diese Zuweisung Probleme? Dies ist noch syntaktisch korrekt, aber.... Wäre der Ausdruck syntaktisch korrekt, wenn Abarbeitung von links nach rechts geschehen würde? Hier steht aber keine Variable, sondern eine Zuweisung, also ist dies syntaktisch falsch !!

a=(x=5)*3 Wert des Ausdrucks : 15 Nebenwirkung: Wert der Variablen a ist 15 Wert des Ausdrucks : 5 Nebenwirkung: Wert der Variablen x ist 5 x=x+20 Welchen Wert hat x nach dem Zuweisungsausdruck? Da x nach dem letzten Zuweisungsausdruck den Wert 5 erhalten hat, hat x jetzt den Wert , also 25

a++ a-- Erhöht den Wert der Variablen a um eins nach der Verwendung in einem Ausdruck. Verringert den Wert der Variablen a um eins nach der Verwendung in einem Ausdruck. ++a Erhöht den Wert der Variablen a um eins vor der Verwendung in einem Ausdruck. --a Verringert den Wert der Variablen a um eins vor der Verwendung in einem Ausdruck.

Beispiele dazu: Welche Bildschirmausgaben erzeugt folgendes Programm?

int main(){ int i; i=10; printf("Wert nach i++ ist %d\n",i++); printf("Wert nach i-- ist %d\n",i--); printf("Wert nach ++i ist %d\n",++i); printf("Wert nach --i ist %d\n",--i); return 0; } Wert nach i++ ist 10 Wert nach i-- ist 11 Wert nach ++i ist 11 Wert nach --i ist 10

printf("Wert nach i++ ist %d\n",i++); Durch welche 2 Anweisungen kann man diese Anweisung also simulieren? printf("Wert nach i++ ist %d\n", i); i=i+1; printf("Wert nach i-- ist %d\n",i--); printf("Wert nach i-- ist %d\n", i); i=i-1; printf("Wert nach ++i ist %d\n", ++i); i=i+1; printf("Wert nach ++i ist %d\n", i); printf("Wert nach --i ist %d\n", --i); i=i-1; printf("Wert nach --i ist %d\n", i); Durch welche 2 Anweisungen kann man diese Anweisung also simulieren?

a=(x==x+1)+4 Wert des Ausdrucks : 4 Nebenwirkung: Wert der Variablen a ist 4 Wert des Ausdrucks : 0 Dieser Ausdruck ist – egal welchen Wert x besitzt - immer falsch !! Warum wird zu x erst 1 addiert und Weil dies in der Norm so festgelegt ist! Nähers dazu später! (Priorität = Vorrang) Nicht zuerst x auf Gleichheit mit x geprüft?

x+=y Dies ist eine abkürzende Schreibweise für... x=x+y Das gleiche gilt für: *=-=usw.

Priorität und Assoziativität bei Operatoren. Siehe Hilfe-Menü von MSVC++ Stichwort: precedence

Ein Operator hat höhere Priorität bedeutet, daß die zugehörige Operation zuerst ausgeführt wird, wie z.B: 3+5*6 (Punkt vor Strich) = 3 + (5 * 6) = 33

Wenn zwei Operatoren die gleiche Priorität haben, bestimmt die Assoziativität, welche Operation zuerst ausgeführt wird.

Beispiel:

* und / haben die gleiche Priorität und die Assoziativität von Links nach Rechts (kurz: L).

3 * 6 / 9 Wie wird der Wert dieses Ausdrucks berechnet ?

3 * 6 / Deswegen wird zuerst 3*6 (= 18) berechnet und dann 18/9 (=2)

3 * 6 / Welches Ergebnis hat der Ausdruck, wenn * und / rechtsassoziativ wären? da 6 und 9 integer sind

60 / 10 / 2 Wie wird der Wert dieses Ausdrucks berechnet ?

60 / 10 / Deswegen wird zuerst 60/10 (= 6) berechnet und dann 6/2 (=3)

60 / 10 / Welches Ergebnis hat der Ausdruck, wenn / rechtsassoziativ wäre?

Bemerkungen: Ein einstelliger (unärer) Operator arbeitet mit einem Operand, wie zum Beispiel: -x Ein zweistelliger (binärer) Operator arbeitet mit 2 Operanden, wie zum Beispiel: x-y, x+y, x*y, x/y, x%y,

Ein dreistelliger (ternärer) Operator arbeitet mit 3 Operanden. In C gibt es nur einen ternären Operator (den wir hier nicht besprechen).

In der folgenden Folie bedeutet: A : Assoziativität L : Linksassoziativität R : Rechtsassoziativität S : Stelligkeit U : unär (einstellig) B : binär (zweistellig) T : ternär (dreistellig)

Priorität nimmt von oben nach unten ab Operatoren AS () [] ->.LB * + - ! ~ & (typ) sizeof RU * / %LB + -LB >LB >=LB == !=LB &LB ^LB ¦LB &&LB ¦¦LB ?:RT = += -= *= /= %= &= ^= ¦= >= RB,LB Reihenfolge der Auswertung

a==b && a!=b Wie wird der Wert dieses Ausdrucks berechnet ? Diese Operatoren haben die gleiche Priorität. Sie ist grösser als die Priorität von && Welch(e)r Operator(en) hat (haben) die höchste Priorität ? Deswegen werden die Ausdrücke zuerst ausgewertet Da aus logischen Gründen einer dieser 2 Ausdrücke falsch ist, hat dieser Ausdruck den Wert 0

Weiter mit: Aufgaben aus dem Arbeitsblatt lösen. (Prioritätentabelle befindet sich auf meiner Website bzw. wird ausgeteilt).

1) Welche der folgenden Zeichenreihen sind syntaktisch korrekte Ausdrücke (in der Programmiersprache C) und welche Werte haben diese Ausdrücke ? Geben Sie selbst Ausdrücke an. Überprüfen Sie Ihre Ergebnisse mit Hilfe der Entwicklungsumgebung von Visual C++ AusdruckWert 3 = * * 4 == 5 * 5 x = 7 /*8+34 2x = x + x y == y+1 7 && 8 7 || 8 !23 !7 || !8 i=(3==5) i!=(4==4) 2) Formulieren Sie die folgenden mathematischen Ausdrücke als syntaktisch korrekte Ausdrücke in der Programmiersprache C. z = 2+6/3 4 x 2 Möglichkeiten 2 < x < 5 a x < 8 1 < x 7 b x 9 c x 7 6 x d > x > r a x 83 1 > x 17 b x 9.4 y > x b x u < 3.14 w x 7 v 23 x!=5 2 Möglichkeiten