LINGUAGEM: Linguagem C - Capítulo 1 - Parte 5


Operadores e Expressões: atribuições, aritmética e lógica

Objetivo:

Na aula de HOJE iremos dar início ao estudo dos OPERADORES da linguagem C. Os OPERADORES, em conjunto com CONSTANTES e VARIÁVEIS, são os constituintes básicos de EXPRESSÕES. Serão detalhados os operadores utilizadoes em expressões:
  • de atribuição
  • aritmética
  • e lógica

Operadores:

Em C, podemos classificar os OPERADORES em cinco grande categorias:
  • Atribuições
  • Aritméticos
  • Lógicos e Relacionais
  • Bit-a-Bit
  • Especiais

Atribuições:

Forma geral:
VARIÁVEL  = EXPRESSÃO;



Atribuições múltiplas:
VAR1 = VAR2 = .... = VARn = EXPRESSÃO;

C Reduzido: (para todo operador op binário)
VAR = VAR op EXPRESSÃO;   
é equivalente a:
VAR OP= EXPRESSÃO;   

Operadores Aritméticos:





Obs.:
  • operadores com o mesmo nível de PRECEDÊNCIA são avaliados pelo compilador da ESQUERDA PARA a DIREITA

Exemplo 1:

  • Em :
int a = 3; 
int b = 2; 
int c = a + -b * 3 / 2 + a % 3 * 4;
Quanto vale a VAR c?
Resposta:
  • operadores de maior precedência são avaliados primeiro
  • operadores de mesma precedência são associados da esquerda para a direita
  • então, a expressão acima seria avaliada assim:
int c = ((a + (((-b)*3)/2)) + ((a%3)*4));

Exemplo 2:

Quanto valem i e j abaixo, após cada atribuição???
int i , j = 2;

i = j++;
i = -- j;
i = --j++;
Resposta:
i = j++;     /* i == 2,  j == 3;  primeiro armazena o valor de j em i, depois incrementa j */
i = -- j;    /* i == 2,  j == 2;  primeiro decrementa j, depois armazena o valor de j em i */
i = --j++;   /* expressão inválida */
A última expressão é inválida pois incremento e decremento DEVEM sempre operar sobre variáveis e não sobre expressões!

Exemplo 3:

  • Em :
int c = 3; 
c = c--  + c;
Quanto vale a VAR c?
Resposta:
  • Atenção: O uso de operadores de incremento (++) e decremento (--) em EXPRESSÕES frequentemente é AMBÍGUO! Evite-o SEMPRE!!!
  • Assim, dependendo da ordem em que o compilador avalia as sub-expressões entre o operador + podemos ter resultados diversos para o valor da variável c!

Exemplo 4:

Veja esse exemplo retirado de um livro:

Quando eu rodo o exemplo acima no meu computador o resultado é result == 8 !!!
Já o livro diz:
      • Avaliando da esquerda para a direita:

      • Avaliando da direita para a esquerda:


Operadores Lógicos e Relacionais:







Atividade 1: operadores lógicos implica e ouexcl:

Em C, os operadores &&, || e ! correspondem respectivamente aos conectivos E, OU e NÃO da lógica Booleana. Na lógica booleana, além destes conectivos, existem vários outros. Por exemplo:
  • IMPLICAÇÃO
A      B      A  -> B
-----------------
0       0        1
0       1        1
1       0        0
1       1        1
  • OU EXCLUSIVO
A      B      A  OUEXCL B
-----------------
0       0        0
0       1        1
1       0        1
1       1        0

Nesta atividade, implemente estes dois operadores como duas funções em C!
int implica(int a, int b) {
  ...
}

int ouexcl(int a, int b) {
  ...
}

Após criar as funções acima, teste-as por meio da função main abaixo:

int main() {
 printf("teste implica:\n"
 printf("%i -> %i = %i\n", 1, 7, implica(1,7));
 printf("%i -> %i = %i\n", 3, 0, implica(3,0));
 printf("%i -> %i = %i\n", 0, 1, implica(0,1));
 printf("%i -> %i = %i\n", 0, 0, implica(0,0));

 printf("teste ouexcl:\n"
 printf("%i xor %i = %i\n", 3, 4, ouexcl(3,4));
 printf("%i xor %i = %i\n", 1, 0, ouexcl(1,0));
 printf("%i xor %i = %i\n", 0, 5, ouexcl(0,5));
 printf("%i xor %i = %i\n", 0, 0, ouexcl(0,0));
}

Leituras Recomendadas:

Exercícios:

  1. Diga a ordem de cálculo e o resultado das expressões constantes abaixo:
    1. x = 5 * 4 / 6 + 7 ;
    2. x = 5 * 4.0 / 6 + 7 ;
    3. x = 5 * 4 % 6 + 7 ;
    4. x = ((4 / 2) + (3.0 * 5)) ;
    5. x = 3 + 2*4%3/2 – 1 ;
    6. x = 3 >= 2 && ! 2 || 0 ;
    7. x = 2 && 0 || 1 ;
  2. Escreva um programa que imprima a tabela verdade da funcao ou exclusivo.
  3. Escreva um programa que leia um ângulo em segundos e imprima quantos graus, minutos e segundos há neste ângulo.
  4. Escreva um programa que leia um tempo em segundos e imprima quantas horas, minutos e segundos há neste tempo.
  5. Escreva um programa que leia um comprimento em centímetros e imprima quantos metros, decímetros e centímetros há neste comprimento.


Bibliografia e fonte:

  • [CCT] Schildt, H. (1996) C, completo e total: 3a Ed.. São Paulo, Makron.
  • LP, UFMA; Coutinho, Lucian. Linguagem de programação para ciencia da computação da ufma.http://www.deinf.ufma.br/~lrc/2009.1/LP/
  • [K&R] KERNIGHAN, B. e RITCHIE, D. (1990) C, a linguagem de programação: padrão ANSI. Rio de Janeiro: Campus.
  • DEITEL, H. M. (1999) Como programar em C. Rio de Janeiro: LTC.
  • Módulo Consultoria e Informática (1989) Linguagem C: programação e aplicações. Rio de Janeiro: LTC.