Vorlesung 7 Flashcards

1
Q

was sind operatoren, operanden und ausdrücke?

A

operatoren dienen zum verknüpfen von operanden
z.b. +,*
in C gibt es ein, zwei und dreistellige operatoren

operanden sind argumente der operatoren
in C; Literale, variablen, funktionsaufrufe oder ausdrücke

ausdrücke sind kombinationen aus variablen, literalen , operatoren und rückgabewerten von funktionen
auswertung eines ausdrucks ergibt einen wert.
Beispiel: -c1 + c2 - 5 * (f(j) - 10)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

auswertungs reihenfolge von operatoren?

A

Gruppierung (Auswertungsreihenfolge)
1. geklammerte Teilausdrücke
2. einstellige Postfix-Operatoren
3. einstellige Präfix-Operatoren
4. mehrstellige Operatoren gemäß Vorrangregeln (z.B. „Punkt vor Strich“)
● Assoziativität: Auswertungsreihenfolge bei Operatoren der gleichen
Vorranggruppe (in C meist linksassoziativ, d.h. von links nach rechts)
● Tipp zur Fehlervermeidung: Häufig Klammerung benutzen

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

was sind lvalue, rvalue und seiteneffekte?

A

lvalue: Ausdruck, dem Wert zugewiesen werden kann (z.B. Variable)

rvalue: Ausdruck, dem kein Wert zugewiesen werden kann

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

wie kann man die operatoren in C gruppieren?

A

Arithmetische Operatoren +, -,
*
, …
* Zuweisungsoperatoren =
, +=, …
* Inkrement- und Dekrement-Operatoren ++, –
* Relationale Operatoren ==
, !=, …
* Logische Operatoren &&, ||, …
* Bitweise Operatoren &, |, …
* Sonstige Operatoren sizeof …

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

was sind arithmetische operatoren?

A

Zweistellig, keine Seiteneffekte
● Linksassoziativ, d.h. A + B + C ist gleichbedeutend mit (A + B) + C
● Es seien A und B Ausdrücke
* Additionsoperator: A + B
* Substraktionsoperator: A - B
* Multiplikationsoperator: A * B
* Divisionsoperator: A / B
* Bei Integer-Division wird der Nachkommateil des Ergebnisses abgeschnitten
* Restwertoperator: A % B
* Nur für ganzzahlige Operanden (char, int) definiert

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

was sind zuweisungsoperatoren?

A

● Rechtsassoziativ, d.h. A = B = C ist gleichbedeutend mit A = (B = C)
● Automatische Konvertierung, wenn die Operatoren von unterschiedlichen,
aber kompatiblen Datentypen sind
● Kombinationen mit arithmetischer/bitweiser Operation
* Additionszuweisung: A += B (entspricht A = A + B)
* Substraktionszuweisung: A -= B (entspricht A = A - B)
* Weitere: A *= B, A /= B, A %= B, A &= B, A |= B, A «= B, A&raquo_space;= B
* Vorteil: Effiziente Umsetzung in Maschinensprache möglich

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Inkrement- und Dekrementoperatoren

A

● Inkrementoperatoren erhöhen den Wert einer Variablen,
Dekrementoperatoren senken ihn.

● Beispiel:
int k, l, m;
k = 5;
k++;
–k;
l = k++;
m = –k;

wichtig, unterschied ob k++ oder ++k

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Relationale Operatoren

A

Ermöglichen Vergleiche zwischen Werten.
* Ergebnis ist 0 oder 1.

if(x == y) {
printf(“x ist gleich y.\n”);
}
if(x != y) {
printf(“x ist ungleich y.\n”);
}
if(x >= y) {
printf(“x ist größer oder gleich y.\n“);
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Logische Operatoren

A

Ermöglichen Auswertung von logischen Aussagen.
* Ergebnis ist 0 und 1

int adult = (age > 17);
if(adult) {
printf(“You are an adult.”);
}
if(age > 17) {
printf(“You are an adult.”);
}
if(age >= 13 && age < 20) {
printf(“You are a teenager.”);
}
if(age < 13 || age > 19) {
printf(“You are not a teenager.”);
}
if(!(age >= 13 && age < 20)) {
printf(“You are not a teenager.”);
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Bitweise Operatoren

A

● Bitweise Operatoren arbeiten auf der internen binären Darstellung
der Operanden.
● Verknüpfung zweier Operanden Bit für Bit:
& UND | ODER ^ EXCLUSIV-ODER ~ Einer-Komplement (invertieren)
● Frage: Was liefert 10 & 6 ?

● Bitweises Verschieben von x um y (Binär-)Stellen nach links
(x &laquo_space;y) oder rechts (x&raquo_space; y), auffüllen mit 0en
● x = y &laquo_space;z entspricht rechnerisch x = y * 2z
● x = y&raquo_space; z entspricht rechnerisch x = y / 2z

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

wie funktioniert die bedingte zuweisung?

A
  • Der ?-Operator erlaubt die Auswahl einer Zuweisung anhand von
    Bedingungen:
    Bedingung ? Ausdruck bei true : Ausdruck bei false
  • Zunächst wird die Bedingung ausgewertet. Ist das Ergebnis wahr (≠0), dann
    wird der erste Ausdruck zurückgegeben, sonst der zweite.

ist meistens unübersichtlich, nur bei offensichtlichen bedingungen verwenden

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Sonstige Operatoren

A

● Funktionsaufruf: F(X), Aufruf der Funktion F mit Parametern X
● Typkonvertierung: (Typ) A, wandelt A in den angegebenen
Typ um
● Adressoperator: &
● Dereferenzierungsoperator: *
● Feldindex-Operator: A[B]
● Elementauswahloperatoren: A.B, A->B
* sizeof: liefert interne Größe einer Variablen oder eines Typs
* Beispiel: s = sizeof(float);
* Komma-Operator (A, B): wertet die Ausdrücke A und B nacheinander aus und
liefert das Ergebnis von B

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Anweisungen, definition?

A
  • Anweisungen definieren den Programmfluss, sorgen für die grobe Struktur
    einer Funktion und geben den logischen und funktionalen Unterbau.
  • Ausdrucksanweisung: Ein Ausdruck wird zu einer Anweisung, indem ;
    angefügt wird.
  • Leere Anweisung: ;
  • Blöcke: Zusammenfassung von Deklarationen und Anweisungen in { }
    (z.B. in Funktionsdefinitionen). Ein Block gilt als eine Anweisung.
  • Spezialfall: Block kann leer sein. {}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

wofür dienen schleifen im allgemeinen?

A
  • Schleifen werden benutzt, um eine Anweisung oder einen Block von
    Anweisungen wiederholt auszuführen.
  • Logische Ausdrücke definieren eine Abbruchbedingung.
  • Prüfung kann am Anfang oder am Ende der Schleife stattfinden.
  • Bei jedem Durchlauf wird diese Bedingung untersucht, ist das Ergebnis falsch,
    wird die Schleife verlassen.
  • Schleifen ändern die sequentielle Ausführung eines Programms.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

while schleife

A
  • = „Solange eine Bedingung erfüllt ist, führe ein Block aus.“
  • Testausdruck wird vor Ausführung der Anweisungen ausgewertet
  • Ist er falsch, wird mit erstem Befehl nach der Schleife fortgefahren.
  • Nach der Ausführung der Anweisung(en) wird der Testausdruck erneut
    geprüft.
  • Schleife wird so lange durchlaufen, bis Testausdruck „false“ ergibt.
  • Der Schleifenrumpf wird unter Umständen nicht ein einziges Mal durchlaufen
    (abweisende Schleife).

Syntax:
while (Testausdruck)
Anweisung oder Anweisungsblock

● Beispiel (Ausgabe der Zahlen 1 bis 10):

int i = 1;
while (i <= 10) {
printf(“%d “, i);
i++;
}

● Beispiel (Warten auf Eingabe ‘e’):
5
int i = 1;
while (i <= 10) {
printf(“%d “, i);
i++;
}
int c;
while ( (c=getchar()) != ‘e’ );

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

do-while-Schleife

A
  • = „Führe einen Block aus und wiederhole ihn, solange eine Bedingung
    erfüllt ist.“
  • Testausdruck wird nach Ausführung der Anweisungen ausgewertet.
  • Ist er erfüllt, wird mit erstem Befehl innerhalb der Schleife fortgefahren.
  • Ist er nicht erfüllt, wird mit dem ersten Befehl hinter der Schleife fortgefahren.
  • Der Schleifenrumpf wird mindestens einmal durchlaufen
    (nichtabweisende Schleife).
17
Q

for schleife

A
  • Häufigster Einsatz bei fester Anzahl von Durchläufen.
  • Besteht aus drei Teilen:
  • Initialisierungsteil: Legt Startwert der Laufvariablen fest, ggf. Definition Laufvariable
    (Datentyp). Variable ist nur innerhalb der Schleife gültig.
  • Bedingungsteil: Definition der Ausführungsbedingung als Boolschen Ausdruck
    (true = Ausführung, false = Abbruch).
  • Veränderungsteil: Definition der Veränderung der Laufvariablen nach dem
    Schleifendurchlauf (i.d.R. Inkrementierung oder Dekrementierung)
  • Testausdruck wird vor Ausführung der Anweisungen ausgewertet.
  • Ist er nicht erfüllt, wird mit erstem Befehl nach der Schleife fortgefahren.
  • Der Schleifenrumpf wird u.U. nicht ein einziges Mal durchlaufen.
    (abweisende Schleife)

Syntax:
for(Initialisierung; Testausdruck; Veränderung)
Anweisung oder Anweisungsblock
● Initialisierung, Testausdruck und Veränderung sind optional.
● Fehlt der Testausdruck wird wahr angenommen.
● Anwendung ist nicht auf das Durchzählen beschränkt, es können beliebige
Ausdrücke genutzt werden.

for (int i = 1; i <= 10; i++) {
printf(“%d “, i);
}

int i, j;
for (i = 1, j = 10; i < j; i++, j–) {
printf(“(%d, %d) “, i, j);
}

18
Q

was sind komplexe schleifenköpfe bei for schleifen?

A
  • Initialisierungs- und Veränderungsteil eines Schleifenkopfes können aus
    mehreren Anweisungen bestehen.
  • Im Initialisierungsteil können Variablen deklariert werden, die im
    Veränderungsteil unabhängig voneinander variiert werden.

meistens schlechter stil und schwer lesbar

19
Q

beispiel für eine verschachtelung von schleifen?

A

for(int i = 0; i < 5; i++) {
for(int j = 0; j < 5; j++) {
printf(“%d\t”, i*j);
}
printf(“\n”);
}

20
Q

was sind sprunganweisungen?

A

break
-anwendung in allen schleifen und switch anweisung
-springt hinter die schleife/ den switch block

continue
-anwendung in allen schleifen
-springt zum testausdruck, bei der for schleife wird zuvor der veränderungsausdruck ausgeführt

return
-anwendung an jeder posiiton
beendet die aktuelle funktion, rückkehr zum aufrufenden programmteil mit rückgabewert

!!! häufiges verwenden von sprunganweisugnen kann zu unübersichtlichen Programmen führen

sprunganweisungen werden verwendet, um endlosschleifen zu verlassen

21
Q
A