Carregando
0x60Lição 7 de 20

Laços: while, for, do-while

Repita trabalho com laços, controle-os com break e continue e evite o clássico erro de um a mais ou a menos.

14 min Questionário com 6 perguntas 2 exercícios de código
Ao final desta lição, você saberá
  • Escrever laços while, for e do-while
  • Escolher o laço certo para cada tarefa
  • Usar break e continue e perceber erros de um a mais ou a menos

Computadores são bons em fazer a mesma coisa muitas vezes. Um laço repete um bloco de código enquanto uma condição continua verdadeira. O C tem três tipos.

while

countdown.c
1#include <stdio.h>
2
3int main(void) {
4    int n = 3;
5    while (n > 0) {
6        printf("%d...\n", n);
7        n--;
8    }
9    printf("Liftoff!\n");
10    return 0;
11}
Saída
3...
2...
1...
Liftoff!

Um laço while verifica a condição antes de cada passada. Se a condição for falsa desde o início, o corpo nunca roda. Algo dentro do corpo precisa, em algum momento, tornar a condição falsa - aqui, n-- -, senão o laço roda para sempre.

for

Laços de contagem são tão comuns que o C tem uma forma dedicada que coloca a preparação, a condição e a atualização numa única linha:

squares.c
1#include <stdio.h>
2
3int main(void) {
4    for (int i = 1; i <= 5; i++) {
5        printf("%d squared is %d\n", i, i * i);
6    }
7    return 0;
8}
Saída
1 squared is 1
2 squared is 4
3 squared is 9
4 squared is 16
5 squared is 25

for (init; condition; update) roda o init uma vez e depois repete: verifica a condition, roda o corpo, roda o update. Declarar int i dentro dos parênteses mantém o escopo dela restrito ao laço, o que é uma boa prática.

Acumulando um resultado

Um padrão muito comum: começar uma variável num valor neutro e atualizá-la a cada passada. A soma começa em 0, o produto em 1, o máximo no primeiro valor.

sum.c
1#include <stdio.h>
2
3int main(void) {
4    int sum = 0;
5    for (int i = 1; i <= 100; i++) {
6        sum += i;
7    }
8    printf("1 + 2 + ... + 100 = %d\n", sum);
9    return 0;
10}
Saída
1 + 2 + ... + 100 = 5050

do-while

Um laço do { ... } while (condition); verifica a condição depois do corpo, então o corpo sempre roda pelo menos uma vez. Ele combina com "faça algo e depois decida se repete" - como pedir uma entrada até ela ser válida. Repare no ponto e vírgula depois do while (...) de fechamento.

break e continue

O break sai do laço imediatamente. O continue pula o resto da passada atual e vai para a próxima (num laço for, a atualização ainda roda).

skip.c
1#include <stdio.h>
2
3int main(void) {
4    for (int i = 1; i <= 10; i++) {
5        if (i % 2 == 0) {
6            continue;   // skip even numbers
7        }
8        if (i > 7) {
9            break;      // stop entirely
10        }
11        printf("%d ", i);
12    }
13    printf("\n");
14    return 0;
15}
Saída
1 3 5 7

Laços aninhados

Um laço pode conter outro laço. O laço interno roda por completo a cada passada do externo - perfeito para grades e tabelas:

triangle.c
1#include <stdio.h>
2
3int main(void) {
4    for (int row = 1; row <= 4; row++) {
5        for (int col = 1; col <= row; col++) {
6            printf("*");
7        }
8        printf("\n");
9    }
10    return 0;
11}
Saída
*
**
***
****

Principais conclusões

  • O while verifica primeiro; o do-while roda pelo menos uma vez; o for junta inicialização, condição e atualização para laços de contagem.

  • for (int i = 0; i < n; i++) roda exatamente n vezes. Confira o primeiro e o último valor para evitar erros de um a mais ou a menos.

  • O break sai do laço; o continue pula para a próxima passada. Garanta que todo laço possa terminar.

Quiz da aula

6 perguntas · aprovação com 5 acertos · até 50 XP

Ao passar, você conclui a aula e mantém sua sequência. As perguntas erradas voltarão em sessões de revisão.

Pratique: escreva código em C

Estes exercícios rodam de verdade. Escreva o programa, clique em “Executar testes” e leia o que o compilador informa: aprender a ler as mensagens do compilador é metade do aprendizado de C.

Exercício 1

Tabuada

+25 XP

Leia um inteiro n e imprima a tabuada dele de 1 a 5, uma linha para cada, formatada exatamente assim para n = 7:

17 x 1 = 7
27 x 2 = 14
37 x 3 = 21
47 x 4 = 28
57 x 5 = 35
  • Tabuada do 7
  • Tabuada do 3
main.c
Carregando editor…

Seu código é compilado com gcc 14 (-Wall -Wextra) e executado no Compiler Explorer (godbolt.org), um serviço público gratuito.

Exercício 2

Soma dos dígitos

+25 XP

Leia um inteiro não negativo e imprima a soma dos dígitos dele. Para 4096, a resposta é 19 (4 + 0 + 9 + 6).

Use um laço while com % 10 (último dígito) e / 10 (descartar o último dígito).

  • 4096
  • 7
  • 0
main.c
Carregando editor…

Seu código é compilado com gcc 14 (-Wall -Wextra) e executado no Compiler Explorer (godbolt.org), um serviço público gratuito.

Dúvidas sobre esta lição

Travou em algum ponto? Pergunte. Descobriu algo? Compartilhe. Explicar também é uma ótima forma de aprender.

Carregando publicações…