🔄 Capítulo: Estruturas Repetitivas
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 = 0já 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:
- Inicialização: A
<variável>de controle recebe o<valor_inicial>na primeira vez. - Condição: Se o valor da
<variável>não ultrapassou o<valor_final>, o bloco executa. Caso contrário, o laço termina. - Incremento: Ao final de cada repetição, a
<variável>é incrementada em 1 (ou pelo valor definido empasso).
- Inicialização: A
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
forem C:for (inicializacao; condicao; incremento)— as três partes ficam explícitas na mesma linha, diferente dopara <var> de <inicio> ate <fim> facado Portugol, onde o incremento (+1 ou opasso) fica implícito. Pra contar pra trás, basta trocari++pori--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 { ... } whilee nãowhile { ... }? Odo-whilede C testa a condição só DEPOIS de rodar o bloco uma vez — igual aorepita...atedo Portugol, e diferente dowhilecomum (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 comscanf("%lf", ...)e depois um caractere comscanf("%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%cinstrui oscanfa 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).
- Novo Projeto:
File > New > Project... > Console Application > C. - Nomeie o Projeto: Dê um nome (ex:
EstruturasRepetitivas) e escolha uma pasta. - Cole o Código: Abra o arquivo
main.cgerado automaticamente e substitua o conteúdo por um dos exemplos acima. - Compile e Execute: Pressione
F9(ouBuild > 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