Condicionais em C
LidoAula sobre condicionais em C: if/else, operador ternário, aninhamento e boas práticas, com exemplos práticos e exercícios resolvidos.
Nesta aula, vamos explorar as estruturas condicionais em C, fundamentais para controlar o fluxo de execução de um programa. Você aprenderá a usar if, else, o operador ternário e como aninhar condicionais de forma eficiente. Além disso, discutiremos boas práticas para escrever código claro e evitando erros comuns.
As condicionais permitem que seu programa tome decisões baseadas em condições, executando diferentes blocos de código. Dominá-las é essencial para qualquer programador, pois elas estão presentes em praticamente todos os programas reais.
if/else
A estrutura if/else é a forma mais básica de controle condicional em C. Ela avalia uma expressão booleana (verdadeira ou falsa) e executa um bloco de código se a condição for verdadeira, e opcionalmente outro bloco se for falsa.
A sintaxe é simples: if (condição) { bloco } else { bloco }. O else é opcional. Se não houver else e a condição for falsa, o programa simplesmente segue adiante.
#include <stdio.h>
int main() {
int idade = 18;
if (idade >= 18) {
printf("Você é maior de idade.\n");
} else {
printf("Você é menor de idade.\n");
}
return 0;
}
Note que as chaves { } delimitam o bloco. Se você tiver apenas uma instrução, pode omitir as chaves, mas é recomendável sempre usá-las para evitar erros de lógica, especialmente ao adicionar mais linhas depois.
Condições podem ser compostas usando operadores lógicos: && (E), || (OU) e ! (NÃO). Por exemplo:
if (idade >= 18 && possuiCNH) {
printf("Pode dirigir.\n");
}
Operador ternário
O operador ternário é uma forma compacta de escrever um if/else que atribui um valor a uma variável. Sua sintaxe é: condição ? valor_verdadeiro : valor_falso.
Ele é útil quando você precisa atribuir um valor simples com base em uma condição, tornando o código mais conciso.
int a = 10, b = 20;
int maior = (a > b) ? a : b;
printf("O maior é %d\n", maior);
No exemplo acima, se a > b for verdadeiro, maior recebe a; caso contrário, recebe b.
Embora compacto, o operador ternário pode prejudicar a legibilidade quando usado em excesso ou com expressões complexas. Use com moderação e prefira if/else quando a lógica for mais elaborada.
Aninhamento
Aninhar condicionais significa colocar uma estrutura if dentro de outra. Isso é comum quando você precisa verificar múltiplas condições hierárquicas.
int nota = 85;
if (nota >= 60) {
printf("Aprovado. ");
if (nota >= 90) {
printf("Excelente!\n");
} else if (nota >= 75) {
printf("Bom.\n");
} else {
printf("Suficiente.\n");
}
} else {
printf("Reprovado.\n");
}
Nesse exemplo, primeiro verificamos se o aluno foi aprovado; dentro desse bloco, aninhamos outras condições para categorizar a nota.
Aninhamentos profundos podem tornar o código difícil de ler e manter. Procure manter a profundidade em no máximo 2 ou 3 níveis. Se precisar de mais, considere usar funções separadas ou reestruturar a lógica.
Boas práticas
Ao usar condicionais em C, algumas boas práticas ajudam a evitar bugs e melhorar a clareza:
- Use chaves sempre — mesmo para blocos de uma linha, evita erros de associação.
- Evite aninhamento excessivo — prefira estruturas planas ou funções auxiliares.
- Compare na ordem correta — coloque a constante à esquerda em comparações (ex.:
if (10 == x)) para evitar atribuição acidental (if (x = 10)), que é um erro comum. - Use
else ifpara cadeias de condições mutuamente exclusivas — em vez de váriosifindependentes. - Prefira operador ternário apenas para atribuições simples — se a lógica for complexa, use
if/else. - Mantenha as condições simples — se a condição for complexa, atribua-a a uma variável booleana com nome descritivo.
Por exemplo, em vez de:
if (idade >= 18 && (possuiCNH || possuiPermissaoInternacional) && !suspenso) {
// dirigir
}
Escreva:
int podeDirigir = (idade >= 18) && (possuiCNH || possuiPermissaoInternacional) && !suspenso;
if (podeDirigir) {
// dirigir
}
Isso torna a intenção mais clara e facilita a manutenção.
Exercícios
- Escreva um programa que leia um número inteiro e imprima se ele é par ou ímpar. Use
if/else. - Escreva um programa que leia dois números e imprima o maior deles. Use o operador ternário.
- Escreva um programa que leia três números e imprima o maior. Use
if/elseaninhado. - Escreva um programa que leia um caractere e verifique se é uma vogal (a, e, i, o, u), maiúscula ou minúscula. Use
if/elsee operadores lógicos. - Escreva um programa que calcule o IMC (peso / altura^2) e classifique segundo a tabela: abaixo de 18.5 (Abaixo do peso), 18.5-24.9 (Peso normal), 25-29.9 (Sobrepeso), acima de 30 (Obesidade). Use
if/elseencadeado.
#include <stdio.h>
int main() {
int num;
printf("Digite um número inteiro: ");
scanf("%d", &num);
if (num % 2 == 0) {
printf("%d é par.\n", num);
} else {
printf("%d é ímpar.\n", num);
}
return 0;
}
#include <stdio.h>
int main() {
int a, b;
printf("Digite dois números: ");
scanf("%d %d", &a, &b);
int maior = (a > b) ? a : b;
printf("O maior é %d\n", maior);
return 0;
}
#include <stdio.h>
int main() {
int a, b, c;
printf("Digite três números: ");
scanf("%d %d %d", &a, &b, &c);
int maior;
if (a >= b) {
if (a >= c) {
maior = a;
} else {
maior = c;
}
} else {
if (b >= c) {
maior = b;
} else {
maior = c;
}
}
printf("O maior é %d\n", maior);
return 0;
}
#include <stdio.h>
int main() {
char ch;
printf("Digite um caractere: ");
scanf(" %c", &ch);
if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u' ||
ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U') {
printf("%c é uma vogal.\n", ch);
} else {
printf("%c não é uma vogal.\n", ch);
}
return 0;
}
#include <stdio.h>
int main() {
float peso, altura, imc;
printf("Digite o peso (kg): ");
scanf("%f", &peso);
printf("Digite a altura (m): ");
scanf("%f", &altura);
imc = peso / (altura * altura);
if (imc < 18.5) {
printf("Abaixo do peso\n");
} else if (imc < 25) {
printf("Peso normal\n");
} else if (imc < 30) {
printf("Sobrepeso\n");
} else {
printf("Obesidade\n");
}
printf("IMC: %.2f\n", imc);
return 0;
}
Referências
- if statement - cppreference.com
- GNU C Manual - The if Statement
- learn-c.org - Conditions
- TutorialsPoint - if...else statement in C
- Programiz - C if...else Statement
Observações Finais
Condicionais são a base da lógica de programação. Pratique bastante para internalizar o uso de if/else e do operador ternário. Lembre-se de sempre testar seus programas com diferentes entradas, incluindo casos extremos. Com o tempo, você desenvolverá a intuição para escrever condicionais claras e eficientes.