Kluczowe jest rozróżnienie dwóch operatorów inkrementacji w C++:
- postinkrementacja a++ – w danym wyrażeniu używa "starej" wartości, a dopiero po jej użyciu zwiększa zmienną o 1,
- preinkrementacja ++b – najpierw zwiększa zmienną o 1, a następnie w wyrażeniu pojawia się już wartość zwiększona.
W programie ustawiono: a=7, b=3, w=1. Następnie wykonywane jest:
w += (a++) + (++b)
Kroki śledzenia (trace):
- Fragment (a++) zwraca do sumy wartość 7, a po tym kroku zmienna a staje się 8.
- Fragment (++b) najpierw zmienia b z 3 na 4 i zwraca do sumy wartość 4.
- Suma w nawiasach to 7 + 4 = 11.
- Operator += dodaje tę sumę do aktualnego w: było w=1, więc po dodaniu w=1+11=12.
Na końcu instrukcja wyjścia wypisuje w oraz a oddzielone spacją. Ponieważ w=12 i a=8, wynikiem są liczby: 12 i 8.
Dlaczego pozostałe odpowiedzi są błędne?
- "12 i 7" pomija skutek uboczny postinkrementacji – po wykonaniu wyrażenia a nie pozostaje równe 7.
- "11 i 8" to typowy błąd nieuwzględnienia początkowego w=1 i działania += (to nie jest zwykłe przypisanie).
- "13 i 8" wynika zwykle z błędnego policzenia składników sumy (np. przyjęcia, że a++ zwraca 8 zamiast 7) lub z podwójnego dodania 1.
Wskazówka egzaminacyjna: zawsze zapisuj osobno (1) wartość zwracaną przez a++/++a oraz (2) nową wartość zmiennej po wykonaniu operatora. To ogranicza pomyłki w wyrażeniach złożonych.