Programação C/C++
Prof. Márcio Sarroglia Pinho

Comandos de Decisão / Comandos de Seleção

Expressões lógicas Comando IF Comando switch Atribuição Condicional

Condições ou Expressões Lógicas

A condição na linguagem C é definida como uma expressão que pode ser verdadeira ou falsa.

À este tipo de expressão dá-se o nome de expressão lógica.

Por exemplo,  (3 > 2) é uma expressão lógica que possui valor verdadeiro. Por outro lado, (4 < 1) é uma expressão lógica que possui valor falso.

Os operadores (< e >) usados nos exemplos acima são chamados de operadores relacionais pois possibilitam saber qual a relação existente entre seus dois operandos. Além destes dois existem mais 4 operadores relacionais, que podem ser vistos na tabela seguir:

Operadores Relacionais

== Igual a
!= Diferente
>= Maior ou igual
> Maior que
< Menor que
<= Menor ou igual

Além dos operadores relacionais, existem os chamados operadores lógicos ou "conectivos lógicos". Estes, servem para conectar duas expressões relacionais. Os operadores lógicos da linguagem C são apresentados na tabela a seguir:

Operadores Lógicos

|| OU lógico
&& E lógico
! Negação

Estes operadores OU e E devem ser sempre usados entre duas expressões relacionais, como por exemplo:

((2 > 1) || (3 < 7))  : resultado VERDADEIRO
((3 < 2) && (2 == 2)) : resultado FALSO
((5 !=0) || (1 < 2))  : resultado VERDADEIRO

O operador de Negação deve ser usado antes de uma expressão relacional, como por exemplo:

!(2 > 1): resultado VERDADEIRO
!(1 < 0): resultado FALSO

Precedência de Operadores

! Operador de negação Executado
Antes
- menos unário (sinal)
* / % Operadores Multiplicativos  
+ - Operadores aditivos  
< > <= >= == != Relacionais  
&& AND lógico Executado
Depois
|| OR lógico

 


Comando IF

O comando IF serve para alterar o fluxo de execução de um programa em C baseado no valor, verdadeiro ou falso, de uma expressão lógica.

Formato 1:

if (expr_log)
   comando1; // executado se "expr_log" for verdadeira
comando2; // executado sempre independente da condição

Formato 2:

if (expr_log)
  comando1; // executado se "expr_log" for verdadeira
else comando2; // executado se "expr_log" for falsa
comando3; // executado sempre, independente
          // do resultado do teste


Comando IF com BLOCOS

Formato 3:

if (expr_log)
{
    comando1; // executados se "expr_log" for verdadeira
    comando2;
    comando3;
}
else
{
    comando4; // executado se "expr_log" for falsa
    comando5;
    comando6;
}
comando7; // executado sempre independente da condição
comando8; // executado sempre independente da condição


Aninhamento de Ifs

Exemplo 1:  sem blocos e sem ELSE

if (expr_log)
    if (expr_log2)
        comando2; // executado se "expr_log" e
                  // "expr_log2" forem AMBAS verdadeiras
comando3; // executado sempre

Exemplo 2: sem blocos, o ELSE é sempre do IF anterior

if (expr_log)
    if (expr_log2)
        comando2; // executado se "expr_log" e
                  // "expr_log2" forem AMBAS verdadeiras
    else comando3; // executado se "expr_log" for VERD
                   // e se "expr_log2" for FALSA
comando4; // executado sempre

Exemplo 3: O ELSE é sempre do IF anterior dentro do BLOCO

if (expr_log)
{
    if (expr_log2)
        comando2;
}
else comando3; // executado se "expr_log" for FALSO
               // pertence ao primeiro IF
comando4; // executado sempre

Exemplo 4:

if (expr_log)   
{
    comando1; // executado se expr_log for VERDADEIRA
    comando11;
    if (expr_log2)
    {
        comando2; // executado se expr_log e expr_log2
        comando21; // forem ambas VERDADEIRAS
    }
    else
    {
        comando3; // executado se expr_log for VERDADEIRA
        comando31; // e expr_log2 for FALSA
    }
    comando4; // executado se expr_log for VERDADEIRA
}
else
{
    comando5; // executado se expr_log for FALSA
    comando51;
    if (expr_log3)
    {
        comando6; // executado se expr_log for FALSA
        comando61; // e expr_log3 for VERDADEIRA
    }
    else
    {
        comando7; // executado se expr_log for FALSA
        comando71; // e expr_log3 for FALSA
    }
    comando8; // executado sempre que expr_log for FALSA
}
comando9; // executado sempre


Comando SWITCH

int op;

printf("Digite a sua opção\n");
scanf ("%d",&op);
switch (op)
{

case VALOR1:
    comando1; // executa estes comandos se
    comando11; // op for igual a VALOR1
    comando111;
    break;
case VALOR2:
    comando2; // executa estes comandos se
    comando22; // op for igual a VALOR2
    comando222;
    break;
default:
    comando3; // executa estes comandos se
    comando33; // op for diferente de VALOR1 e
    comando333; // de VALOR2

}


Observações:
O parâmetro do switch deve ser int ou char
O valor após o case dever ser uma CONSTANTE
Muito Cuidado: A falta do break faz o controle passar ao próximo
case

 


Atribuição Condicional

    a = (a>5)? 10 : 50;

    Este comando é equivalente a 

    if(a>5)
            a = 10;
        else a = 50;