Operationen in C < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 17:58 Fr 24.01.2014 | Autor: | rollroll |
Aufgabe | Hallo, folgende Aufgaben:
1. int a,b,c;
a=4;
b=6;
c=(++a)*(b--)
Welchen Wert hat c nach der Zuweisung?
2. int b=5;
int *c= &b;
c++;
Welchen Wert hat b?
3. int a=0, b=0, c=1, d=1, e=0;
e=(--c || --d) && (a++ && ++b)
4. char *str= ''Informatik''
char c= *(str+4);
Welchen Wert hat c nach der Anweisung |
Also meine Antworten wären:
1. c=30, da 5*6=30
2. b=5, da Erhöhung erst im nächsten Durchlauf
3. hier kenne ich die Lösung, sie ist:
a=0, b=0, c=0, d=0, e=0.
Ich verstehe das soweit, aber weshalb ist b=0, b wird doch zunächst um 1 erhöht, müsste also nicht b=1 sein?
4. c=r.
Stimmt das soweit? Was meint ihr bei 3.?
|
|
|
|
> Hallo, folgende Aufgaben:
> 1. int a,b,c;
> a=4;
> b=6;
> c=(++a)*(b--)
> Welchen Wert hat c nach der Zuweisung?
> 2. int b=5;
> int *c= &b;
> c++;
> Welchen Wert hat b?
Mit der Anweisung c++ schiebst du die Adresse weiter.
> 3. int a=0, b=0, c=1, d=1, e=0;
> e=(--c || --d) && (a++ && ++b)
c und d ereben beide mal 0. Da es sich um den && Operator handelt, wird nach der ersten falschen Aussage der Rest nicht weiter beachtet.
Beim normelan Bitweisen und: & wäre das anders.
> 4. char *str= ''Informatik''
> char c= *(str+4);
> Welchen Wert hat c nach der Anweisung
>
> Also meine Antworten wären:
>
> 1. c=30, da 5*6=30
>
> 2. b=5, da Erhöhung erst im nächsten Durchlauf
>
> 3. hier kenne ich die Lösung, sie ist:
> a=0, b=0, c=0, d=0, e=0.
> Ich verstehe das soweit, aber weshalb ist b=0, b wird doch
> zunächst um 1 erhöht, müsste also nicht b=1 sein?
>
> 4. c=r.
Das passt.
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 20:45 Fr 24.01.2014 | Autor: | rollroll |
Wie lautet denn die korrekte Antwort zu Frage 2?
|
|
|
|
|
Hallo,
b=5
Gruß, Diophant
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 12:13 Sa 25.01.2014 | Autor: | rollroll |
Danke. Noch eine Frage in diesem Zusammenhang. Wie lauten die werte von a und b nach folgenden Zeilen?
if ( (a++) && (b=2))
a*=3;
Wenn sie zunächst folgende Werte haben
a=0, b=3
a=1, b=1.
Also beim ersten Fall: a=1 und b=3
Beim zweiten Fall a=2 und b=1.
Nach musterloesung ist beim zweiten Fall aber a=6 und b=2. Warum?
|
|
|
|
|
Hallo,
> Danke. Noch eine Frage in diesem Zusammenhang. Wie lauten
> die werte von a und b nach folgenden Zeilen?
> if ( (a++) && (b=2))
> a*=3;
> Wenn sie zunächst folgende Werte haben
> a=0, b=3
> a=1, b=1.
>
> Also beim ersten Fall: a=1 und b=3
> Beim zweiten Fall a=2 und b=1.
>
> Nach musterloesung ist beim zweiten Fall aber a=6 und b=2.
> Warum?
Zunächst wird a inkrementiert und b auf den Wert 2 gesetzt (da in der if-Struktur kein Vergleichs-, sondern ein Zuweisungsoperator steht). Dann wird der Zuweisungoperator ausgeführt, der hier bewirkt, dass der Variablen a ihr dreifacher Wert zugewiesen wird. Das Reslutat für Teil 1 hast du richtig.. Im ersten teil sollte es allerdings a=1, b=2 heißen. Der wesentliche Unterschied zwischen beiden Teilen besteht IMO darin, dass die logische Verknüpfung in der if-Struktur beim ersten Teil false, beim zweiten jedoch true zurückliefert.
Gruß, Diophant
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 13:14 Sa 25.01.2014 | Autor: | rollroll |
Danke schonmal. Mir ist nur noch nicht klar weshalb beim ersten Fall false und beim zweiten true zurück geliefert wird.
|
|
|
|
|
Hallo,
> Danke schonmal. Mir ist nur noch nicht klar weshalb beim
> ersten Fall false und beim zweiten true zurück geliefert
> wird.
So wie der Inkrementierungsoperator gesetzt ist, passiert die Inkrementierung erst nach der logischen Auswertung. Damit ist a=0 zum Zeitpunkt dieser Auswertung, das ergibt false. Anders wäre es, wenn da
if(++a && (b=2))...
stünde.
Gruß, Diophant
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 13:34 Sa 25.01.2014 | Autor: | rollroll |
Super, danke. Habs verstanden
|
|
|
|