🚀 Capítulo 04: Operadores Aritméticos, Relacionais e Lógicos em C

🎯 Objetivos da Aula

Ao final desta aula, você será capaz de:

  1. Realizar cálculos matemáticos em C utilizando operadores aritméticos e de módulo (%).
  2. Utilizar operadores de incremento (++) e decremento (--).
  3. Construir expressões de comparação utilizando operadores relacionais (==, !=, >, <, >=, <=).
  4. Combinar condições complexas com operadores lógicos (&& E, || OU, ! NÃO).

🧠 1. Operadores Aritméticos e Precedência

Os operadores aritméticos realizam cálculos matemáticos fundamentais entre operandos numericos.

flowchart TD
    Op["Operadores Aritméticos em C"] --> Basicos["Básicos: + , - , * , /"]
    Op --> Modulo["Módulo (Resto da Divisão): %"]
    Op --> IncDec["Incremento / Decremento: ++ , --"]
    
    Modulo --> Mod_Ex["10 % 3 = 1 (Resto da divisão inteira)"]
    IncDec --> Inc_Ex["x++ (Incrementa +1) | x-- (Decrementa -1)"]

Precedência de Operadores Matemáticos:

  1. Parênteses (): Avaliados primeiro.
  2. Multiplicação *, Divisão / e Módulo %: Precedência alta.
  3. Soma + e Subtração -: Precedência baixa.

⚖️ 2. Operadores Relacionais e Lógicos

Em C, não existe um tipo boolean nativo básico original (embora o C99 possua <stdbool.h>). O compilador avalia expressões lógicas retornando:

  • 1 (Verdadeiro / True) para qualquer valor diferente de zero.
  • 0 (Falso / False) para zero.

Tabela de Operadores Relacionais e Lógicos

CategoriaOperadorSignificadoExemplo (a = 10, b = 5)Resultado em C
Relacional==Igual aa == b0 (Falso)
Relacional!=Diferente dea != b1 (Verdadeiro)
Relacional>Maior quea > b1 (Verdadeiro)
Lógico&&E (AND) — Ambos verdadeiros(a > 0) && (b > 0)1 (Verdadeiro)
Lógico``OU (OR) — Pelo menos um verdadeiro
Lógico!NÃO (NOT) — Inverte o valor!(a > b)0 (Falso)

💻 3. Prática Guiada: Validador de Aprovação em C

Vamos escrever o programa calculo_expressao.c que recebe duas notas e o percentual de frequência de um aluno e avalia se ele atinge os critérios de aprovação:

#include <stdio.h>
 
int main() {
    float nota1 = 0.0f;
    float nota2 = 0.0f;
    float frequencia = 0.0f;
    
    printf("Digite a Nota 1: ");
    scanf("%f", &nota1);
    
    printf("Digite a Nota 2: ");
    scanf("%f", &nota2);
    
    printf("Digite a Frequencia (em \n", frequencia);
    printf(" Status Aprovado?  : %d (1 = SIM, 0 = NAO)\n", aprovado);
    printf("=========================================\n");
    
    return 0;
}

⚔️ 4. Desafios Práticos (Exercícios 30/50/20)

🥉 Nível Bronze (Fixação)

  1. Qual o resultado da expressão inteira em C: 17 % 5?
  2. Explique a diferença entre o operador de atribuição = e o operador relacional de igualdade ==.

🥈 Nível Prata (Aplicação)

  1. Escreva um programa em C que leia um número inteiro e informe 1 se o número for par e maior que zero, ou 0 caso contrário (dica: use o operador de resto % e o operador lógico &&).

🥇 Nível Ouro (Desafio)

  1. Escreva um programa que solicite a idade de um aluno e se ele possui autorização dos pais (1 para sim, 0 para não). Imprima 1 se o aluno puder participar da viagem (Critério: Idade OU Autorização do Pai == 1).

💡 Gabaritos Sanfonados de Resposta

💡 Ver Gabarito do Nível Bronze
  1. 17 % 5 resulta em 2 (Pois 17 dividido por 5 é 3, com resto 2).
  2. O = atribui um valor à variável (ex.: x = 10;), enquanto o == compara se dois valores são iguais (ex.: if (x == 10)).
💡 Ver Gabarito do Nível Prata & Ouro (Código C)
#include <stdio.h>
 
int main() {
    int numero = 0;
    printf("Digite um numero inteiro: ");
    scanf("%d", &numero);
    
    int eParEPositivo = (numero % 2 == 0) && (numero > 0);
    printf("E par e positivo? %d\n", eParEPositivo);
    
    return 0;
}

📚 Referências Teóricas Oficiais

  • KERNIGHAN, Brian W.; RITCHIE, Dennis M.. A Linguagem de Programação C. 2ª Edição. Campus, 1989. Cap. 2 (Operadores e Expressões).
  • ISO/IEC 9899:2018. C17 Language Specification — Expressions and Operators.

⬅️ Capítulo Anterior (Variáveis e Tipos) | Voltar ao Sumário | Próximo Capítulo (Condicionais) ➡️