As estruturas repetitivas, também conhecidas como laços ou loops, são um pilar da programação. Elas permitem que um bloco de comandos seja executado várias vezes, seja por um número definido de vezes ou enquanto uma determinada condição for atendida. Vamos explorar as três estruturas principais: “enquanto”, “para” e “repita-até”.

🔁 Estrutura “Enquanto” (while)

O que é?

A estrutura “enquanto” é um laço de repetição que executa um bloco de comandos continuamente enquanto uma condição específica for verdadeira.

Quando Usar?

É a escolha ideal quando não se sabe previamente a quantidade exata de repetições que o programa precisará executar. A repetição depende de um evento externo, como a digitação de um valor específico pelo usuário (conhecido como valor de sentinela).

Problema Exemplo

Fazer um programa que lê números inteiros até que um zero seja lido. Ao final, o programa deve mostrar a soma de todos os números digitados (exceto o zero).

Exemplo (Novo)

Digite um numero: 10
Digite outro numero: 7
Digite outro numero: 3
Digite outro numero: 0
SOMA = 20

Sintaxe e Regras

enquanto <condição> faca
   // bloco de comandos
fimenquanto
  • Regra: Antes de cada repetição, a <condição> é testada.
    • Se for verdadeira (V), o bloco de comandos executa, e o fluxo volta para o teste da condição.
    • Se for falsa (F), o laço é encerrado, e o programa continua na linha seguinte ao fimenquanto.

Código em Portugol

algoritmo "SomaComEnquanto"
var
   x, soma: inteiro
inicio
   soma <- 0

   escreva("Digite um numero: ")
   leia(x)

   enquanto x <> 0 faca
      soma <- soma + x
      escreva("Digite outro numero: ")
      leia(x)
   fimenquanto

   escreval("SOMA = ", soma)
fimalgoritmo

Código em C

#include <stdio.h>

int main() {
    int x, soma = 0;

    printf("Digite um numero: ");
    scanf("%d", &x);

    while (x != 0) {
        soma = soma + x;
        printf("Digite outro numero: ");
        scanf("%d", &x);
    }

    printf("SOMA = %d\n", soma);

    return 0;
}

💡 Por que soma = 0 já na declaração? Em C, variáveis locais NÃO são inicializadas automaticamente com zero (diferente de atributos de classe em Java) — usar uma variável sem inicializar antes é um bug clássico (comportamento indefinido, “lixo de memória”). Sempre inicialize.

🔢 Estrutura “Para” (for)

O que é?

A estrutura “para” é um laço de repetição projetado para executar um bloco de comandos por um intervalo de valores predefinido ou um número específico de vezes.

Quando Usar?

É recomendada quando se sabe de antemão a quantidade de repetições necessárias. É perfeita para tarefas baseadas em contagem.

Problema Exemplo

Fazer um programa que primeiro lê um valor inteiro N e, depois, lê N números inteiros. Ao final, mostra a soma dos N números lidos.

Exemplo (Novo)

Quantos numeros serao digitados? 4
Digite um numero: 10
Digite um numero: 8
Digite um numero: -3
Digite um numero: 5
SOMA = 20

Sintaxe e Regras

para <variável> de <valor_inicial> ate <valor_final> [passo <incremento>] faca
   // bloco de comandos
fimpara
  • Regras:
    1. Inicialização: A <variável> de controle recebe o <valor_inicial> na primeira vez.
    2. Condição: Se o valor da <variável> não ultrapassou o <valor_final>, o bloco executa. Caso contrário, o laço termina.
    3. Incremento: Ao final de cada repetição, a <variável> é incrementada em 1 (ou pelo valor definido em passo).

Exemplos de Contagem

Contagem Progressiva

para i de 1 ate 3 faca
   escreval("Valor de i: ", i)
fimpara

Saída:

Valor de i: 1
Valor de i: 2
Valor de i: 3

Contagem Regressiva

para i de 3 ate 1 passo -1 faca
   escreval("Valor de i: ", i)
fimpara

Saída:

Valor de i: 3
Valor de i: 2
Valor de i: 1

Código em C

#include <stdio.h>

int main() {
    // Contagem progressiva
    for (int i = 1; i <= 3; i++) {
        printf("Valor de i: %d\n", i);
    }

    // Contagem regressiva
    for (int i = 3; i >= 1; i--) {
        printf("Valor de i: %d\n", i);
    }

    return 0;
}

💡 A anatomia do for em C: for (inicializacao; condicao; incremento) — as três partes ficam explícitas na mesma linha, diferente do para <var> de <inicio> ate <fim> faca do Portugol, onde o incremento (+1 ou o passo) fica implícito. Pra contar pra trás, basta trocar i++ por i-- e a condição de <= para >=.

🎬 Estrutura “Repita-Até” (do-while)

O que é?

A estrutura “repita-até” é um laço de repetição que executa o bloco de comandos pelo menos uma vez, pois a condição de parada só é verificada no final.

Quando Usar?

É menos comum, mas muito útil em situações onde a ação deve ocorrer ao menos uma vez, como em menus interativos onde se pergunta ao usuário se ele deseja realizar a operação novamente.

Problema Exemplo

Fazer um programa para ler uma temperatura em Celsius e mostrar o equivalente em Fahrenheit. Ao final, perguntar se o usuário deseja repetir (s/n). Caso digite “s”, o programa repete.

Fórmula de Conversão

\[F = \frac{9 \times C}{5} + 32\]

Exemplo (Novo)

Digite a temperatura em Celsius: 25.0
Equivalente em Fahrenheit: 77.0
Deseja repetir (s/n)? s
Digite a temperatura em Celsius: 0.0
Equivalente em Fahrenheit: 32.0
Deseja repetir (s/n)? s
Digite a temperatura em Celsius: -5.0
Equivalente em Fahrenheit: 23.0
Deseja repetir (s/n)? n

Sintaxe e Regras

repita
   // bloco de comandos
ate <condição>
  • Regra: O bloco de comandos é executado, e somente depois a <condição> é testada.
    • Se for falsa (F), o laço executa novamente.
    • Se for verdadeira (V), o laço é encerrado. (Note que a lógica é o inverso da estrutura enquanto).

Código em Portugol

algoritmo "ConversorDeTemperatura"
var
   C, F: real
   resp: caractere
inicio
   repita
      escreva("Digite a temperatura em Celsius: ")
      leia(C)
      F <- 9.0 * C / 5.0 + 32.0
      escreval("Equivalente em Fahrenheit: ", F:4:1)
      escreva("Deseja repetir (s/n)? ")
      leia(resp)
   ate resp = "n"
fimalgoritmo

Código em C

#include <stdio.h>

int main() {
    double celsius, fahrenheit;
    char resposta;

    do {
        printf("Digite a temperatura em Celsius: ");
        scanf("%lf", &celsius);

        fahrenheit = 9.0 * celsius / 5.0 + 32.0;
        printf("Equivalente em Fahrenheit: %.1f\n", fahrenheit);

        printf("Deseja repetir (s/n)? ");
        scanf(" %c", &resposta); // o espaço antes de %c descarta o '\n' pendente do scanf anterior

    } while (resposta == 's');

    return 0;
}

💡 Por que do { ... } while e não while { ... }? O do-while de C testa a condição só DEPOIS de rodar o bloco uma vez — igual ao repita...ate do Portugol, e diferente do while comum (Estrutura “Enquanto” acima), que testa ANTES. É a estrutura certa aqui porque o programa precisa perguntar a temperatura pelo menos uma vez, antes de qualquer decisão de repetir.

💡 O espaço em " %c": ao ler um número com scanf("%lf", ...) e depois um caractere com scanf("%c", ...), o \n (Enter) que sobrou no buffer de entrada é lido como se fosse a resposta — um bug clássico em C. O espaço antes de %c instrui o scanf a pular espaços em branco (incluindo quebras de linha) antes de ler o caractere de verdade.

🛠️ Como Executar no Code::Blocks

Você pode compilar e executar todos os exemplos de código em C acima no Code::Blocks (a IDE recomendada para este curso — veja o guia de instalação em Configuração do Ambiente).

  1. Novo Projeto: File > New > Project... > Console Application > C.
  2. Nomeie o Projeto: Dê um nome (ex: EstruturasRepetitivas) e escolha uma pasta.
  3. Cole o Código: Abra o arquivo main.c gerado automaticamente e substitua o conteúdo por um dos exemplos acima.
  4. Compile e Execute: Pressione F9 (ou Build > Build and Run). Uma janela de console (terminal) abrirá mostrando a saída do programa.


🔗 Recursos Pedagógicos do Capítulo

Recurso Descrição Acesso Direto
📊 Slides de Aula Apresentação visual estruturada com diagramas Ver Slides
🧠 Quiz Formativo Teste de fixação com feedback imediato por alternativa Fazer Quiz
💻 Exemplos Práticos Código executável completo e saída no console Ver Exemplos
🧩 Exercícios Progressivos Lista de atividades práticas em 4 níveis Resolver Exercícios

🧭 Navegação do Capítulo: ⬅️ Capítulo Anterior · 📚 Sumário do Módulo · ➡️ Próximo Capítulo