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 if para cadeias de condições mutuamente exclusivas — em vez de vários if independentes.
  • 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

  1. Escreva um programa que leia um número inteiro e imprima se ele é par ou ímpar. Use if/else.
  2. Escreva um programa que leia dois números e imprima o maior deles. Use o operador ternário.
  3. Escreva um programa que leia três números e imprima o maior. Use if/else aninhado.
  4. Escreva um programa que leia um caractere e verifique se é uma vogal (a, e, i, o, u), maiúscula ou minúscula. Use if/else e operadores lógicos.
  5. 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/else encadeado.

✓ Resposta:
#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;
}

✓ Resposta:
#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;
}

✓ Resposta:
#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;
}

✓ Resposta:
#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;
}

✓ Resposta:
#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

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.