Questão nº 61

Questão de Tecnologia da Informação · FGV ALEP 2024 (nº 61)

FGV2024Analista Legislativo - Desenvolvedor de SistemasTecnologia da Informação
Gabarito: Ever comentário ↓

Seja o seguinte código escrito em linguagem C:

#include <stdio.h>
int main()
{
    int i;
    for (i=0; i<5; i++) printf("%u\n",++i<<2);
    return 0;
}

Assinale a opção que indica o que será impresso no console padrão de saída pelo programa.

Resposta comentada

Gabarito Alternativa E

Em C, uma variável pode ser modificada múltiplas vezes dentro de uma única iteração de um loop, especialmente quando operadores de incremento (++) são usados tanto na expressão a ser avaliada quanto na própria estrutura de controle do loop. Isso gera um efeito colateral, onde o valor da variável muda de forma não óbvia se não for rastreado cuidadosamente.

  • (A) Incorreta: Esta opção não considera o incremento duplo da variável i nem a operação de deslocamento de bits (<<2), que multiplica o valor por 4.
  • (B) Incorreta: Esta seria a saída se o código fosse for (i=0; i<5; i++) printf("%d\n", i);, ou seja, se i fosse impresso diretamente e incrementado apenas uma vez por iteração. A armadilha aqui é ignorar o ++i dentro do printf e o <<2.
  • (C) Incorreta: Esta opção considera a multiplicação por 4 (<<2), mas ignora o incremento duplo da variável i a cada iteração. Se i fosse incrementado apenas uma vez por iteração (i++ no for e i no printf), a sequência seria 0, 4, 8, 12, 16 (para i de 0 a 4).
  • (D) Incorreta: Esta opção não corresponde à lógica de incremento duplo e deslocamento de bits.
  • (E) Correta: Vamos rastrear o valor de i e a saída:
    • Início: i = 0.
    • 1ª iteração:
      • Condição i < 5 (0 < 5) é verdadeira.
      • Dentro do printf: ++i é avaliado primeiro. i se torna 1.
      • A expressão 1 << 2 (1 multiplicado por 22=42^2=4) resulta em 4.
      • printf imprime 4.
      • Após o corpo do loop, o i++ do for é executado. i se torna 2.
    • 2ª iteração:
      • Condição i < 5 (2 < 5) é verdadeira.
      • Dentro do printf: ++i é avaliado. i se torna 3.
      • A expressão 3 << 2 (3 multiplicado por 4) resulta em 12.
      • printf imprime 12.
      • Após o corpo do loop, o i++ do for é executado. i se torna 4.
    • 3ª iteração:
      • Condição i < 5 (4 < 5) é verdadeira.
      • Dentro do printf: ++i é avaliado. i se torna 5.
      • A expressão 5 << 2 (5 multiplicado por 4) resulta em 20.
      • printf imprime 20.
      • Após o corpo do loop, o i++ do for é executado. i se torna 6.
    • 4ª iteração:
      • Condição i < 5 (6 < 5) é falsa. O loop termina.
        Portanto, a saída é 4, 12, 20.

Fonte: FGV ALEP 2024 Analista Legislativo - Desenvolvedor de Sistemas (Caderno Tipo 1). Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho