Witam. Zadanie pochodzi z książki C. Delannoy'a "Ćwiczenia z języka C".
Już pisałem w sprawie poprzedniego zadania z tej książki, ale musiałem zrobić nie zaplanowaną przerwę więc stąd wzięła się moja ne systematyczność. Jest to zadanie 1.6 ze strony 13.
Jakie wyniki otrzyma się po wykonaniu następującego programu?
# include <stdio.h>
main()
{
int n, p, q;
//przypadek 1
n=5; p=2;
q=n++>p||p++!=3;
printf("A: n=%d, p=%d, q=%d\n", n, p ,q);
//przypadek 2
n=5; p=2;
q=n++<p||p++!=3;
printf("B: n=%d, p=%d, q=%d\n", n, p ,q);
//przypadek 3
n=5; p=2;
q=++n==3&&++p==3;
printf("C: n=%d, p=%d, q=%d\n", n, p ,q);
//przypadek 4
n=5; p=2;
q=++n==6&&++p==3;
printf("D: n=%d, p=%d, q=%d\n", n, p ,q);
}
Odpowiedzi do tego zadania są następujące:
A: n=6, p=2, q=1
B: n=6, p=3, q=1
C: n=6, p=2, q=0
D: n=6, p=3, q=1
I tu rodzi się moje pytanie. Bo o ile wiem jak jest wyliczone q jest to zawsze prawda lub fałsz tak za nic nie mogę rozczaić jak wyliczone jest n i p. W pierwszym przypadku p jest raz wyliczane przed inkrementacją a w drugim po. I podobnie nie wiem jak w przypadku 3 i 4 jest obliczane n.Dlatego proszę o wyjaśnienie mi tych zasad lub jak odpowiedzi na te pytania mam szukać.
Z góry dziękuję.