🚀 Capítulo 05: Estruturas Condicionais (If, Else e Switch-Case) em C
🎯 Objetivos da Aula
Ao final desta aula, você será capaz de:
- Controlar o fluxo de execução de um programa C utilizando desvios condicionais
if,else ifeelse. - Utilizar o operador ternário (
condicao ? valor1 : valor2) para atribuições concisas. - Implementar seleções múltiplas de forma limpa usando a estrutura
switch-casee a instruçãobreak. - Evitar erros comuns de escopo e parênteses em blocos de decisão.
🧠 1. Desvio Condicional Simples e Composto (if / else)
A instrução if permite que o programa execute um bloco de código apenas se uma condição for verdadeira. Se a condição for falsa, o bloco else pode oferecer um caminho alternativo.
flowchart TD Inicio([Início]) --> Condicao{"Média >= 7.0?"} Condicao -- SIM --> BlocoIf["Exibe: 'Aprovado!'"] Condicao -- NÃO --> ChecaRec{"Média >= 5.0?"} ChecaRec -- SIM --> BlocoRec["Exibe: 'Recuperação'"] ChecaRec -- NÃO --> BlocoElse["Exibe: 'Reprovado'"] BlocoIf --> Fim([Fim da Decisão]) BlocoRec --> Fim BlocoElse --> Fim
Sintaxe Básica em C:
if (condicao) {
// Bloco executado se a condição for verdadeira (1)
} else if (outraCondicao) {
// Bloco executado se a primeira for falsa e esta for verdadeira
} else {
// Bloco executado se todas as condições anteriores forem falsas (0)
}🔀 2. Seleção Múltipla com switch-case
A estrutura switch-case é ideal para substituir múltiplos if-else quando testamos o valor de uma única variável inteira ou caractere.
#include <stdio.h>
int main() {
int opcao = 0;
printf("--- MENU DO SISTEMA ---\n");
printf("1 - Cadastrar Aluno\n");
printf("2 - Listar Alunos\n");
printf("3 - Emitir Relatorio\n");
printf("0 - Sair\n");
printf("Escolha uma opcao: ");
scanf("%d", &opcao);
switch (opcao) {
case 1:
printf(">> Abrindo tela de cadastro...\n");
break; // O break impede que a execução caia nos cases seguintes!
case 2:
printf(">> Carregando lista de alunos...\n");
break;
case 3:
printf(">> Gerando relatorio em PDF...\n");
break;
case 0:
printf(">> Encerrando o sistema. Ate logo!\n");
break;
default:
printf(">> Opcao invalida! Digite um numero de 0 a 3.\n");
break;
}
return 0;
}💻 3. Prática Guiada: Classificador de Conceito Escolar
Vamos construir um programa em C que calcula a média e atribui um conceito de ‘A’ a ‘F’:
#include <stdio.h>
int main() {
float media = 0.0f;
printf("Digite a media final do aluno (0.0 a 10.0): ");
scanf("%f", &media);
char conceito;
if (media >= 9.0f) {
conceito = 'A';
} else if (media >= 8.0f) {
conceito = 'B';
} else if (media >= 7.0f) {
conceito = 'C';
} else if (media >= 5.0f) {
conceito = 'D';
} else {
conceito = 'F';
}
// Uso do operador ternario para definir o status curto
printf("\n=========================================\n");
printf(" Media informada : %.2f\n", media);
printf(" Conceito Obtido : %c\n", conceito);
printf(" Situacao : %s\n", (media >= 7.0f) ? "APROVADO" : "REPROVADO");
printf("=========================================\n");
return 0;
}⚔️ 4. Desafios Práticos (Exercícios 30/50/20)
🥉 Nível Bronze (Fixação)
- Para que serve a instrução
breakdentro de um blocoswitch-case? O que acontece se ela for omitida? - Como funciona o operador ternario
(a > b) ? a : b?
🥈 Nível Prata (Aplicação)
- Escreva um programa em C que solicite a idade de um cidadão e informe sua classe eleitoral:
- Menor que 16 anos: “Não eleitor”
- Entre 18 e 69 anos: “Eleitor obrigatório”
- Entre 16 e 17 anos OU maior/igual a 70 anos: “Eleitor facultativo”
🥇 Nível Ouro (Desafio)
- Crie uma calculadora simples em C que solicite dois números
floate um caractere representando a operação (+,-,*,/). Utilize a estruturaswitch-casepara realizar a operação correspondente e valide a divisão por zero (exibindo mensagem de erro caso o divisor seja zero).
💡 Gabaritos Sanfonados de Resposta
💡 Ver Gabarito do Nível Bronze
- O
breakencerra a execução doswitch-case. Se for omitido, a execução continua caindo nos cases subsequentes (fall-through), executando códigos indesejados. - É um atalho para um
if-else. Se a condição(a > b)for verdadeira, retornaa; caso contrário, retornab.
💡 Ver Gabarito do Nível Prata & Ouro (Código C)
#include <stdio.h>
int main() {
float n1, n2;
char op;
printf("Digite o primeiro numero: ");
scanf("%f", &n1);
printf("Digite a operacao (+, -, *, /): ");
scanf(" %c", &op);
printf("Digite o segundo numero: ");
scanf("%f", &n2);
switch (op) {
case '+': printf("Resultado: %.2f\n", n1 + n2); break;
case '-': printf("Resultado: %.2f\n", n1 - n2); break;
case '*': printf("Resultado: %.2f\n", n1 * n2); break;
case '/':
if (n2 != 0) {
printf("Resultado: %.2f\n", n1 / n2);
} else {
printf("Erro: Divisao por zero nao permitida!\n");
}
break;
default: printf("Operacao invalida!\n"); break;
}
return 0;
}📚 Referências Teóricas Oficiais
- KERNIGHAN, Brian W.; RITCHIE, Dennis M.. A Linguagem de Programação C. 2ª Edição. Campus, 1989. Cap. 3 (Controle de Fluxo).
- ISO/IEC 9899:2018. C17 Language Specification — Selection Statements.
⬅️ Capítulo Anterior (Operadores) | Voltar ao Sumário | Próximo Capítulo (Laços de Repetição) ➡️