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 FALSO
!(1 < 0): resultado VERDADEIRO
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 |
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
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
a = (a>5)? 10 : 50;
Este comando é equivalente a
if(a>5)
a = 10;
else a = 50;