C++: Estruturas de Repetição
Última atualização: 2026-08-26
Suponha que você precise imprimir "Hello" 100 vezes na tela. Como faria?
Copiar e colar 100 linhas de
std::cout << "Hello" << std::endl;? Isso é ridículo.A abordagem de um programador — loops. Deixe o computador repetir um bloco de código até que uma condição seja satisfeita.
1. O Loop for
(1) 1.1 Sintaxe Básica
for (initialization; condition; update) {
// Corpo do loop: repete enquanto a condição for verdadeira
}
Fluxo de execução:
- Inicialização: Executada apenas uma vez (tipicamente usada para declarar a variável do loop)
- Verificar condição: Se verdadeira, executar o corpo do loop; se falsa, sair do loop
- Executar corpo do loop
- Atualização: Após o corpo do loop executar, atualizar a variável do loop
- Voltar ao passo 2
▶ Exemplo 1: Exibir 1-10 (Dificuldade ⭐)
#include <iostream>
int main() {
for (int i = 1; i <= 10; i++) {
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
Saída:
1
2
3
4
5
6
7
8
9
Análise do código:
int i = 1: Inicialização, i começa em 1i <= 10: Condição, o loop continua enquanto i <= 10std::cout << i << " ": Corpo do loop, exibe ii++: Atualização, incrementa i em 1
2. O Loop while
(1) 2.1 Sintaxe Básica
while (condition) {
// Corpo do loop: repete enquanto a condição for verdadeira
}
Fluxo de execução:
- Verificar a condição
- Se verdadeira, executar o corpo do loop
- Voltar ao passo 1
💡 Ponto-chave: O loop while atualiza a variável do loop dentro do corpo do loop!
▶ Exemplo 2: Exibir 1-10 com while (Dificuldade ⭐)
#include <iostream>
int main() {
int i = 1; // Inicialização
while (i <= 10) { // Condição
std::cout << i << " ";
i++; // Atualização (dentro do corpo do loop!)
}
std::cout << std::endl;
return 0;
}
Saída:
1 2 3 4 5 6 7 8 9 10
3. O Loop do-while
(1) 3.1 Sintaxe Básica
do {
// Corpo do loop
} while (condition);
Fluxo de execução:
- Executar o corpo do loop (pelo menos uma vez)
- Verificar a condição
- Se verdadeira, voltar ao passo 1
💡 Ponto-chave: O loop do-while executa pelo menos uma vez!
▶ Exemplo 3: Jogo de Adivinhação de Números (Dificuldade ⭐⭐)
#include <iostream>
#include <cstdlib>
#include <ctime>
int main() {
std::srand(static_cast<unsigned int>(std::time(nullptr)));
int secretNumber = std::rand() % 100 + 1;
int guess;
do {
std::cout << "Guess a number from 1-100: ";
std::cin >> guess;
if (guess > secretNumber) {
std::cout << "Too high!" << std::endl;
} else if (guess < secretNumber) {
std::cout << "Too low!" << std::endl;
}
} while (guess != secretNumber);
std::cout << "🎉 Got it!The answer is " << secretNumber << std::endl;
return 0;
}
Saída:
Guess a number from 1-100:
Too high!
Too low!
🎉 Got it!The answer is 42
💡 Por que usar do-while? Porque o usuário deve adivinhar pelo menos uma vez, então o corpo do loop deve executar pelo menos uma vez.
4. for vs while vs do-while
| Tipo de Loop | Melhor Uso | Característica |
|---|---|---|
| for | Número conhecido de iterações | Inicialização, condição e atualização agrupadas — estrutura clara |
| while | Iterações desconhecidas mas condição conhecida | Variável do loop é atualizada dentro do corpo |
| do-while | Deve executar pelo menos uma vez | Corpo do loop executa pelo menos uma vez |
Conselho de seleção:
- Se você sabe o número de iterações (ex: "exibir 100 vezes"), use for
- Se não sabe o número de iterações mas sabe a condição (ex: "continue adivinhando até acertar"), use while ou do-while
5. break e continue
(1) 5.1 break: Sair do Loop Inteiro
break é usado para encerrar um loop antecipadamente.
Exemplo: Encontrar o primeiro número divisível por 7 (Dificuldade ⭐)
#include <iostream>
int main() {
for (int i = 1; i <= 100; i++) {
if (i % 7 == 0) {
std::cout << "The first number divisible by 7 is: " << i << std::endl;
break; // Sai do loop após encontrar
}
}
return 0;
}
(2) 5.2 continue: Pular Iteração Atual
continue é usado para pular a iteração atual e ir diretamente para a próxima.
Exemplo: Exibir números ímpares de 1-10 (Dificuldade ⭐)
#include <iostream>
int main() {
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
continue; // Se par, pula esta iteração
}
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
6. Loops Aninhados
Um loop pode conter outro loop dentro dele — isso é chamado de loop aninhado.
▶ Exemplo 4: Imprimir Tabuada (Dificuldade ⭐⭐)
#include <iostream>
int main() {
for (int i = 1; i <= 9; i++) { // Loop externo: controla linhas
for (int j = 1; j <= i; j++) { // Loop interno: controla colunas
std::cout << j << " x " << i << " = " << i * j << "\t";
}
std::cout << std::endl; // Nova linha
}
return 0;
}
Saída:
1 x 1 = 1
1 x 2 = 2 2 x 2 = 4
...
💡 Fluxo de execução:
- Loop externo
i = 1: Loop internojvai de 1 a 1, exibe 1 coluna - Loop externo
i = 2: Loop internojvai de 1 a 2, exibe 2 colunas - ...
- Loop externo
i = 9: Loop internojvai de 1 a 9, exibe 9 colunas
7. Loops Infinitos
Se a condição do loop é sempre verdadeira, um loop infinito é formado.
▶ Exemplo 5: Loop Infinito (Dificuldade ⭐)
#include <iostream>
int main() {
while (true) { // Condição é sempre verdadeira
std::cout << "Infinite loop..." << std::endl;
}
return 0; // Esta linha nunca é alcançada
}
Saída:
Infinite loop...
💡 Como parar? Pressione Ctrl + C para encerrar o programa à força.
💡 Loops infinitos são úteis? Sim! Por exemplo, programas de servidor precisam continuar executando e aguardar requisições de usuários.
8. Prática: Calculando Fatoriais
▶ Exemplo 6: Calcular n! (Dificuldade ⭐⭐)
#include <iostream>
int main() {
int n;
std::cout << "Please enter a positive integer: ";
std::cin >> n;
long long factorial = 1; // Use long long para prevenir overflow
for (int i = 1; i <= n; i++) {
factorial *= i;
}
std::cout << n << " ! is: " << factorial << std::endl;
return 0;
}
Saída:
Please enter a positive integer: 5
5 ! is: 120
Resultado da execução:
Please enter a positive integer: 5
5 ! is: 120
💡 Dica: 20! excede a faixa de long long, então mesmo com long long você só pode calcular até 20.
❓ Perguntas Frequentes
P: Os pontos e vírgulas no loop for podem ser omitidos? R: Você pode omitir partes mas não os pontos e vírgulas.
for (; i <= 10; i++)omite a inicialização,for (;;)é um loop infinito (equivalente awhile(true)). P: while e for podem ser convertidos entre si? R: Sim. Qualquer loopforpode ser reescrito comowhile, e vice-versa. Regra de seleção: useforquando você sabe a contagem, usewhilequando você sabe a condição. P: Como break e continue funcionam em loops aninhados? R:breaksó sai do nível atual do loop. Para sair de múltiplos níveis, use uma "variável de flag" ougoto(não recomendado como alternativa).
📖 Resumo
- Loop for: Use quando você sabe o número de iterações
- Loop while: Use quando não sabe o número de iterações mas sabe a condição
- Loop do-while: Use quando o loop deve executar pelo menos uma vez
- break: Sai do loop inteiro
- continue: Pula a iteração atual e vai para a próxima
- Loops podem ser aninhados; o loop interno executa completamente para cada iteração do loop externo
📝 Exercícios
-
Básico (Dificuldade ⭐): Use um loop for para exibir todos os números de 1-100 que são divisíveis por 3.
-
Intermediário (Dificuldade ⭐⭐): Use loops aninhados para imprimir o seguinte padrão:
*
**
***
****
*****
- Desafio (Dificuldade ⭐⭐⭐): Escreva um programa que permita ao usuário digitar um inteiro positivo n, depois exiba n linhas do Triângulo de Pascal.
Please enter number of rows: 5
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
- Loop for: use quando sabe a contagem de iterações
- Loop while: use quando sabe a condição
- Loop do-while: use quando deve executar pelo menos uma vez
- break sai do loop, continue pula a iteração atual
- Em loops aninhados, o loop interno executa completamente para cada iteração do loop externo
9. 🚀 Próximo Passo
Agora que você aprendeu loops, a seguir vamos aprender funções (Aula 08) — empacotando código em módulos reutilizáveis para tornar programas mais limpos e fáceis de manter!