← Questões de Programação

Programação · FGV · 2023

Questão comentada de Programação

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.

Gabarito: A

Em C, o comando for tem a ordem bem definida: primeiro vem a inicializacao, depois a condicao e por fim a expressao de incremento. Parece detalhe, mas em prova isso muda tudo. Aqui, João trocou as expressoes e acabou colocando uma atribuicao no lugar da condicao: `i = i - 1`. Ou seja, a cada volta o valor de i diminui 1 e esse proprio resultado e testado como condicao do laco. Funciona assim: começa com `i = 5`. Na primeira avaliacao da condicao, `i = i - 1` faz i virar 4, e 4 e verdadeiro em C, entao o `printf` exibe 4. Depois vem a terceira expressao, `i >= 0`, que neste caso nao altera i, so gera um valor logico ignorado pelo laco. Na proxima volta, a condicao reduz i para 3, depois para 2, depois para 1. Quando i vale 1, a condicao `i = i - 1` faz i virar 0. E 0 em C significa falso. Resultado: o laco para antes de imprimir o zero. Por isso a sequencia exibida e 4, 3, 2, 1. A FGV adora esse tipo de armadilha com `for`, atribuição no lugar de comparacao e ordem das expressoes. Entao vale guardar a ideia simples: no `for`, a condicao manda no laco, e em C qualquer valor diferente de 0 e tratado como verdadeiro.

Continue treinando

Questões relacionadas