Identifique o que será exibido pelo seguinte trecho de programa:
int a = 3, b = 2, c = 1;
c = a++ + --b * --a - b++;
printf("%d %d %d",a,b,c);
int a = 3, b = 2, c = 1;
c = a++ + --b * --a - b++;
printf("%d %d %d",a,b,c);
Passo 1
O enunciado pede para identificar o que vai ser impresso por um trecho em C que usa operações de incremento e decremento (prefixado e posfixado). O conteúdo envolve o comportamento de a++ (postfix), ++a (prefix), --b (prefix) e a precedência/associatividade dos operadores aritméticos, e vamos precisar entender quando cada variável é alterada e qual valor ela devolve em cada subexpressão.
Passo 2
Começamos com os valores iniciais: a=3, b=2. Na expressão c = a++ + --b * --a - b++; o primeiro termo a++ devolve o valor atual de a (3) e só depois incrementa a para 4.
Em seguida vem --b * --a. O --b é prefixado, então b é decrementado de 2 para 1 e devolve 1. Logo depois, --a também é prefixado: a vai de 4 para 3 e devolve 3. O produto desses valores é 1 * 3 = 3.
Em seguida vem --b * --a. O --b é prefixado, então b é decrementado de 2 para 1 e devolve 1. Logo depois, --a também é prefixado: a vai de 4 para 3 e devolve 3. O produto desses valores é 1 * 3 = 3.
Passo 3
O último termo é b++. Como é posfixado, devolve o valor atual de b (1) e depois incrementa b para 2.
Passo 4
Agora juntamos tudo para calcular c: temos 3 (do a++) + 3 (do --b * --a) - 1 (do b++) = 5.
Passo 5
Por fim, os valores finais das variáveis são a=3 (foi 3→4 no a++, depois 4→3 no --a), b=2 (foi 2→1 no --b, depois 1→2 no b++), e c=5.
Resposta
3 2 5