Quiz (Laços)

Teste seu entendimento sobre for, while, break e laços aninhados.

Questão 1 — Contagem de iterações de um laço for

int sum = 0;
for (int i = 1; i <= 5; i++) {
    sum += i;
}
printf("sum = %d\n", sum);

O que isso imprime?

sum = 5
sum = 15
sum = 10
sum = 14
Explicação: O laço executa 5 vezes com i=1,2,3,4,5.
1+2+3+4+5 = 15.

Questão 2 — Término do laço while

int x = 10;
while (x > 0) {
    x -= 3;
}
printf("x = %d\n", x);

O que isso imprime?

x = 0
x = 1
x = -2
x = 3
Explicação: x evolui: 10 → 7 → 4 → 1 → -2.
Quando x=-2, x > 0 é falso e o laço termina. Como x -= 3 subtrai 3 a cada vez, o laço pode ultrapassar zero.

Questão 3 — Comportamento do break

for (int i = 0; i < 10; i++) {
    if (i == 3) break;
    printf("%d ", i);
}

O que isso imprime?

0 1 2 3
0 1 2
0 1 2 3 4 5 6 7 8 9
3
Explicação: Quando i==3, break sai do laço imediatamente. O break acontece antes do printf, então 3 nunca é impresso.
A saída é apenas 0 1 2 (i=0, 1, 2).

Questão 4 — Iterações em laço aninhado

int count = 0;
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 4; j++) {
        count++;
    }
}
printf("count = %d\n", count);

O que isso imprime?

count = 7
count = 12
count = 3
count = 4
Explicação: Laço externo 3 vezes × laço interno 4 vezes = 12 iterações.
Em laços aninhados, o total de iterações é externo × interno.

Questão 5 — A diferença entre < e <=

int count = 0;
for (int i = 1; i <= 5; i++) {
    count++;
}
printf("count = %d\n", count);

O que isso imprime?

count = 4
count = 5
count = 6
count = 1
Explicação: i <= 5 inclui i=5, então o laço executa para i=1, 2, 3, 4, 5 — 5 iterações.
  • for (i=1; i<=5; i++) → 5 iterações (i=1..5)
  • for (i=1; i<5; i++) → 4 iterações (i=1..4)
Alternar entre < e <= muda a contagem em um — um erro clássico de "off-by-one".

Questão 6 — Como o continue se comporta

for (int i = 0; i < 5; i++) {
    if (i == 2) continue;
    printf("%d ", i);
}

O que isso imprime?

0 1
0 1 2 3 4
0 1 3 4
2
Explicação: continue pula apenas a iteração atual e vai para a próxima.
  • break: sai do laço inteiro
  • continue: pula o resto desta iteração e segue adiante
Quando i=2, o printf é pulado, então a saída é 0 1 3 4.

Questão 7 — do-while executa pelo menos uma vez

int i = 10;
do {
    printf("%d ", i);
    i++;
} while (i < 5);

O que isso imprime?

(nada)
10
10 11 12 13 14
Laço infinito
Explicação: Num laço do-while, a condição é verificada no final de cada iteração.
  • O corpo sempre executa pelo menos uma vez
  • A primeira iteração imprime i=10, depois i se torna 11
  • 11 < 5 é falso, então o laço termina
Um while simples nunca entraria no corpo porque a condição já é falsa desde o início. Um do-while sempre executa pelo menos uma vez.

Questão 8 — Qual é um laço infinito?

// Qual dos seguintes é um laço infinito?
// A) for (int i = 0; i < 10; i++) { ... }
// B) while (1) { ... }  // sem break
// C) for (int i = 0; i < 10; ) { i++; }
// D) int i = 0; while (i < 10) { i++; }

Qual é um laço infinito?

A
B
C
D
Explicação: A condição em while (1) é sempre verdadeira, então nunca termina a menos que você faça break.
  • A: sai quando i chega a 10 (10 iterações)
  • B: sempre verdadeiro → laço infinito
  • C: o corpo incrementa i, então termina em 10
  • D: i++ avança i, então termina
Laços infinitos são usados intencionalmente em coisas como event loops — só garanta que sempre haja uma condição de saída (um break).

Questão 9 — break dentro de laços aninhados

int count = 0;
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
        if (j == 2) break;
        count++;
    }
}
printf("count = %d\n", count);

O que isso imprime?

count = 9
count = 6
count = 3
count = 0
Explicação: break sai apenas do laço mais interno que o contém; o laço externo continua.
  • Laço interno: count++ executa para j=0 e j=1, depois break em j=2
  • Ou seja, cada passada interna faz count++ duas vezes
  • Laço externo 3 vezes × interno 2 vezes = 6
Para sair também do laço externo, use uma variável flag, um goto, ou extraia o código para uma função e dê return.

Questão 10 — Contagem regressiva com i--

Colocar i-- no passo de atualização de um laço for permite contar em ordem decrescente.
for (int i = 5; i >= 0; i--) {
    printf("%d ", i);
}

O que isso imprime?

0 1 2 3 4 5
5 4 3 2 1 0
5 4 3 2 1
Laço infinito
Explicação: Decompondo as três partes do for:
  • Inicialização: i = 5 (começa em 5)
  • Condição: i >= 0 (continua enquanto ≥ 0)
  • Atualização: i-- (decrementa 1 a cada iteração)
i é impresso como 5, 4, 3, 2, 1, 0. Quando i se torna -1 a condição é falsa → o laço termina → 5 4 3 2 1 0.
Quando usar: percorrer um vetor de trás para frente, displays de contagem regressiva, inverter dados e assim por diante.

Questão 11 — for(;;) como laço infinito

Todas as três partes de um laço for podem ser omitidas. O que acontece quando são?
int count = 0;
for (;;) {
    count++;
    if (count == 3) break;
}
printf("count = %d\n", count);

O que isso imprime?

count = 0 (o laço não executa)
Erro de compilação
count = 3
Laço infinito, nunca para
Explicação: for (;;) tem as três partes omitidas:
  • Sem inicialização
  • Sem condição → tratada como sempre verdadeira
  • Sem atualização
É o idiom padrão para um laço infinito (equivalente a while (1)).
Aqui, o if (count == 3) break; dentro do corpo fornece a saída. Quando count chega a 3 o laço termina e "count = 3" é impresso.
Quando usar: laços de espera de menu, esperas por eventos — qualquer caso em que a condição de saída se encaixa mais naturalmente dentro do corpo.

Questão 12 — Passo de 2 em 2 com i += 2

Mudar o passo de atualização de i++ para outra coisa permite alterar a distância entre valores.
for (int i = 0; i <= 10; i += 2) {
    printf("%d ", i);
}

O que isso imprime?

0 1 2 3 4 5 6 7 8 9 10
1 3 5 7 9
0 2 4 6 8 10
2 4 6 8 10
Explicação: As três partes do laço for:
  • Inicialização: i = 0
  • Condição: i <= 10 (até 10 inclusive)
  • Atualização: i += 2 (soma 2 a cada iteração)
i avança 0, 2, 4, 6, 8, 10. O próximo valor (12) falha na condição → o laço termina → 0 2 4 6 8 10.
Obs.: Como usamos <= 10, 10 é incluído. Trocando para < 10, ele é excluído, ficando "0 2 4 6 8".
Quando usar: processar apenas números pares, amostrar a cada terceiro pixel, ou andar para trás com i -= 3.

Resultado

Responda todas as questões para ver sua pontuação.
Início