Questão de Programação — C — FGV 2023
- Código
- fg060128
- Banca
- FGV
- Órgão
- AL-MA
- Ano
- 2023
- Nível
- Superior
- Cargo
- Técnico de Gestão Administrativa - Programador de Sistemas
- A4, 3, 2, 1
- B4, 3, 2, 1, 0
- C5
- D5, 4, 3, 2, 1
- E5, 4, 3, 2, 1, 0
GabaritoA — 4, 3, 2, 1
for em C — inversão de cláusulasGabarito: letra A. A versão equivocada do loop imprime os valores 4, 3, 2, 1. Isso ocorre porque, no for de C, a segunda expressão é a condição (avaliada antes de cada iteração) e a terceira é o incremento (executado após o corpo). Na inversão, a condição passou a ser i = i - 1 (atribuição, cujo valor é o novo i) e o incremento passou a ser i >= 0 (expressão booleana, que não altera i).
Vamos traçar a execução:
Inicialização: i = 5.
Condição: i = i - 1 → i passa a 4, valor da expressão = 4 (verdadeiro) → executa o corpo, imprime 4.
Incremento: i >= 0 → avalia 4 >= 0 (1, descartado).
Condição: i = i - 1 → i passa a 3 → corpo imprime 3.
Incremento: 3 >= 0 (1).
Condição: i = 2 → imprime 2.
Condição: i = 1 → imprime 1.
Condição: i = 0 → valor da expressão = 0 (falso) → loop encerra sem imprimir 0.
Portanto, os valores exibidos são 4, 3, 2, 1, correspondentes à alternativa A.
A armadilha está em pensar que o loop original (correto) imprimiria 5,4,3,2,1,0, e que a inversão apenas trocaria a ordem. Na verdade, a condição ser uma atribuição faz com que o primeiro valor impresso seja 4 (porque a atribuição ocorre antes do corpo) e que o 0 nunca seja impresso (pois quando i se torna 0 na condição, ela falha e o corpo não executa).
Gabarito: letra A.
Link permanente: /questoes/fg060128