🚀 Capítulo 06: Estruturas de Repetição (While, Do-While e For) em C

🎯 Objetivos da Aula

Ao final desta aula, você será capaz de:

  1. Automatizar a repetição de código utilizando o laço while.
  2. Garantir a execução de pelo menos uma iteração com a estrutura do-while.
  3. Construir laços contados e finitos com a estrutura for.
  4. Utilizar break para interromper laços precocemente e continue para saltar iterações.

🧠 1. Estruturas de Repetição em C

Os laços de repetição (loops) permitem executar o mesmo bloco de código repetidas vezes enquanto uma condição permanecer verdadeira.

flowchart TD
    subgraph LoopWhile ["Laço While (Pré-testado)"]
        W_Cond{"Condição é Verdadeira?"} -- SIM --> W_Bloco["Executa Bloco & Atualiza Contador"] --> W_Cond
        W_Cond -- NÃO --> W_Fim([Sai do Loop])
    end

    subgraph LoopDoWhile ["Laço Do-While (Pós-testado)"]
        D_Bloco["Executa Bloco de Código"] --> D_Cond{"Condição é Verdadeira?"}
        D_Cond -- SIM --> D_Bloco
        D_Cond -- NÃO --> D_Fim([Sai do Loop])
    end

Resumo das 3 Estruturas de Laço:

  1. while (condicao): Testa a condição antes de entrar no bloco. Recomendado quando não sabemos o número exato de repetições.
  2. do { ... } while (condicao);: Executa o bloco pelo menos uma vez antes de testar a condição no final (ideal para menus de usuário).
  3. for (inicializacao; condicao; incremento): Condensa inicialização, teste e passo de incremento em uma única linha. Ideal para contagens conhecidas.

💻 2. Prática Guiada: Tabuada e Validação de Entrada em C

Vamos escrever o programa lacos_exemplo.c para demonstrar a utilização do for e do do-while:

#include <stdio.h>
 
int main() {
    int numero = 0;
    
    // 1. Uso do do-while para VALIDAÇÃO DE ENTRADA (Número de 1 a 10)
    do {
        printf("Digite um numero inteiro entre 1 e 10 para ver a tabuada: ");
        scanf("%d", &numero);
        
        if (numero < 1 || numero > 10) {
            printf(">> Numero invalido! Tente novamente.\n");
        }
    } while (numero < 1 || numero > 10);
    
    // 2. Uso do for para a REPETIÇÃO DETERMINADA (1 a 10)
    printf("\n=========================================\n");
    printf("         TABUADA DO NUMERO %d            \n", numero);
    printf("=========================================\n");
    
    for (int i = 1; i <= 10; i++) {
        printf("  %d x %2d = %3d\n", numero, i, numero * i);
    }
    
    printf("=========================================\n");
    
    return 0;
}

⚔️ 3. Desafios Práticos (Exercícios 30/50/20)

🥉 Nível Bronze (Fixação)

  1. Qual a principal diferença de comportamento entre o laço while e o laço do-while?
  2. Para que serve a instrução continue dentro de um laço for?

🥈 Nível Prata (Aplicação)

  1. Escreva um programa em C que utilize um laço while para ler números inteiros digitados pelo usuário até que o número 0 seja digitado. Ao final, exiba o somatório de todos os números digitados.

🥇 Nível Ouro (Desafio)

  1. Escreva um programa que imprima os primeiros 20 números pares utilizando um laço for. Se o número for múltiplo de 10, utilize a instrução printf para destacar “Múltiplo de 10 encontrado!“.

💡 Gabaritos Sanfonados de Resposta

💡 Ver Gabarito do Nível Bronze
  1. O while avalia a condição antes de executar o bloco (pode rodar 0 vezes). O do-while executa o bloco pelo menos 1 vez antes de testar a condição no final.
  2. O continue pula o restante do código da iteração atual e passa diretamente para o próximo passo do laço.
💡 Ver Gabarito do Nível Prata & Ouro (Código C)
#include <stdio.h>
 
int main() {
    int valor = -1;
    int soma = 0;
    
    printf("Digite numeros para somar (0 para encerrar):\n");
    while (valor != 0) {
        printf("Numero: ");
        scanf("%d", &valor);
        soma += valor;
    }
    
    printf("Soma Total: %d\n", soma);
    return 0;
}

📚 Referências Teóricas Oficiais

  • KERNIGHAN, Brian W.; RITCHIE, Dennis M.. A Linguagem de Programação C. 2ª Edição. Campus, 1989. Cap. 3 (Controle de Fluxo — Laços).
  • ISO/IEC 9899:2018. C17 Language Specification — Iteration Statements.

⬅️ Capítulo Anterior (Condicionais) | Voltar ao Sumário | Próximo Capítulo (Arrays e Vetores) ➡️