C++: Instruções Condicionais

Última atualização: 2026-08-26

Nas aulas anteriores, os programas executavam de cima para baixo sem ramificações.

Mas programas reais precisam "tomar decisões" — por exemplo:

  • Se a nota é >= 60, exibir "Aprovado"; caso contrário exibir "Reprovado"
  • Se é fim de semana, sair para se divertir; caso contrário, estudar

É para isso que servem as instruções condicionais.


1. A Instrução if

(1) 1.1 Sintaxe Básica

TEXT 📖 Somente leitura
if (condition) {
 // código a executar quando a condição é verdadeira
}

Fluxo de execução:

  1. Avalia a condition (deve ser tipo bool ou conversível para bool)
  2. Se true, executa o código dentro das chaves
  3. Se false, pula

▶ Exemplo 1: Verificar Par ou Ímpar (Dificuldade ⭐)

CPP
#include <iostream>

int main() {
 int num;
 std::cout << "Please enter an integer: ";
 std::cin >> num;
 
 if (num % 2 == 0) {
 std::cout << num << " is Even" << std::endl;
 }
 
 if (num % 2 != 0) {
 std::cout << num << " is Odd" << std::endl;
 }
 
 return 0;
}
▶ Experimente

Saída:

TEXT 📖 Somente leitura
Please enter an integer: 
 is Even
 is Odd

Resultado da execução:

TEXT 📖 Somente leitura
Please enter an integer: 7
7 is Odd

💡 Dica: O programa acima usa duas instruções if, mas poderia ser simplificado com if-else (veja a próxima seção).



2. A Instrução if-else

(1) 2.1 Sintaxe Básica

TEXT 📖 Somente leitura
if (condition) {
 // executa quando a condição é verdadeira
} else {
 // executa quando a condição é falsa
}

Ponto-chave: Exatamente uma das duas ramificações será executada, nunca ambas e nunca nenhuma.

▶ Exemplo 2: Verificar Par ou Ímpar (Melhorado) (Dificuldade ⭐)

CPP
#include <iostream>

int main() {
 int num;
 std::cout << "Please enter an integer: ";
 std::cin >> num;
 
 if (num % 2 == 0) {
 std::cout << num << " is Even" << std::endl;
 } else {
 std::cout << num << " is Odd" << std::endl;
 }
 
 return 0;
}
▶ Experimente

Saída:

TEXT 📖 Somente leitura
Please enter an integer: 
 is Even
 is Odd

(2) 2.2 Omitindo Chaves (Não Recomendado)

Se houver apenas uma instrução após if ou else, você pode omitir as chaves:

TEXT 📖 Somente leitura
if (num % 2 == 0)
 std::cout << "Even" << std::endl; // ✅ Apenas uma instrução, chaves podem ser omitidas
else
 std::cout << "Odd" << std::endl;

💡 Porém! Isso é fortemente desencorajado — omitir chaves facilmente leva a erros:

CPP
if (num % 2 == 0)
 std::cout << "Even" << std::endl;
 std::cout << "This number is divisible by 2" << std::endl; // ❌ Esta linha sempre executa (a indentação te enganou)

Prática recomendada: Sempre use chaves, mesmo para uma única instrução.



3. A Cadeia if-else if-else

Quando há múltiplas condições para verificar, use else if:

TEXT 📖 Somente leitura
if (condition1) {
 // executa quando condition1 é verdadeira
} else if (condition2) {
 // executa quando condition1 é falsa e condition2 é verdadeira
} else if (condition3) {
 // executa quando condições 1 e 2 são falsas e condition3 é verdadeira
} else {
 // executa quando nenhuma das condições acima é verdadeira
}

💡 Ponto-chave: Uma vez que uma condição é verdadeira, as ramificações else if e else subsequentes não serão executadas.

▶ Exemplo 3: Classificação de Notas (Dificuldade ⭐⭐)

CPP
#include <iostream>

int main() {
 int score;
 std::cout << "Please enter a score (0-100): ";
 std::cin >> score;
 
 if (score >= 90) {
 std::cout << "Excellent! Grade: A" << std::endl;
 } else if (score >= 80) {
 std::cout << "Good! Grade: B" << std::endl;
 } else if (score >= 70) {
 std::cout << "Medium! Grade: C" << std::endl;
 } else if (score >= 60) {
 std::cout << "Pass! Grade: D" << std::endl;
 } else {
 std::cout << "Not Pass! Grade: F" << std::endl;
 }
 
 return 0;
}
▶ Experimente

Saída:

TEXT 📖 Somente leitura
Please enter a score (0-100): 
Excellent! Grade: A
Good! Grade: B
Medium! Grade: C
Pass! Grade: D
Not Pass! Grade: F

Resultado da execução:

TEXT 📖 Somente leitura
Please enter a score (0-100): 85
Good! Grade: B

💡 Técnica: else if (score >= 80) inclui implicitamente a condição score < 90 (porque se score >= 90 fosse verdadeiro, o programa não chegaria a este ponto).



4. if Aninhado

Uma instrução if pode conter outro if dentro dela — isso é chamado de aninhamento.

▶ Exemplo 4: Verificador de Ano Bissexto (Dificuldade ⭐⭐)

CPP
#include <iostream>

int main() {
 int year;
 std::cout << "Please enter a year: ";
 std::cin >> year;
 
 if (year % 400 == 0) {
 std::cout << year << " is a leap year" << std::endl;
 } else {
 if (year % 4 == 0) {
 if (year % 100 != 0) {
 std::cout << year << " is a leap year" << std::endl;
 } else {
 std::cout << year << " is not a leap year" << std::endl;
 }
 } else {
 std::cout << year << " is not a leap year" << std::endl;
 }
 }
 
 return 0;
}
▶ Experimente

Saída:

TEXT 📖 Somente leitura
Please enter a year: 
 is a leap year
 is a leap year
 is not a leap year
 is not a leap year

💡 Dica: Este programa pode ser simplificado usando operadores lógicos (aprendidos na Aula 04):

CPP
bool isLeapYear = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
if (isLeapYear) {
 std::cout << year << " is a leap year" << std::endl;
} else {
 std::cout << year << " is not a leap year" << std::endl;
}


5. A Instrução switch-case

Quando a condição é uma comparação de igualdade inteira, você pode usar switch-case em vez de uma cadeia if-else if.

(1) 5.1 Sintaxe Básica

TEXT 📖 Somente leitura
switch (expression) {
 case value1:
 // executa quando expression == value1
 break;
 case value2:
 // executa quando expression == value2
 break;
 ...
 default:
 // executa quando nenhuma das acima corresponde
 break;
}

▶ Exemplo 5: Calculadora Simples (Dificuldade ⭐⭐)

CPP
#include <iostream>

int main() {
 double num1, num2;
 char op;
 
 std::cout << "Please enter the first number: ";
 std::cin >> num1;
 
 std::cout << "Please enter an operator (+ - * /): ";
 std::cin >> op;
 
 std::cout << "Please enter the second number: ";
 std::cin >> num2;
 
 switch (op) {
 case '+':
 std::cout << num1 << " + " << num2 << " = " << num1 + num2 << std::endl;
 break;
 case '-':
 std::cout << num1 << " - " << num2 << " = " << num1 - num2 << std::endl;
 break;
 case '*':
 std::cout << num1 << " * " << num2 << " = " << num1 * num2 << std::endl;
 break;
 case '/':
 if (num2 != 0) {
 std::cout << num1 << " / " << num2 << " = " << num1 / num2 << std::endl;
 } else {
 std::cout << "Error: Divisor cannot be 0!" << std::endl;
 }
 break;
 default:
 std::cout << "Error: Unsupported operator!" << std::endl;
 break;
 }
 
 return 0;
}
▶ Experimente

Saída:

TEXT 📖 Somente leitura
Please enter the first number: 
Please enter an operator (+ - * /): 
Please enter the second number: 
 +  = 
 -  = 
 *  = 
 /  = 
Error: Divisor cannot be 0!
Error: Unsupported operator!

(2) 5.2 O Papel do break

break é usado para sair da instrução switch. Se você esquecer de escrever break, o programa continuará executando o próximo case (isso é chamado de "fall-through").

CPP
int day = 2;

switch (day) {
 case 1:
 std::cout << "Monday" << std::endl;
 // ❌ Sem break, continuará para o case 2
 case 2:
 std::cout << "Tuesday" << std::endl;
 break;
 case 3:
 std::cout << "Wednesday" << std::endl;
 break;
}
// Saída:
// Tuesday

💡 Dica: Às vezes usar fall-through intencionalmente pode simplificar o código (ex: múltiplos cases executando o mesmo código), mas adicione um comentário para explicar.

CPP
char grade = 'B';

switch (grade) {
 case 'A':
 case 'B': // Fall-through intencional: A e B executam o mesmo código
 case 'C':
 std::cout << "Passed!" << std::endl;
 break;
 case 'D':
 case 'F':
 std::cout << "Failed..." << std::endl;
 break;
}


6. O Operador Condicional (Operador Ternário)

C++ tem uma "abreviação" para if-else chamada operador ternário.

(1) 6.1 Sintaxe Básica

TEXT 📖 Somente leitura
condition ? expression1 : expression2

Significado: Se a condição for verdadeira, retorna o valor de expression1; caso contrário, retorna o valor de expression2.

▶ Exemplo 6: Encontrar o Valor Máximo (Dificuldade ⭐)

CPP
#include <iostream>

int main() {
 int a = 10, b = 20;
 
 int max = (a > b) ? a : b; // Se a > b é verdadeiro, max = a; caso contrário max = b
 
 std::cout << "Maximum is: " << max << std::endl; // Saída: Maximum is: 20
 
 return 0;
}
▶ Experimente

Saída:

TEXT 📖 Somente leitura
Maximum is: 20

💡 Dica: O operador ternário é adequado para atribuições condicionais simples. Se a lógica for complexa, if-else é mais claro.



7. Prática: Jogo de Adivinhação de Números

▶ Exemplo 7: Adivinhe o Número (Dificuldade ⭐⭐)

CPP
#include <iostream>
#include <cstdlib> // Para rand() e srand()
#include <ctime> // Para time()

int main() {
 // Usa tempo atual como semente aleatória (coberto em detalhes mais tarde)
 std::srand(static_cast<unsigned int>(std::time(nullptr)));
 
 int secretNumber = std::rand() % 100 + 1; // Gera número aleatório 1-100
 int guess;
 int attempts = 0;
 
 std::cout << "========== Number Guessing Game ==========\n";
 std::cout << "I'm thinking of a number from 1-100. Try to guess!\n\n";
 
 do {
 std::cout << "Please enter your guess: ";
 std::cin >> guess;
 attempts++;
 
 if (guess > secretNumber) {
 std::cout << "Too high!Try again。\n";
 } else if (guess < secretNumber) {
 std::cout << "Too low!Try again。\n";
 } else {
 std::cout << "\n🎉 Congratulations! You got it!\n";
 std::cout << "You guessed  " << attempts << " time。\n";
 }
 
 } while (guess != secretNumber);
 
 return 0;
}
▶ Experimente

Saída:

TEXT 📖 Somente leitura
========== Number Guessing Game ==========

I'm thinking of a number from 1-100. Try to guess!


Please enter your guess: 
Too high!Try again。

Too low!Try again。


🎉 Congratulations! You got it!

You guessed  times。

Resultado da execução:

TEXT 📖 Somente leitura
========== Number Guessing Game ==========
I'm thinking of a number from 1-100. Try to guess!

Please enter your guess: 50
Too high!Try again。
Please enter your guess: 25
Too low!Try again。
Please enter your guess: 37
Too high!Try again。
Please enter your guess: 31
🎉 Congratulations! You got it!
You guessed  4 time。

💡 Dica: Este programa usa um loop do-while (coberto em detalhes na Aula 07) — você pode copiá-lo por enquanto e entender a abordagem geral.


❓ Perguntas Frequentes

P: Por que if (x = 5) não causa erro? R: A expressão de atribuição x = 5 tem o valor 5 (não-zero é tratado como verdadeiro), então a condição é sempre verdadeira. Técnica anti-bug: coloque a constante do lado esquerdo — if (5 = x) causará erro de compilação, if (5 == x) está correto. P: Posso escrever um inteiro diretamente após if? Tipo if (5)? R: Sim. Em C++, 0 é tratado como falso e não-zero como verdadeiro. Mas isso não é intuitivo e não é recomendado. P: switch-case pode verificar números de ponto flutuante? R: Não. A expressão switch deve ser um tipo inteiro (int, char, enum). Para comparações de ponto flutuante, use if-else, e esteja atento a problemas de precisão de ponto flutuante. P: Por que minha cadeia if-else só executa o primeiro if? R: Geralmente a condição está errada ou há um problema de escopo de chaves. Dica de depuração: adicione marcadores std::cout em cada ramificação para ver qual o programa alcança.


📖 Resumo


📝 Exercícios

  1. Básico (Dificuldade ⭐): Escreva um programa que permita ao usuário digitar um inteiro e determine se é positivo, negativo ou zero.
TEXT 📖 Somente leitura
Please enter an integer: -5
-5 isNegative number
  1. Intermediário (Dificuldade ⭐⭐): Escreva um programa que permita ao usuário digitar um ano e determine se é bissexto.

  2. Regra de ano bissexto: divisível por 4 mas não por 100, OU divisível por 400

  3. Implemente usando if-else

  4. Desafio (Dificuldade ⭐⭐⭐): Escreva um programa que implemente uma "calculadora simples":

  5. Deixe o usuário digitar dois números e um operador (+ - * /)

  6. Implemente usando switch-case

  7. Se o divisor for 0, exiba um erro

  8. Se o operador não for suportado, exiba um erro

  9. Resultado da execução:

TEXT 📖 Somente leitura
Please enter the first number: 10
Please enter an operator: /
Please enter the second number: 3
Result: 10 / 3 = 3.33333

8. 🚀 Próximo Passo

Agora que você aprendeu instruções condicionais, a seguir vamos aprender estruturas de repetição (for, while, do-while) (Aula 07) — permitindo que programas repitam código sem precisar escrevê-lo 100 vezes manualmente!

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%