Operadores Lógicos Parte 3
Parte da seção Fundamentals do Journey de C da Coddy — lição 23 de 63.
Ao verificar múltiplas condições, o programa para de verificar assim que conhece a resposta final. Isso é chamado de avaliação de curto-circuito.
Por exemplo:
int x = 0;
int y = 5;
int result = (x != 0) && (y / x > 2);Aqui x é igual a 0, portanto, não avaliará y / x > 2. Se invertêssemos a ordem:
int result = (y / x > 2) && (x != 0);Isso resultará em um erro porque y será dividido por 0, o que é indefinido em C. Portanto, é uma boa prática pensar bem nas operações, para que você possa obter um código correto e eficaz, mas sem erros.
Esta técnica é usada para otimizar a avaliação de expressões lógicas. Por exemplo:
int a = 0;
int b = 2;
int c = 3;
int d = 5;
int result = (a > 0 && b < 2) || (c < -5 && d < 10);Neste exemplo, b < 2 e d < 10 não serão avaliados porque a > 0 e c < -5 são ambos falsos.
Desafio
FácilCrie um programa para decidir se é um bom dia para a produção de energia por painéis solares
Inicialize estas variáveis:
isSunnycom o valor 1 (true)windSpeedcom o valor 5.4temperaturecom o valor 23solarPanelOutputcom o valor 9isCloudycom o valor 0 (false)
Crie uma expressão lógica que verifique TODAS estas condições:
- Está ensolarado
- A velocidade do vento é menor que 10
- A produção do painel solar é menor que 15
- A temperatura está acima de 20 OU não há nuvens
Imprima "Good day for solar energy" se todas as condições forem atendidas, caso contrário, imprima "Not ideal for solar energy".
Folha de consulta
A avaliação de curto-circuito interrompe a verificação das condições assim que o resultado final é determinado, otimizando a avaliação de expressões lógicas.
Com && (AND), se a primeira condição for falsa, a segunda não será avaliada:
int x = 0;
int result = (x != 0) && (y / x > 2); // y/x won't be evaluatedCom || (OR), se a primeira condição for verdadeira, a segunda não será avaliada:
int result = (a > 0 && b < 2) || (c < -5 && d < 10);
// If a > 0 is false, b < 2 won't be evaluated
// If the first part is true, the second part won't be evaluatedA ordem importa - coloque condições que possam causar erros (como divisão por zero) após as verificações de segurança:
// Safe: checks x != 0 first
int result = (x != 0) && (y / x > 2);
// Unsafe: might divide by zero
int result = (y / x > 2) && (x != 0);Experimente você mesmo
#include <stdio.h>
int main() {
// Inicializar variáveis
int isSunny = 1;
float windSpeed = 5.4;
int temperature = 23;
int solarPanelOutput = 9;
int isCloudy = 0;
// Criar a expressão lógica
int isGoodDay =
// Não altere abaixo
if (isGoodDay) {
printf("Good day for solar energy\n");
} else {
printf("Not ideal for solar energy\n");
}
return 0;
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentals
2Variáveis
Tipos de DadosInteiroFloat - DoubleCaracteresBooleanosConstantesFundamentos do printfRegras de Nomenclatura de VariáveisConversão de Tipos Parte 1Conversão de Tipos Parte 2Desafio de Recapitulação3Operadores
Operadores AritméticosOperador de MóduloIncremento/DecrementoOperadores de AtribuiçãoOperadores RelacionaisOperadores Lógicos Parte 1Operadores Lógicos Parte 2Operadores Lógicos Parte 3Desafio de Recapitulação