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