Pular para o conteúdo principal

Questão de Programação — C — FGV 2023

ProgramaçãoC
Código
fg060128
Banca
FGV
Órgão
AL-MA
Ano
2023
Nível
Superior
Cargo
Técnico de Gestão Administrativa - Programador de Sistemas
João pretendia escrever um trecho de código na linguagem C contendo o seguinte loop:int i;for (i = 5; i >= 0; i = i - 1) {printf("Valor: %d\n", i);}Entretanto, sem querer, João inverteu a ordem das expressões no comando for, e digitou o código como segue:int i;for (i = 5; i = i - 1; i >= 0) {printf("Valor: %d\n", i);}Assinale a lista completa dos valores exibidos nesse trecho pela execução da versão equivocada produzida por João.
  1. A4, 3, 2, 1
  2. B4, 3, 2, 1, 0
  3. C5
  4. D5, 4, 3, 2, 1
  5. E5, 4, 3, 2, 1, 0
Revelar gabarito e comentário

GabaritoA — 4, 3, 2, 1

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Comportamento do comando for em C — inversão de cláusulas

Gabarito: 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:

  1. Inicialização: i = 5.

  2. Condição: i = i - 1i passa a 4, valor da expressão = 4 (verdadeiro) → executa o corpo, imprime 4.

  3. Incremento: i >= 0 → avalia 4 >= 0 (1, descartado).

  4. Condição: i = i - 1i passa a 3 → corpo imprime 3.

  5. Incremento: 3 >= 0 (1).

  6. Condição: i = 2 → imprime 2.

  7. Condição: i = 1 → imprime 1.

  8. 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.

  1. 1i=5 (inicialização)
  2. 2Condição: i=i-1 → i=4 (verdadeiro)
  3. 3Imprime 4
  4. 4Incremento: i>=0 (descartado)
  5. 5Condição: i=3 → imprime 3
  6. 6Condição: i=2 → imprime 2
  7. 7Condição: i=1 → imprime 1
  8. 8Condição: i=0 (falso) → encerra
LEVEL · soulevel.com.br
NÃO CAIA NESSA!

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