Observe o código C# a seguir. namespace MyApplication {     ...

Próximas questões
Com base no mesmo assunto
Ano: 2022 Banca: FGV Órgão: MPE-GO Prova: FGV - 2022 - MPE-GO - Analista em Informática |
Q1912768 Programação

Observe o código C# a seguir.

namespace MyApplication 


{   

   class Program    

   {     

      static void Main(string[] args)     

      {       

         for (int i = 0; --i < 5; i++)       

          {         

             Console.WriteLine(i);       

             }}}} 


Assinale o conteúdo exibido no dispositivo de saída.

Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Alternativa correta: A - O número -1 repetido indefinidamente.

Para compreender a questão, é necessário ter um bom entendimento sobre as estruturas de repetição em programação, especificamente o laço for na linguagem C#. Este laço é composto por três componentes principais: a inicialização, a condição de continuação e o incremento ou decremento.

No código apresentado, temos a seguinte estrutura de laço for:

for (int i = 0; --i < 5; i++)
{
    Console.WriteLine(i);
}

O que torna este laço incomum é a expressão --i < 5 na condição de continuação do laço. O operador -- antes da variável i é chamado de decremento pré-fixado, o que significa que i é decrementado antes de ser avaliado na condição.

Na primeira iteração, a variável i é inicializada com 0. Entretanto, antes de verificar se i < 5, a operação --i é executada, resultando em i valendo -1. Como -1 ainda é menor que 5, o bloco de código dentro do for é executado, e o número -1 é impresso.

Após a execução do bloco de código, a terceira parte do laço for, o incremento, é executado, que é i++. Isso incrementa i de volta para 0. Contudo, na próxima verificação de condição, i é novamente decrementado para -1 antes da comparação, o que faz com que a condição permaneça verdadeira. Este processo se repete indefinidamente, resultando em uma impressão contínua do número -1.

Portanto, a alternativa correta é a letra A, pois o código entrará em um loop infinito imprimindo o número -1 indefinidamente.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

Vamos analisar o loop passo a passo.

O código:

```csharp

for (int i = 0; --i < 5; i++)

{

  Console.WriteLine(i);

}

```

**Passo 1: inicialização**  

`int i = 0`

**Passo 2: condição**  

`--i < 5`  

Antes de testar a condição, `--i` decrementa `i` em 1.  

Então `i` se torna `0 - 1 = -1`.  

Condição: `-1 < 5` → **verdadeira**.

**Passo 3: executa o corpo**  

`Console.WriteLine(i)` → imprime `-1`.

**Passo 4: incremento**  

`i++` → `i` vira `0`.

**Próxima iteração:**  

Condição: `--i` → `i` vira `0 - 1 = -1` novamente.  

`-1 < 5` → verdadeiro.  

Imprime `-1` de novo.  

`i++` → `i` vira `0` de novo.

Perceba que o valor de `i` no momento de imprimir é sempre `-1`, porque a condição `--i` faz `i` ser `-1` antes de testar, e depois do corpo, `i++` o leva a `0`, e na próxima volta `--i` o torna `-1` novamente.

Isso cria um loop infinito imprimindo `-1`.

---

**Resposta correta: A**

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo