A linguagem de programação C fornece os comandos de decisão if, if-else, if-else-if e if ternário. Nesta parte do tutorial vamos aprender esses comandos.

O funcionamento dos comandos de decisão já foram discutidos em Portugol: Comandos de Decisão sendo a leitura recomendada.

Os comandos de decisão são utilizando em conjunto com os operadores lógicos e relacionais vistos em C Operadores: Relacionais e C Operadores: Lógicos.

As condições mostradas nas sintaxes abaixo podem ser compostas de uma ou mais condições declaradas utilizando operadores relacionais e lógicos, por exemplo.

A linguagem C possui o comando if que permite que façamos validações para a execução de um bloco de código de acordo com uma ou mais condições passadas como argumentos para o comando.

Fig. 1: Fluxograma do Comando if
Sintaxe
if(condicao)
{
  //seu código aqui
}
Exemplo 1
#include <stdio.h>

int main()
{
    int valor = 10;
    if (valor == 10)
    {
        printf("valor igual a 10");
    }
}
Saída
valor igual a 10

Quando o trecho de código contido no corpo do comando if for apenas uma linha, o uso de { e } é opcional. Como boa prática, deve-se utilizar { e } para melhor legibilidade do código e para evitar erros na compilação.

Exemplo 2
#include <stdio.h>

int main()
{
    int valor = 11;

    if (valor > 10)
        printf("valor maior que 10");
}
Saída
valor maior que 10

Nesse comando, uma condição é passada como argumento para o comando que realiza uma verificação. Caso a condição seja verdadeira, apenas um bloco de código if é executado, caso contrário, apenas outro bloco else é executado.

Fig. 2: Fluxograma do Comando if-else
Sintaxe
if(condicao)
{
  //condicao verdadeira
}
else
{
  //condicao falsa
}
Exemplo 3
#include <stdio.h>
int main()
{
    int valor = 10;
    if (valor > 10)
    {
        printf("valor maior que 10");
    }
    else
    {
        printf("valor não é maior que 10");
    }
}
Saída
valor não é maior que 10

Quando o trecho de código contido no corpo do comando if-else for apenas uma linha, o uso de { e } é opcional. Como boa prática, deve-se utilizar { e } para melhor legibilidade do código e para evitar erros na compilação.

Exemplo 4
#include <stdio.h>
int main()
{
    int valor = 10;
    if (valor > 10)
        printf("valor maior que 10");
    else
        printf("valor não é maior que 10");
}
Saída
valor não é maior que 10

Para realizarmos validações em cascata, podemos utilizar o comando if-else-if cuja sintaxe pode ser vista logo abaixo. Quando uma condição retorne falso, as condições seguintes são validades uma após a outra. Caso nenhuma validação retorne verdadeiro, o bloco else é executado.

Fig. 3: Fluxograma do Comando if-else-if
Sintaxe
if(condicao1)
{
  //se condicao1 verdadeira
}
else if (condicao2)
{
 //se condicao2 verdadeira
}
else if (condicao3)
{
//se condicao3 verdadeira
}
else
{
 //caso contrário, esse trecho de código será executado
}
Exemplo 5
#include <stdio.h>

int main()
{
    int valor = 2;
    if (valor == 1)
    {
        printf("igual a 1");
    }
    else if( valor < 1)
    {
        printf("menor que 1");
    }
    else
    {
        printf("maior que 1");
    }
}
Saída
maior que 1

A linguagem C possui um operador ternário que é representado pelo operador (?:) como pode ser conferido na sintaxe abaixo. Para execução de pequenos trechos de código, esse operador pode ser utilizado.

Sintaxe
(condicao) ? expressao1 : expressao2;
Fig. 4: Fluxograma do Comando if ternário

Caso condicao seja verdadeira, a instrução contida em expressão1 será executada. Sendo condicao falsa, a instrução contida em expressao2 será executada.

Exemplo 6
#include <stdio.h>

int main()
{
    int valor = 0;
    int valor2 = 1;
    valor = ( valor2 > 0) ? 1 : 0;
}
Saída
1

Tanto expressao1 quanto expressao2 podem conter funções ou expressões em seu corpo:

Exemplo 7
int valor2 = (valor == 10) ? valor++: valor--;
int valor3 = (valor == 10) ? funcao1() : funcao2();
Saída
-

O if ternário pode ser utilizado em funções sendo passado como argumento:

Exemplo 8
printf("%s",((valor > 0) ? "maior" : "menor"));
Saída
-

Os comandos if e if-elseif permitem que o retorno de uma função passada como argumento seja utilizada como parte da expressão de comparação como mostrado no exemplo abaixo:

Exemplo 9
#include <stdio.h>
#include <stdio.h>

int funcao(int p)
{
    if(p == 0 )
        return 0;
    
    if(p == 1)
        return 1;
        
    if(p == 2)
        return 2;
        
    return -1;
}

int main() 
{
    
    int i = 1;

    if(funcao(1) == 1)
    {
        printf("funcao como condição");
    }
    
    return 0;
}
Saída
funcao como condição

Os comandos if e if-elseif aceitam o uso de operadores relacionais e lógicos, por exemplo, no uso de múltiplas condições como mostrado no exemplo abaixo:

Exemplo 10
#include <stdio.h>
int main() 
{
    
    int codigo = 1;
    float valor = 1.99f; 
    char flag = 'A';

    if( valor == 1.99f && codigo == 1 || (flag >= 'A' && flag <= 'C'))
        printf("condição aceita!");
    
    return 0;
}
Saída
condição aceita!

Em determinadas situações precisamos realizar atribuições simples com o comando if-else, em que os valores 0 e 1 estão envolvidos como atribuição.

Como os operadores relacionais e lógicos em C, retornam 0 ou 1 como resultado, podemos declarar uma atribuição diretamente sem o uso do comando if-else:

Sintaxe
nome_variavel = <variavel/expressao1> operador variavel2/expressao2;
Exemplo 11: if-else
#include <stdio.h>
int main()
{
    int a = 1;
    int b = 2;
    
    if ( a > b)
        resultado = 1;
    else
        resultado = 0;

    printf("%d",resultado);
}
Saída
0
Exemplo 12: sem if-else
#include <stdio.h>
int main()
{
    int a = 1;
    int b = 2;
    
    int resultado = a > b;
    
    printf("%d",resultado);
}
Saída
0

Todos os operadores relacionais podem ser utilizados nesse tipo de situação vista acima não ficando limitado ao operador relacional utilizado nos exemplos.

Para expressões mais complexas envolvendo outros operadores, é necessário utilizar ( e ) para separar corretamente as expressões contendo os operadores relacionais.

  1. 21/10/2025 - revisão 5 - Adição: múltiplas condições, função como argumento e retorno de operador
  2. 03/09/2025 - revisão 4 - Ajustes: pontuais, sintaxes e objetivos
  3. 11/03/2025 - revisão 3 - Correção em explicação if, if-else-if; Ajuste em intro.
  4. 08/10/2024 - revisão 2 - Ajustes pontuais
  5. 28/09/2023 - revisão 1 - Correção em referências, erros gramaticais, sintaxe, observações e adição de fluxogramas
  6. 19/05/2023 - versão inicial