Forum: Compiler & IDEs Hilfe bei dem Programm


von Dominik (Gast)


Lesenswert?

Hallo Leute,

ich bin etwas hilflos, mein Lehrer hat mir diese Aufgabe gegeben und ich 
weiß nicht was die mit Ausgabe kommentierten Stellen aussagen sollen...

Könnt ihr mir helfen?
1
#include <stdio.h>
2
#define P(int) printf("%d\n", int)
3
//Statt printf kann man nun P aufrufen, um eine Zahl auszugeben
4
5
int main() {
6
     int x, y, z;
7
     x = 2;
8
     y = 1;
9
     z = 0;
10
     x = (x && y) || z;
11
     P(x);                       //Ausgabe
12
     P(x || ((!y) && z));
13
     x = y = 1;
14
     z = x++ - 1;                //Ausgabe
15
     P(x);                       //Ausgabe
16
     P(z);                       //Ausgabe
17
     z += -x++ +  ++y;
18
     P(z);                       //Ausgabe
19
     return 0;
20
}

: Bearbeitet durch User
von Bernhard S. (dl9rdw)


Lesenswert?

>#define P(int) printf("%d\n", int)
Na dann ersetze doch mal alle Aufrufe von P() mit obiger Define 
Ersetzung. Dann siehst vielleicht schon klarer.
Das dazwischen verändert nur Deine Variablen.
Da soll wohl geprüft werden, ob Du die C-Anweisungen alle gelernt hast.

Grüße

Bernhard

von Dominik L. (dominik_l)


Lesenswert?

Hallo Bernhard,

leider habe ich bisher noch nie ein Programm geschrieben. Bis auf die 
Gatter kenne ich nichts.

Mir ist klar, dass ich die Variablen einsetzten muss,
aber ich weis nicht was dahinter steckt.

"x = (x && y) || z;" Bedeutet dann ja, das die Variable x noch einmal 
verändert wird, oder sehe ich das falsch?

Also wäre x dann entweder 3 oder 0??


Grüße

Dominik

von Karl H. (kbuchegg)


Lesenswert?

Dominik L. schrieb:
> Hallo Bernhard,
>
> leider habe ich bisher noch nie ein Programm geschrieben. Bis auf die
> Gatter kenne ich nichts.
>
> Mir ist klar, dass ich die Variablen einsetzten muss,
> aber ich weis nicht was dahinter steckt.

Das sollte sich aber in deinen Unterlagen finden. Oder in deinem 
Lehrbuch. Oder in der Vorlesung, in der du warst.

Es ist ja nicht so, dass das jetzt die allerersten Operatoren sind, mit 
denen man es als C Programmierer zu tun hat. D.h. da muss es schon auch 
noch eine Vorgeschichte gegeben haben.

> "x = (x && y) || z;" Bedeutet dann ja, das die Variable x noch einmal
> verändert wird, oder sehe ich das falsch?

Das siehst du schon richtig.

>
> Also wäre x dann entweder 3 oder 0??

Nein.
Rechts vom = steht ein Ausdruck. Der wird ausgewertet und das Ergebnis 
dieser Auswertung wird zugewiesen.
Auch die logischen Verknüpfungsoperationen && und || liefern ein 
Ergebnis. Genauso wie a + b ein Ergebnis hat, so hat auch a && b ein 
Ergebnis (je nach Wert von a bzw. b )

Der Hintergrund dürfte hier wohl sein, dass in C alles ungleich 0 
automatissch als logisch 'wahr' angesehen wird, während eine 0 den 
Wahrheitswert 'falsch' hat.

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Karl Heinz schrieb:

> Der Hintergrund dürfte hier wohl sein, dass in C alles ungleich 0
> automatissch als logisch 'wahr' angesehen wird, während eine 0 den
> Wahrheitswert 'falsch' hat.

Während das Ergebnis einer derartigen logischen Operation numerisch nur 
die Werte 0 bzw. 1 haben kann. 0 repräsentiert wieder den Wahrheitswert 
'falsch' und für 'wahr' kriegt man immer 1 als Ergebnis.
1
&& - Und
2
---------
3
4
5
    a         b       Ergebnis
6
   ---------------------------
7
    falsch falsch     falsch (0)
8
    wahr   falsch     falsch (0)
9
    falsch wahr       falsch (0)
10
    wahr   wahr       wahr (1)
1
|| - Oder
2
---------
3
4
5
    a         b       Ergebnis
6
   ---------------------------
7
    falsch falsch     falsch (0)
8
    wahr   falsch     wahr (1)
9
    falsch wahr       wahr (1)
10
    wahr   wahr       wahr (1)
1
! - Nicht
2
---------
3
4
5
    a             Ergebnis
6
   ------------------------
7
    falsch        wahr (1)
8
    wahr          falsch (0)

von Rolf M. (rmagnus)


Lesenswert?

Karl Heinz schrieb:
> Der Hintergrund dürfte hier wohl sein, dass in C alles ungleich 0
> automatissch als logisch 'wahr' angesehen wird, während eine 0 den
> Wahrheitswert 'falsch' hat.

In dem Zusammenhang sei dann auch die wichtige Unterscheidung zwischen & 
und && erwähnt. Das sind verschiedene Operatoren, die zwar beide eine 
UND-Verknüpfung machen, aber die übergenen Werte unterschiedlich 
interpretieren. Der obige Satz von Karl Heinz hängt nämlich davon ab, 
welchen der beiden Operatoren man nutzt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.