Estruturas Condicionais em Linguagem C
Compreenda o fluxo de tomada de decisão na Linguagem C utilizando as estruturas if, else if e else, além dos operadores relacionais.
O que é uma Estrutura Condicional?
Até o momento, os algoritmos criados executavam suas linhas de instrução de maneira estritamente sequencial, sem desvios. Com as estruturas condicionais, adicionamos lógica e "tomada de decisão" ao programa.
Esse fluxo permite que o computador escolha caminhos e comandos diferentes baseando-se em condições preestabelecidas que são avaliadas como verdadeiras ou falsas.
Em programação, qualquer comparação lógica complexa sempre será reduzida a apenas dois estados possíveis: Verdadeiro (True) ou Falso (False).
Os Operadores Relacionais
Para construir essas condições lógico-matemáticas em C, utilizamos os operadores relacionais que comparam variáveis e valores:
| Operação | Símbolo em C | Exemplo em C | Significado Lógico |
|---|---|---|---|
| Maior | > | altura > 1.60 | Verifica se a altura é estritamente maior que 1.60 |
| Maior ou igual | >= | salario >= 2500 | Verifica se o salário é igual ou superior a 2500 |
| Menor | < | idade < 18 | Verifica se a idade é estritamente menor que 18 |
| Menor ou igual | <= | velocidade <= 120 | Verifica se a velocidade é de no máximo 120 |
| Igual | == | opcao == 1 | Verifica se a opção é idêntica a 1 (usa-se duplo "=") |
| Diferente | != | codigo != 10 | Verifica se o código não é igual a 10 |
Condicional Simples: O Bloco if
O condicional simples executa as instruções dentro das chaves { } somente quando a expressão lógica avaliada for verdadeira. Se for falsa, todo o bloco é simplesmente ignorado.
Sintaxe:
if (expressao_logica) { // Código executado apenas se a expressão for VERDADEIRA }
Exemplo de Uso:
if (idade < 18) { printf("Menor de idade\n"); }
Condicional Composta: if - else
Quando precisamos definir claramente o que o sistema deve fazer em ambos os casos (se a condição for verdadeira, faça algo; se for falsa, faça outra coisa), usamos a estrutura composta if-else.
Sintaxe:
if (expressao_logica) { // Executado se for VERDADEIRO } else { // Executado se for FALSO }
Exemplo de Uso:
if (idade >= 16) { printf("Pode votar.\n"); } else { printf("Não pode votar.\n"); }
Condicional Encadeada: if - else if - else
Para fluxos com múltiplas condições e mais de duas alternativas possíveis, encadeamos novos testes de condição usando o else if.
Comportamento importante: O compilador de C analisa os testes sequencialmente de cima para baixo. Assim que encontra a primeira condição verdadeira, ele processa o bloco interno e sai imediatamente de toda a estrutura condicional, ignorando as validações seguintes. O bloco else ao fim do código é opcional e serve para acolher qualquer caso que falhou em todas as verificações anteriores.
Sintaxe:
if (expressao_logica_1) { // Executado se a lógica 1 for VERDADEIRA } else if (expressao_logica_2) { // Executado se a lógica 2 for VERDADEIRA } else if (expressao_logica_3) { // Executado se a lógica 3 for VERDADEIRA } else { // Executado se TODAS as lógicas anteriores forem FALSAS }
Dicas de Ouro e Evitando Erros Clássicos
Escopo das Chaves { }
Na Linguagem C, se o bloco de comandos internos após o if ou else tiver apenas uma linha de código, o uso de chaves é opcional. No entanto, é considerada uma prática de codificação muito mais segura utilizá-las sempre.
Lixo de Memória
Ao declarar variáveis como int idade;, o sistema operacional reserva o espaço físico correspondente na memória, mas não apaga o que estava lá antes. Esse conteúdo antigo é conhecido como "lixo de memória". Lembre-se sempre de inicializar ou preencher suas variáveis antes de lê-las para evitar erros inesperados!
Operador de Endereço (&) no scanf
Ao ler dados do teclado via scanf, deve-se usar o caractere & imediatamente antes do nome da variável (exemplo: scanf("%i", &idade);). Ele repassa ao compilador o endereço de memória onde o valor deve ser armazenado.
Comparação (==) vs Atribuição (=)
Muito cuidado: para atribuir um valor, usamos =. Para fazer uma comparação lógica de igualdade, devemos obrigatoriamente usar ==. O uso de apenas um sinal de igual dentro de um teste if (valor = 10) causará um bug lógico, atribuindo 10 à variável e retornando sempre verdadeiro.
Caderno de Exercícios Propostos
Radar de Trânsito
Escreva um programa para monitoramento de tráfego. O programa deve receber via teclado a velocidade atual de um veículo. Caso a velocidade lida ultrapasse 120 km/h, imprima no console a palavra: "MULTADO".
Detecção de Sinal
Construa um algoritmo que leia do teclado um número inteiro de entrada e identifique se ele é positivo (maior que zero) ou negativo (menor que zero).
Situação Eleitoral
Crie um programa que determine a elegibilidade de voto de um cidadão baseado na idade informada, seguindo os parâmetros oficiais:
- Menores de 16 anos: Não pode votar.
- Idades de 16 ou 17 anos: Voto opcional.
- Idades entre 18 e 70 anos completos: Voto obrigatório.
- Maiores de 70 anos: Voto opcional.
Painel de Festival
Um festival de música precisa de um programa gerenciador. Ao ler o código numérico de apresentação, exiba a banda e o palco correspondente conforme o mapeamento:
- Código 10: Dilsinho (Palco Mundo)
- Código 20: Trio Dona Zefa (Palco Forró)
- Código 30: Dj Denis (Palco Funk)
- Código 40: Nós do Morro (Palco Supernova)
Se qualquer outro número for informado, retorne: "Código inválido".
Quitanda de Frutas
Uma quitanda vende peras a R$ 1,20 por unidade. No entanto, se o cliente comprar mais do que uma dúzia (ou seja, 13 unidades ou mais), o valor unitário cai para R$ 1,05. Faça um algoritmo para ler a quantidade de peras adquiridas e calcular o preço final da compra.
Gabarito Comentado (Códigos de Solução)
Solução Exercício 1: Radar de Trânsito
#include <stdio.h> int main() { float velocidade; printf("Digite a velocidade registrada pelo radar (km/h): "); scanf("%f", &velocidade); if (velocidade > 120.0) { printf("MULTADO\n"); } return 0; }
Solução Exercício 2: Detecção de Sinal
#include <stdio.h> int main() { int numero; printf("Digite um numero inteiro: "); scanf("%i", &numero); if (numero > 0) { printf("O numero %i e POSITIVO.\n", numero); } else if (numero < 0) { printf("O numero %i e NEGATIVO.\n", numero); } else { printf("O numero digitado e ZERO.\n"); } return 0; }
Solução Exercício 3: Situação Eleitoral
#include <stdio.h> int main() { int idade; printf("Digite a sua idade: "); scanf("%i", &idade); if (idade < 16) { printf("Nao pode votar.\n"); } else if (idade == 16 || idade == 17) { printf("Voto opcional.\n"); } else if (idade >= 18 && idade <= 70) { printf("Voto obrigatorio.\n"); } else { printf("Voto opcional.\n"); } return 0; }
Solução Exercício 4: Painel de Festival
#include <stdio.h> int main() { int codigo; printf("Digite o codigo da apresentacao: "); scanf("%i", &codigo); if (codigo == 10) { printf("Show: Dilsinho | Palco: Mundo\n"); } else if (codigo == 20) { printf("Show: Trio Dona Zefa | Palco: Forro\n"); } else if (codigo == 30) { printf("Show: Dj Denis | Palco: Funk\n"); } else if (codigo == 40) { printf("Show: Nos do Morro | Palco: Supernova\n"); } else { printf("Codigo invalido!\n"); } return 0; }
Solução Exercício 5: Quitanda de Frutas
#include <stdio.h> int main() { int quantidade; float precoUnitario, precoTotal; printf("Digite a quantidade de peras compradas: "); scanf("%i", &quantidade); if (quantidade > 12) { precoUnitario = 1.05; } else { precoUnitario = 1.20; } precoTotal = quantidade * precoUnitario; printf("Quantidade comprada: %i peras\n", quantidade); printf("Preco por unidade: R$ %.2f\n", precoUnitario); printf("Valor total a pagar: R$ %.2f\n", precoTotal); return 0; }
Materiais Complementares de Apoio
Slides: Estruturas Condicionais em C
Baixe os slides de apoio da aula 3 para ver em detalhes a sintaxe e exemplos de if, else if e else.
Vídeo: Resumo da Aula 3
Assista a um vídeo explicativo com o resumo dos tópicos e práticas desta terceira aula.
Repositório de Código Fonte
Explore, acesse e faça o download de todos os códigos-fonte de exemplo e exercícios estruturados nesta trilha.