+ All Categories
Home > Documents > C- Syntax. Bestandteile der Sprache C: Ausdrücke Anweisungen.

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

Date post: 05-Apr-2015
Category:
Upload: jochim-kempen
View: 112 times
Download: 0 times
Share this document with a friend
67
C- Syntax
Transcript
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


Recommended