Respostas
Gabarito Comentado: Lista de Exercícios de Estruturas Condicionais
Fundamentos: if, else if, else
Nesta seção, focamos no trio essencial para tomar decisões no código.
1. Pode votar?
Crie um programa que diga se uma pessoa pode votar com base na idade (idade mínima para votar: 16).
Gabarito Comentado:
// 01_pode_votar.js
let idade = 20; // Altere este valor para testar
if (idade >= 16) {
// A condição (idade >= 16) verifica se a idade é maior ou igual a 16.
// Se for 'true', este bloco é executado.
console.log("Você pode votar!");
} else {
// Se a condição for 'false', o bloco 'else' é executado.
console.log("Você ainda não pode votar.");
}
💡 Dica: Este é o uso mais clássico do if/else
. Temos uma condição e duas respostas possíveis: uma para o caso verdadeiro e outra para o falso.
2. Par ou Ímpar?
Peça um número e diga se ele é par ou ímpar.
Gabarito Comentado:
// 02_par_ou_impar.js
let numero = 7; // Altere este valor para testar
// O operador de módulo (%) retorna o resto de uma divisão.
// Um número é par se o resto da sua divisão por 2 for exatamente 0.
if (numero % 2 === 0) {
console.log(`O número ${numero} é Par.`);
} else {
// Se o resto não for 0, o número é ímpar.
console.log(`O número ${numero} é Ímpar.`);
}
🧠 Como o computador pensa: O segredo aqui é o operador %
(módulo). Ele é perfeito para descobrir se um número é divisível por outro.
3. Nota de aprovação
Dada uma nota entre 0 e 10, diga se o aluno foi aprovado (nota maior que 7), em recuperação (nota entre 5 e 7), ou reprovado (menor que 5).
Gabarito Comentado:
// 03_nota_aprovacao.js
let nota = 6.5; // Altere este valor para testar
if (nota >= 7) {
// Primeira verificação: a nota é suficiente para aprovação?
console.log("Aprovado! Parabéns! 🎉");
} else if (nota >= 5) {
// Se não foi aprovado, verificamos se ao menos é suficiente para recuperação.
// Este bloco só é testado se o primeiro 'if' for falso.
console.log("Em recuperação. Você consegue! 💪");
} else {
// Se nenhuma das condições acima for verdadeira, o aluno está reprovado.
console.log("Reprovado. Não desista! 📚");
}
⚠️ Atenção: A ordem do if/else if
é crucial! Se invertêssemos e testássemos nota >= 5
primeiro, um aluno com nota 8 seria considerado "em recuperação", pois 8 também é maior que 5. O código pararia na primeira condição verdadeira.
4. Pode dirigir?
Crie um programa que diga se a pessoa pode dirigir com base na idade (≥ 18).
Gabarito Comentado:
// 04_pode_dirigir.js
let idadeParaDirigir = 18; // Altere este valor para testar
if (idadeParaDirigir >= 18) {
console.log("Pode dirigir! 🚗");
} else {
console.log("Ainda não pode dirigir. 🚶");
}
💡 Dica: Similar ao exercício de votação, este reforça a estrutura if/else
para uma verificação simples de idade.
5. Temperatura do dia
Dada a temperatura, mostre mensagens específicas.
Gabarito Comentado:
// 05_temperatura_dia.js
let temperatura = 22; // Altere este valor para testar
if (temperatura < 10) {
console.log("Muito frio ❄️");
} else if (temperatura <= 25) {
// Se a temperatura não é menor que 10, ela já é >= 10.
// Então, só precisamos checar se ela é menor ou igual a 25 para definir o intervalo.
console.log("Temperatura agradável 🌤️");
} else {
// Se não caiu em nenhuma das condições anteriores, é porque é maior que 25.
console.log("Muito calor 🔥");
}
🧠 Como o computador pensa: O else if
é eficiente aqui. O programa só avalia a segunda condição se a primeira for falsa, criando uma lógica de funil.
🔁 Praticando com situações do dia a dia
Aqui, aplicamos a lógica em cenários mais concretos.
6. Verificar login
Verifique se o usuário e a senha estão corretos. Use
===
.
Gabarito Comentado:
// 06_verificar_login.js
const usuarioCorreto = "admin";
const senhaCorreta = "senha123";
let usuarioDigitado = "admin";
let senhaDigitada = "senha123";
// O operador '&&' (E) exige que AMBAS as condições sejam verdadeiras.
// Usamos '===' para garantir que tanto o valor quanto o tipo são iguais.
if (usuarioDigitado === usuarioCorreto && senhaDigitada === senhaCorreta) {
console.log("Login efetuado com sucesso! ✅");
} else {
console.log("Usuário ou senha incorretos. ❌");
}
✅ Boas práticas: Usar ===
(igualdade estrita) previne erros de conversão de tipo. Comparar "123"
com 123
com ===
resulta em false
, o que é mais seguro.
7. Promoção de cinema
Defina o preço da entrada com base na idade.
Gabarito Comentado:
// 07_promocao_cinema.js
let idadeCliente = 15; // Altere este valor para testar
if (idadeCliente > 60) {
console.log("Entrada gratuita! 🍿");
} else if (idadeCliente >= 13 && idadeCliente <= 17) {
// Aqui combinamos duas condições com '&&' para criar um intervalo.
// A idade precisa ser MAIOR OU IGUAL a 13 E MENOR OU IGUAL a 17.
console.log("Paga meia entrada! 🎟️");
} else {
console.log("Paga inteira! 💵");
}
🔗 Lógica combinada: O operador &&
(E) é perfeito para verificar se um valor está dentro de um intervalo.
8. Desconto em loja
Dê desconto com base no tipo de cliente.
Gabarito Comentado:
// 08_desconto_loja.js
let tipoCliente = "vip"; // Altere para "novo" ou qualquer outra coisa
if (tipoCliente === "vip") {
console.log("Desconto de 20% aplicado! ✨");
} else if (tipoCliente === "novo") {
console.log("Desconto de 10% aplicado! 🎉");
} else {
console.log("Valor cheio. Obrigado pela preferência!");
}
💡 Dica: Este é um ótimo candidato para ser reescrito com switch
, como veremos mais à frente. O if/else if
funciona perfeitamente para comparar strings.
9. Cálculo de Frete (Novo)
Crie uma lógica para uma loja online. O frete é grátis se o valor da compra for superior a R$ 150,00 ou se o cliente for assinante "premium". Caso contrário, o frete deve ser cobrado.
Gabarito Comentado:
// 09_calculo_frete.js
let valorCompra = 120.50;
let isClientePremium = true; // Altere os valores para testar
// A chave aqui é o operador '||' (OU). A condição será verdadeira
// se PELO MENOS UMA das duas afirmações for verdadeira.
if (valorCompra > 150 || isClientePremium === true) {
// O cliente ganha frete grátis se:
// 1. O valor da compra for maior que 150, OU
// 2. O status de cliente premium for verdadeiro.
console.log("Parabéns! Você ganhou Frete Grátis! 🎉");
} else {
// Se nenhuma das duas condições for atendida, o frete é cobrado.
console.log("Frete: R$ 20,00. Adicione mais itens para frete grátis!");
}
🧠 Como o computador pensa: O segredo aqui é o operador ||
(OU). Ele é perfeito para situações onde existem múltiplos caminhos para se chegar a um mesmo benefício. Diferente do &&
(E), que exige que todas as condições sejam verdadeiras, o ||
precisa que apenas uma delas seja.
🧼 Código limpo: Como isClientePremium
já é um valor booleano (true
ou false
), poderíamos simplificar a condição para if (valorCompra >= 150 && isClientePremium)
. O === true
é redundante, mas deixei para fins didáticos.
10. Dia da semana útil ou fim de semana?
Use
.toLowerCase()
eswitch
.
Gabarito Comentado:
// 10_dia_semana.js
let dia = "SáBaDo"; // Altere este valor para testar
// .toLowerCase() converte a string para minúsculas, evitando erros.
// Assim, "Sábado", "sábado" e "SÁBADO" funcionam da mesma forma.
switch (dia.toLowerCase()) {
case "segunda":
case "terça":
case "quarta":
case "quinta":
case "sexta":
// O 'case' sem 'break' "cai" para o próximo, agrupando as condições.
console.log("Dia útil");
break; // O break finaliza a execução do switch.
case "sábado":
case "domingo":
console.log("Fim de semana");
break;
default:
// O 'default' funciona como o 'else', executado se nenhum 'case' combinar.
console.log("Dia inválido");
}
🎯 O poder do switch
: Note como agrupamos vários case
para a mesma saída. Isso deixa o código muito mais limpo do que um if
com múltiplas condições ||
(OU).
🎯 Aprimorando com operadores lógicos e ternário
Vamos refinar nosso código para ser mais conciso e elegante.
11. Mensagem personalizada
Use o operador ternário para uma mensagem simples.
Gabarito Comentado:
// 11_mensagem_personalizada.js
let nome = "Ana";
let idade = 17;
// O operador ternário é uma forma compacta de 'if/else'.
// Estrutura: condição ? valor_se_verdadeiro : valor_se_falso
let mensagem = idade < 18
? `Olá ${nome}, você ainda não é maior de idade.`
: `Bem-vindo(a), ${nome}!`;
console.log(mensagem);
⚡ Ternário em ação: Ideal para atribuições condicionais simples. Em uma única linha, definimos o valor da variável mensagem
.
12. Bateria do celular
Uma cadeia
if/else if
clássica.
Gabarito Comentado:
// 12_bateria_celular.js
let porcentagemBateria = 19; // Altere para testar
if (porcentagemBateria >= 50) {
console.log("Tudo certo com a bateria 🔋");
} else if (porcentagemBateria >= 20) {
console.log("Melhor economizar... 😬");
} else {
console.log("Conecte o carregador AGORA! ⚠️🔌");
}
💡 Dica: Esse exercício é idêntico ao da temperatura e ao da nota. A estrutura é a mesma, só mudam os valores e as mensagens. Isso mostra como a mesma lógica se aplica a problemas diferentes.
13. Verificar presença em aula
Duas condições que precisam ser verdadeiras.
Gabarito Comentado:
// 13_verificar_presenca.js
let frequencia = 80; // em porcentagem
let notaAluno = 7;
if (frequencia > 75 && notaAluno > 6) {
console.log("Aluno aprovado! ✅");
} else {
console.log("Aluno reprovado. ❌");
}
🔗 Lógica combinada: O &&
(E) é essencial aqui. Não adianta ter boa nota com baixa frequência, e vice-versa. As duas condições devem ser satisfeitas.
14. Semáforo
Use
switch
para múltiplas opções de igualdade.
Gabarito Comentado:
// 14_semaforo.js
let cor = "amarelo"; // Altere para "vermelho" ou "verde"
switch (cor) {
case "vermelho":
console.log("Pare");
break;
case "amarelo":
console.log("Atenção");
break;
case "verde":
console.log("Siga");
break;
default:
console.log("Cor inválida");
}
🎯 switch
vs. if
: Este problema poderia ser resolvido com if/else if
, mas o switch
é mais legível e expressa melhor a intenção: comparar uma única variável contra múltiplos valores possíveis.
15. Ternário simples
Decisão rápida em uma linha.
Gabarito Comentado:
// 15_ternario_simples.js
let idadePessoa = 21;
let statusCompra = idadePessoa >= 18 ? "Pode comprar" : "Não pode comprar";
console.log(statusCompra);
⚡ Eficiência: O operador ternário brilha em situações como esta, onde você precisa de uma string ou valor simples baseado em uma única condição.
🧠 Desafios com boas práticas e lógica combinada
Hora de juntar tudo e escrever código de profissional!
16. Comparação de tipos
Teste as diferenças entre
==
e===
.
Gabarito Comentado:
// 16_comparacao_tipos.js
let numero = 10;
let texto = "10";
// '==' (Igualdade Abstrata): Compara apenas o valor, tentando converter os tipos.
// "10" é convertido para o número 10, e 10 == 10 é 'true'.
console.log(`Comparando com '==': ${numero == texto}`); // Resultado: true
// '===' (Igualdade Estrita): Compara o valor E o tipo.
// Como um é 'number' e o outro é 'string', o resultado é 'false'.
console.log(`Comparando com '===': ${numero === texto}`); // Resultado: false
✅ Boas práticas: Use sempre ===
para evitar surpresas com a conversão automática de tipos do JavaScript. É mais seguro e previsível.
17. Verificação aninhada
Um
if
dentro de outroif
.
Gabarito Comentado:
// 17_verificacao_aninhada.js
let maiorDeIdade = true;
let temCNH = false; // Altere para true para testar
if (maiorDeIdade === true) {
console.log("É maior de idade, verificando CNH...");
// Este 'if' só é alcançado se o primeiro 'if' for verdadeiro.
if (temCNH === true) {
console.log("Pode dirigir! ✅");
} else {
console.log("Não tem CNH, não pode dirigir. ❌");
}
} else {
console.log("Não é maior de idade, não pode dirigir. ❌");
}
🪺 Aninhamento: Útil quando uma verificação só faz sentido se uma condição anterior já foi atendida.
18. Reduzindo código com operadores lógicos
Reescreva o código aninhado usando
&&
.
Gabarito Comentado:
// 18_reduzindo_codigo.js
let ehMaiorDeIdade = true;
let possuiCNH = true;
// O código aninhado do exercício anterior pode ser simplificado.
// A condição if (ehMaiorDeIdade && possuiCNH) resume a lógica em uma linha.
// É mais limpo e direto.
if (ehMaiorDeIdade && possuiCNH) {
console.log("Pode dirigir! ✅");
} else {
console.log("Não atende aos requisitos para dirigir. ❌");
}
🧼 Código limpo: Usar &&
em vez de if
s aninhados torna o código menos verboso e mais fácil de ler, desde que a lógica não seja excessivamente complexa.
19. Conversão de letras maiúsculas/minúsculas
Use
.toLowerCase()
comswitch
.
Gabarito Comentado:
// 19_conversao_letras.js
let frutaDigitada = "BaNaNa"; // Altere para testar com "Maçã", "uva", etc.
// .toLowerCase() garante que a comparação no 'switch' sempre funcionará.
switch (frutaDigitada.toLowerCase()) {
case "banana":
console.log("🍌");
break;
case "maçã":
console.log("🍎");
break;
case "laranja":
console.log("🍊");
break;
case "uva":
console.log("🍇");
break;
default:
console.log("Não temos emoji para esta fruta! 😢");
}
🛠️ Robustez: Normalizar a entrada do usuário (como converter para minúsculas) é uma prática fundamental para criar programas que não quebram com pequenas variações de digitação.
20. Calculadora de IMC
Calcule o IMC e classifique o resultado.
Gabarito Comentado:
// 20_calculadora_imc.js
let peso = 70; // em kg
let altura = 1.75; // em metros
// Fórmula do IMC: peso / (altura * altura)
// .toFixed(2) arredonda o resultado para 2 casas decimais.
const imc = (peso / (altura * altura)).toFixed(2);
console.log(`Seu IMC é: ${imc}`);
if (imc < 18.5) {
console.log("Classificação: Abaixo do peso");
} else if (imc < 25) { // Já sabemos que é >= 18.5
console.log("Classificação: Peso ideal");
} else if (imc < 30) { // Já sabemos que é >= 25
console.log("Classificação: Sobrepeso");
} else if (imc < 40) { // Já sabemos que é >= 30
console.log("Classificação: Obesidade");
} else { // Se não for nenhum dos anteriores, é >= 40
console.log("Classificação: Obesidade grave");
}
🧠 Lógica sequencial: Assim como nos exercícios de nota e temperatura, a cadeia if/else if/else
funciona como um filtro. Cada condição só é testada se as anteriores falharam, o que nos permite checar os intervalos de forma simples e eficiente.
Last updated