67
C- Syntax

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

Embed Size (px)

Citation preview

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

C- Syntax

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

Bestandteile der Sprache C:

•Ausdrücke

•Anweisungen

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

Ausdruck

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

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 !!

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

Es gibt folgende Ausdrücke:

- arithmetische Ausdrücke

- relationale und logische Ausdrücke

- Zuweisungsausdrücke

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

ArithmetischeAusdrücke

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

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

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

3Literal (Konstante),

Wert des Ausdrucks: 3

3+5-2 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)

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

3+x-2x kein Ausdruck, da * in 2x fehlt(syntaktisch falsch)

x+3

x-y/b+3-(3+y)*4Wert des Ausdrucks: unbekannt

27%4ganzzahliger 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

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

26%4

a++ erhöht a um 1, Wert des Ausdrucks: unbekanntb--

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

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

Relationale und logische Ausdrücke

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

Relationale und logische Ausdrücke sind

wahr oder falsch

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

Kleiner Ausflug in die formale Logik

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

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

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

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

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

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

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

Diese Zusammenhänge lassen sich auch mit einer

sogenannten Wahrheitstafeln darstellen:

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

A B A und B A oder BW W W WW F F WF W F WF F F F

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

A nicht AW FF W

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

C kennt aber kein "wahr" oder "falsch", sondern:

Ausdruck Wertfalsch 0

wahr 1

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

C++ kennt aber "wahr" oder "falsch":

Ausdruck Wertfalsch false

wahr true

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

Beispiele:

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

0 < 5

8 > 9x+3 >= 51 == 2 Wert: 0

1 != 3

Wert: 1

Wert: 0

Wert: 1

Wert hängt von x ab.

mathematisches =

mathematisches

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

4 < x < 7

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

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

LogischeAusdrücke

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

Beispiele:

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

a && b

x || y(x>0) && (x<10)!(x<y)

logisches UND

logisches ODER

logisches NICHT

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

0 && 1

0 || 0!0!1

Wert: 0

Wert: 0

Wert: 1

Wert: 0

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

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

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

3 && 4

7 || 9.5!17!13.1425

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

C wertet wie folgt aus:

Ausdruck Wertfalsch 0

wahr 0

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

Wert: 1

Wert: 1

Wert: 0

Wert: 0

3 && 4

7 || 9.5!17!13.1425

3 ungleich 0, also wahr, also Wert: 1

4 ungleich 0, also wahr, also Wert: 1

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

OperatorenArithmetische Operatoren:

+ - * / % ++ --

Vergleichsoperatoren:

< <= > >= == !=

Logische Operatoren: ! && ||

Bitweise Operatoren: ~ & |

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

Zuweisungsausdrücke

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

Ein Zuweisungsausdruck enthält einen

Zuweisungsoperator wie z.B. =

+=++--

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

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

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

Da ein Zuweisungsausdruck ein Ausdruck ist, hat ein

Zuweisungsausdruck also einen Wert !!!

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

Beispiele:

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

a = 17

x = 3+2*4

Wert des Ausdrucks : 17Nebenwirkung: Wert der Variablen a ist 17

Wert des Ausdrucks : 11Nebenwirkung: Wert der Variablen x ist 11

Punkt vor Strich.Dies bedeutet, dass dass z.B. die Multiplikation Priorität (=Vorrang) vor der Addition hat

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

y = x = 2

Wie wird der Wert diesen Ausdrucks berechnet ?

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

y = x = 2

Wert des Ausdrucks : 2Nebenwirkung: Wert der Variablen y ist 2

Abarbeitung:von rechts nach links

Wert des Ausdrucks : 2Nebenwirkung: 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)

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

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 !!

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

a=(x=5)*3

Wert des Ausdrucks : 15Nebenwirkung: Wert der Variablen a ist 15

Wert des Ausdrucks : 5Nebenwirkung: Wert der Variablen x ist 5

x=x+20Welchen Wert hat x nach dem Zuweisungsausdruck?

Da x nach dem letzten Zuweisungsausdruck den Wert 5 erhalten hat, hat x jetzt den Wert 5 + 20, also 25

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

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.

++aErhöht den Wert der Variablen a um eins vor der

Verwendung in einem Ausdruck.

--aVerringert den Wert der Variablen a um eins vor

der Verwendung in einem Ausdruck.

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

Beispiele dazu:Welche

Bildschirmausgaben erzeugt folgendes

Programm?

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

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

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

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?

Durch welche 2 Anweisungen kann man diese Anweisung also simulieren?

Durch welche 2 Anweisungen kann man diese Anweisung also simulieren?

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

a=(x==x+1)+4

Wert des Ausdrucks : 4Nebenwirkung: 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?

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

x+=y

Dies ist eine abkürzende Schreibweise für ...

x=x+yDas gleiche gilt für:

*= -= usw.

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

Priorität und Assoziativität bei Operatoren.

Siehe Hilfe-Menü von MSVC++ Stichwort:

precedence

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

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

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

Wenn zwei Operatoren die gleiche Priorität haben,

bestimmt die Assoziativität, welche Operation zuerst

ausgeführt wird.

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

Beispiel:

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

* und / haben die gleiche Priorität und die

Assoziativität von Links nach Rechts (kurz: L).

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

3 * 6 / 9

Wie wird der Wert dieses Ausdrucks berechnet ?

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

3 * 6 / 9

18

2

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

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

3 * 6 / 9

0

0

Welches Ergebnis hat der Ausdruck, wenn * und / rechtsassoziativ wären?

da 6 und 9 integer sind

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

60 / 10 / 2

Wie wird der Wert dieses Ausdrucks berechnet ?

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

60 / 10 / 2

6

3

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

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

60 / 10 / 2

5

12

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

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

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

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

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

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

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)

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

Pri

orit

ät n

imm

t von

obe

n na

ch u

nten

ab

Operatoren A S()   []   ->   . L B*  +   -    !  ~  ++  -- &  (typ) sizeof  R U

*    /    % L B+    - L B<<  >> L B<    <=   >   >= L B==   != L B& L B^ L B¦ L B&& L B¦¦ L B?: R T=  +=  -=  *=  /=  %=  &=  ^=  ¦=  <<=  >>=  R B

, L B

Reihenfolge der Auswertung

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

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

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

Weiter mit:

Aufgaben aus dem Arbeitsblatt lösen.

(Prioritätentabelle befindet sich auf meiner Website

bzw. wird ausgeteilt).

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

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++

 

Ausdruck Wert

3 = 2+7

3 * 3 + 4 * 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