[CAPÍTULO 1] - [CAPÍTULO 2] - [CAPÍTULO 3]
[PARTE 1] - [PARTE 2] - [PARTE 3] - [PARTE 4] - [PARTE 5] - [PARTE 6] - [PARTE 7] - [PARTE 8]
[PARTE 1] - [PARTE 2] - [PARTE 3] - [PARTE 4] - [PARTE 5] - [PARTE 6] - [PARTE 7] - [PARTE 8]
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 valemi
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ávelc
!
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:
- CCT capítulo 2
- K&R capítulos 2
- http://pt.wikipedia.org/wiki/Operadores_em_C_e_C%2B%2B
- http://www.mspc.eng.br/info/cpp_oper_10.shtml
Exercícios:
- Diga a ordem de cálculo e o resultado das expressões constantes abaixo:
- x = 5 * 4 / 6 + 7 ;
- x = 5 * 4.0 / 6 + 7 ;
- x = 5 * 4 % 6 + 7 ;
- x = ((4 / 2) + (3.0 * 5)) ;
- x = 3 + 2*4%3/2 – 1 ;
- x = 3 >= 2 && ! 2 || 0 ;
- x = 2 && 0 || 1 ;
- Escreva um programa que imprima a tabela verdade da funcao ou exclusivo.
- Escreva um programa que leia um ângulo em segundos e imprima quantos graus, minutos e segundos há neste ângulo.
- Escreva um programa que leia um tempo em segundos e imprima quantas horas, minutos e segundos há neste tempo.
- 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.
Coloque aqui o seu email