Desvio Condicional (Instrução if)

Como escrever instruções if em C, com fluxogramas para entendimento visual.

📖 O que aprender nesta página
✅ O essencial
  • if (cond) { ... } forma básica
  • else trata o caso falso
  • else if para três ou mais ramificações — a mais restrita primeiro
  • Diferente de zero é verdadeiro, 0 é falso
⭐ Leia se tiver tempo
  • else if para três ou mais casos
  • Mantenha as chaves mesmo para corpos de uma linha
  • Como o else se vincula em ifs aninhados

Instrução if — Desvio Baseado em uma Condição

Programas em C rodam de cima para baixo por padrão, mas muitas vezes você só quer que um bloco rode quando alguma condição for verdadeira. É exatamente isso que o if faz.
Pense nele como a palavra "se": "se a nota for maior que 59, imprima Aprovado", ou "se o saldo for menor que 1, avise o usuário".
if (condicao) {
  // executa quando a condição for verdadeira
}
Início
Condição verdadeira?
Sim
Executa o corpo
Não
Pula
Próxima instrução

Um primeiro exemplo concreto

int score = 75;
if (score > 59) {
    printf("Aprovado\n");
}
Quando score > 59 é verdadeiro, o corpo dentro de { } é executado. Se score for 50, a condição é falsa e o corpo é totalmente ignorado.
Abordagem desta página: vamos começar usando apenas < e > para entender o fluxo básico "verdadeiro → entra, falso → pula". Operadores como ==, <=, >=, && e || são tratados na próxima aula, "Operadores de Comparação e Lógicos".

Verdadeiro e falso em C — qualquer valor diferente de zero é verdadeiro

Antes do C99, C não tinha um tipo bool dedicado (o C99 adicionou stdbool.h), então valores de verdade são apenas inteiros.
verdadeiro
qualquer coisa diferente de zero
1, -1, 100, 3.14 ...
falso
apenas 0
if (1)       // sempre verdadeiro - o corpo sempre roda
if (0)       // sempre falso - o corpo nunca roda
if (score)   // verdadeiro quando score é diferente de zero

Por que as chaves { } importam

As chaves { } agrupam várias instruções no corpo do if. Para um corpo de uma única instrução, as chaves são tecnicamente opcionais — mas iniciantes devem sempre escrevê-las.
✅ Com chaves (seguro)
if (x > 0) {
    printf("positivo\n");
    count++;
}
❌ Sem chaves, "corpo" de duas linhas vira bug
if (x > 0)
    printf("positivo\n");
    count++;  // NÃO está dentro do if - sempre roda
⚠️ A indentação engana: mesmo que count++; pareça estar dentro do if, sem chaves somente a próxima instrução conta como corpo.

else — o que executa quando a condição é falsa

else é a cláusula "caso contrário". Quando a condição do if é falsa, o corpo do else é executado no lugar.
Em português claro: "se X, então faça A; caso contrário faça B."
int score = 45;
if (score > 59) {
    printf("Aprovado\n");
} else {
    printf("Reprovado\n");
}
Início
score > 59 ?
Sim
imprime "Aprovado"
Não
imprime "Reprovado"
Próxima instrução
Ponto-chave: exatamente um dos dois corpos executa — o corpo do if quando verdadeiro, o corpo do else quando falso. Nunca os dois, nunca nenhum.

else é opcional

else não é obrigatório. Se você só se importa com o caso "verdadeiro," basta deixá-lo de fora.
Com else (duas vias)
if (age > 17) {
    printf("adulto\n");
} else {
    printf("menor\n");
}
Sem else (só o caso verdadeiro)
if (errors > 0) {
    printf("aviso\n");
}
// não faz nada no sucesso

else if — três ou mais ramificações

if + else cobre dois resultados. Para três ou mais casos, encadeie else if. Isso é só uma forma abreviada de "coloque outro if dentro do else."
int score = 75;
if (score > 89) { printf("A\n"); }
else if (score > 69) { printf("B\n"); }
else if (score > 49) { printf("C\n"); }
else { printf("D\n"); }
Avaliado de cima para baixo: apenas a primeira ramificação cuja condição é verdadeira roda; tudo depois é ignorado.
⚠️ A ordem importa: se você colocar score > 49 primeiro, notas de 90 e 70 também entram ali, então todas param no C. Sempre coloque a condição mais restrita primeiro.
O else final captura "nenhum dos anteriores." Omita-o e nada acontece, sem aviso, quando nenhum caso bate. Escrevê-lo explicitamente é mais seguro.

Demo de Notas

Classificação
B
Ramificação executada
else if (score > 69)

Erros comuns com if

A instrução if tem uma sintaxe curta, mas alguns pontos são fáceis de ler errado. Antes de entrar em operadores de comparação específicos, vamos firmar as armadilhas estruturais.
Armadilha 1; logo após a condição
if (score > 59);
{
    printf("Aprovado\n");
}
O ; logo após a condição encerra o if. O { ... } que vem depois é apenas um bloco comum, então sempre executa, independentemente do score.
Armadilha 2Ler errado a qual if o else se vincula
if (a > 0)
    if (b > 0)
        printf("ambos positivos\n");
else
    printf("b não é positivo\n");
Em C, else se vincula ao if mais próximo. Para evitar confusão, sempre use { } ao aninhar.
Armadilha 3Escrever as condições da menos restritiva para a mais restrita
if (score > 49) {
    printf("C\n");
} else if (score > 89) {
    printf("A\n");
}
Mesmo com score 95, a primeira score > 49 é verdadeira, então nunca chega em A. Lembre-se: cadeias else if são avaliadas de cima para baixo.
Armadilha 4Escrever um intervalo como em notação matemática
int x = 100;
if (2 < x < 5) {
    printf("dentro do intervalo\n");
}
Em matemática isso se lê "maior que 2 e menor que 5", mas C não interpreta assim. Ele avalia 2 < x primeiro, obtém 0 ou 1, e então compara isso com < 5 — assim, mesmo x = 100 sai como "verdadeiro". A forma correta de escrever uma condição de intervalo é vista na próxima aula, "Operadores de Comparação e Lógicos".

Execução Passo a Passo — Instrução if

if_demo.c

Estado das Variáveis

NomeTipoValor

Avaliação da Condição

Saída Padrão

 

Experimente — Instrução if

my_if.c
Saída
Clique em "Executar" para rodar...
💡 Experimente estas ideias também

Aulas Relacionadas

Operadores
Operadores de Comparação e Lógicos
Operadores de comparação em C (==, !=, <, >) e operadores lógicos (&&, ||, !).
Condicionais
else if / switch
Como usar else if e switch em C para desvios múltiplos.
Condicionais
Teste da Instrução if
Teste para verificar seu entendimento das instruções if em C.
← Aula anterior
Aula 11: Depuração com printf
Próxima aula →
Aula 13: Operadores de Comparação e Lógicos

Teste de Revisão

Teste o que você aprendeu nesta aula. Para combinar com o conteúdo, todos os problemas usam apenas < e >.

Q1. O que acontece quando a condição de uma instrução if é 0?

O bloco é executado
O bloco não é executado
Causa um erro

Em C, 0 é falso e qualquer coisa diferente de zero é verdadeiro. Quando a condição é 0, o bloco if é pulado.

Q2. O que este código imprime?

int x = 5;
if (x > 0) {
    printf("A\n");
} else {
    printf("B\n");
}
A
B
Nada

5 > 0 é verdadeiro, então a ramificação if imprime A.

Q3. O que este código imprime?

int x = -2;
if (x > 0) {
    printf("positivo\n");
} else {
    printf("não é positivo\n");
}
positivo
não é positivo
Erro de compilação

-2 > 0 é falso, então a ramificação else é executada.

Q4. O que este código imprime?

int score = 75;
if (score > 89) {
    printf("A\n");
} else if (score > 69) {
    printf("B\n");
} else {
    printf("C\n");
}
A
B
C

75 não é maior que 89, mas é maior que 69, então B é impresso.

Q5. O que acontece quando as condições são escritas da menos restritiva para a mais restrita?

int score = 95;
if (score > 49) {
    printf("C\n");
} else if (score > 89) {
    printf("A\n");
}
C
A
Tanto A quanto C

95 já satisfaz a primeira condição score > 49, então C é impresso e o else if nunca é avaliado. Lição: escreva a condição mais estrita primeiro.

Q6. O que este código imprime?

int score = 40;
if (score > 59);
{
    printf("Aprovado\n");
}
Nada
Aprovado
Erro de compilação

O ; extra após if (score > 59) encerra o if ali mesmo. O bloco que segue não tem nada a ver com o if, então sempre executa.

Q7. Com a=5, b=-3, o que isto imprime?

if (a > 0)
    if (b > 0)
        printf("ambos positivos\n");
else
    printf("b não é positivo\n");
ambos positivos
b não é positivo
Nada

else se vincula ao if mais próximo. O a > 0 externo é verdadeiro e o b > 0 interno é falso, então o else é executado.

Q8. Qual é a forma segura de colocar várias linhas dentro de um if?

Apenas alinhar a indentação
Envolvê-las com { }
Adicionar 2 espaços no início de cada linha

Em C, blocos são determinados por { }, não pela indentação. Para colocar várias linhas dentro de um if, sempre use { }.

Compartilhe este artigo
Compartilhar no X (Twitter) Compartilhar no Facebook