40
Programa¸ ao I Aula 4 - Operadores Prof. Laura Silva de Assis Engenharia de Computa¸ ao 2 o Per´ ıodo CEFET/RJ - Centro Federal de Educa¸ ao Tecnol´ ogica Celso Suckow da Fonseca UnED Petr´ opolis 2 o semestre - 2015

Programação I Aula 4 - Operadores · 2 Operadores Casts Refer^encias Introdu˘c~ao Atribuic˘~ao Operadores Aritm eticos Operadores relacionais e logicos Outros operadores Operadores

Embed Size (px)

Citation preview

Programacao IAula 4 - Operadores

Prof. Laura Silva de Assis

Engenharia de Computacao2o Perıodo

CEFET/RJ - Centro Federal de Educacao Tecnologica Celso Suckow da Fonseca

UnED Petropolis

2o semestre - 2015

1

OperadoresCasts

Referencias

Sumario

1 Operadores

2 Casts

3 Referencias

2

OperadoresCasts

Referencias

IntroducaoAtribuicaoOperadores AritmeticosOperadores relacionais e logicosOutros operadores

Operadores

A linguagem C e muito rica em operadores internos;

No C sao definidas 4 classes de operadores:

1 Operadores aritmeticos;

2 Operadores relacionais;

3 Operadores logicos;

4 Operadores bit a bit;

Alem desses, o C tem operadores especiais para tarefas especıficas.

3

OperadoresCasts

Referencias

IntroducaoAtribuicaoOperadores AritmeticosOperadores relacionais e logicosOutros operadores

Operador de atribuicao

O operador de atribuicao (=) e utilizado para atribuir um valor (constanteou variavel) a uma variavel;

Forma geral do operador de atribuicao:

n o m e d a v a r i a v e l = e x p r e s s a o ;

Sendo que a expressao pode ser tao simples como uma constante ou taocomplexa quanto seja necessario;

O destino deve ser uma variavel ou um ponteiro.

4

OperadoresCasts

Referencias

IntroducaoAtribuicaoOperadores AritmeticosOperadores relacionais e logicosOutros operadores

Operador de atribuicao

Exemplo: expressoes simples:

i n t num , n ;char l e t r a ;double s a l a r i o ;

num = 1 0 ;l e t r a = ’A ’ ;s a l a r i o = 2 3 4 5 . 5 4 ;n = num ;

Exemplo: errado de atribuicao;

i n t a ;u n s i g n e d i n t b ;f l o a t f , g ;char c ;

a b = 1 0 ;b = −15d = 9 0 ;

5

OperadoresCasts

Referencias

IntroducaoAtribuicaoOperadores AritmeticosOperadores relacionais e logicosOutros operadores

Operador de atribuicao

A operacao de atribuicao tambem pode aparecer no momento dadeclaracao de uma variavel;

v o i d main ( ) {i n t a = 10 , b = −5; // na mesma l i n h a s e p a r a d o s por ,f l o a t c ;char d = ’ 4 ’ ;

c = a + 1 . 8 ; // a t r i b u i o v a l o r 1 1 . 8 a cb = a + b ; // soma 10 e −5 e a t r i b u i 5 a b

}

Atencao

Todo comando de declaracao de variavel ou de atribuicao deve terminar com ’;’

As atribuicoes so podem ser feitas apos a declaracao da variavel.

6

OperadoresCasts

Referencias

IntroducaoAtribuicaoOperadores AritmeticosOperadores relacionais e logicosOutros operadores

Conversao de tipos em atribuicao

A converao de tipos ocorre quando variaveis de um tipo sao misturadascom variaveis de outro tipo;

Em um comando de atribuicao a regra de converao de tipos e simples: ovalor do lado direito da atribuicao e convertido no tipo do lado esquerdo.

#i n c l u d e <s t d i o . h>v o i d main ( ) {

i n t x = 2 , num = 3 ;char ch = ’ L ’ ;f l o a t f = 1 2 . 4 5 ;

ch = x ;x = f ;f = ch ;p r i n t f ( ”∗∗∗∗ Convers ao ∗∗∗∗\n ”) ;p r i n t f ( ” i n t −> c h a r : %d\n ” , ch ) ;p r i n t f ( ” f l o a t −> i n t : %d\n ” , x ) ;p r i n t f ( ”c h a r −> f l o a t : %f \n ” , f ) ;f = num ;p r i n t f ( ” i n t −> f l o a t : %f \n\n ” , f ) ;

}

7

OperadoresCasts

Referencias

IntroducaoAtribuicaoOperadores AritmeticosOperadores relacionais e logicosOutros operadores

Conversao de tipos em atribuicao

#i n c l u d e <s t d i o . h>v o i d main ( ) {

i n t x = 2 , num = 3 ;char ch = ’ L ’ ;f l o a t f = 1 2 . 4 5 ;

ch = x ;x = f ;f = ch ;p r i n t f ( ”∗∗∗∗ Convers ao ∗∗∗∗\n ”) ;p r i n t f ( ” i n t −> c h a r : %d\n ” , ch ) ;p r i n t f ( ” f l o a t −> i n t : %d\n ” , x ) ;p r i n t f ( ”c h a r −> f l o a t : %f \n ” , f ) ;f = num ;p r i n t f ( ” i n t −> f l o a t : %f \n\n ” , f ) ;

}

Na primeira conversao, Os bits mais significativos da variavel inteira x saoignorados, deixando o ch com os 8 bits menos significativos (entre 0 e 256possuem valores identicos);

Na segunda conversao, x recebe a parte inteira de f.

8

OperadoresCasts

Referencias

IntroducaoAtribuicaoOperadores AritmeticosOperadores relacionais e logicosOutros operadores

Conversao de tipos em atribuicao

#i n c l u d e <s t d i o . h>

v o i d main ( ) {i n t x = 2 , num = 3 ;char ch = ’ L ’ ;f l o a t f = 1 2 . 4 5 ;

ch = x ;x = f ;f = ch ;p r i n t f ( ”∗∗∗∗ Convers ao ∗∗∗∗\n ”) ;p r i n t f ( ” i n t −> c h a r : %d\n ” , ch ) ;p r i n t f ( ” f l o a t −> i n t : %d\n ” , x ) ;p r i n t f ( ”c h a r −> f l o a t : %f \n ” , f ) ;f = num ;p r i n t f ( ” i n t −> f l o a t : %f \n\n ” , f ) ;

}

Na terceira conversao, f converte o valor inteiro de 8 bits armazenado emch, no mesmo valor em formato de ponto flutuante;

Na quarta conversao, f converte o valor inteiro de 16 bits no formato deponto flutuante.

9

OperadoresCasts

Referencias

IntroducaoAtribuicaoOperadores AritmeticosOperadores relacionais e logicosOutros operadores

Conversao de tipos em atribuicao

Resultado da execucao do programa de conversao de tipos

∗∗∗∗ Convers ao ∗∗∗∗i n t −> char : 2f l o a t −> i n t : 12char −> f l o a t : 2 .000000i n t −> f l o a t : 3 .000000

// impr imindo ch como c a r a c t e r e

∗∗∗∗ Convers ao ∗∗∗∗i n t −> char :f l o a t −> i n t : 12char −> f l o a t : 2 .000000i n t −> f l o a t : 3 .000000

10

OperadoresCasts

Referencias

IntroducaoAtribuicaoOperadores AritmeticosOperadores relacionais e logicosOutros operadores

Conversao de tipos em atribuicao

A regra basica para conversao de int → char , int → short int,long int → int e que a quantidade de bits significativos sera ignorada;

A conversao de int → float ou float → double, nao aumenta a precisao,apenas muda a forma como o valor e representado;

A forma de representacao de cada tipo pode variar de compilador paracompilador (e processadores);

Entao, de forma geral, o melhor e usar variaveis do tipo char paraarmazenar caracteres, int para inteiro, etc;

Sempre que for necessario fazer uma conversao sempre converta um tipopor vez. Exemplo: double → int, primeiro converta double → float depoisfloat → int.

11

OperadoresCasts

Referencias

IntroducaoAtribuicaoOperadores AritmeticosOperadores relacionais e logicosOutros operadores

Atribuicao multipla

O C permite que se atribuia o mesmo valor a muitas variaveis, em umunico comando, usando atribuicoes multiplas;

i n t x , y , z ;

x = y = z = 0 ;

Valores comuns sao atribuıdos a variaveis diferentes usando esse metodo.

12

OperadoresCasts

Referencias

IntroducaoAtribuicaoOperadores AritmeticosOperadores relacionais e logicosOutros operadores

Sintaxe dos operadores aritmeticos

A linguagem C possui representacao para as principais operacoesaritmeticas;

Os operadores aritmeticos podem ser aplicados em qualquer tipo de dadointerno permitido em c.

Operador aritmetico Acao- Subtracao+ Adicao* Multiplicacao/ Divisao% Resto da divisao

++ Incremento- - Decremento

13

OperadoresCasts

Referencias

IntroducaoAtribuicaoOperadores AritmeticosOperadores relacionais e logicosOutros operadores

Sintaxe dos operadores aritmeticos

Quando o operador \ e aplicado a um inteiro ou caractere, qualquer restoe truncado. Exemplo: 5 \ 2 = 2;

O operador de modulo (%) devolve o resto da divisao, porem ele nao podeser aplicado a tipos de ponto flutuante;

Exemplo: 22%5 = 2, porque (4x5 + 2) = 22.

14

OperadoresCasts

Referencias

IntroducaoAtribuicaoOperadores AritmeticosOperadores relacionais e logicosOutros operadores

Resultado

Resultado do exemplo do operador modulo

#i n c l u d e <s t d i o . h>// e x e m p l i f i c a o o p e r a d o r \%i n t main ( ) {

i n t x , y ;

x = 5 ;y = 2 ;p r i n t f ( ”D i v i s ao : %d\ t ” , x/ y ) ;p r i n t f ( ”Mo d u l o : %d\n\n ” , x%y ) ;

x = 1 ;y = 2 ;p r i n t f ( ”D i v i s ao : %d\ t Mo d u l o : %d\n ” , x /y , x%y ) ;r e t u r n ( 0 ) ;

}

D i v i s ao : 2 Mo d u l o : 1

D i v i s ao : 0 Mo d u l o : 1

15

OperadoresCasts

Referencias

IntroducaoAtribuicaoOperadores AritmeticosOperadores relacionais e logicosOutros operadores

Incremento e Decremento

Ambos operadores so possuem um operando;

O operador de incremento soma 1 ao seu operando;

O operador de decremento subtrai 1 do seu operando.

// semelhan c a e n t r e o pe ra c o e s

x = x +1;++x ;

x = x−1;x−−;

Ambos operadores podem ser usados como prefixo ou sufixo.

16

OperadoresCasts

Referencias

IntroducaoAtribuicaoOperadores AritmeticosOperadores relacionais e logicosOutros operadores

Incremento e Decremento

Exemplo do uso do operador ++

#i n c l u d e <s t d i o . h>

i n t main ( ) {i n t x = 10 , y ;

y = ++x ;p r i n t f ( ”y : %d\n ” , y ) ;

x = 1 0 ;y = x++;p r i n t f ( ”y : %d\n ” , y ) ;r e t u r n ( 0 ) ;

}

Resultado

y : 11y : 10

17

OperadoresCasts

Referencias

IntroducaoAtribuicaoOperadores AritmeticosOperadores relacionais e logicosOutros operadores

Precedencia dos operadores

Mais alta ++ - -- (menos unario)* / %

Mais baixa + -

Os operadores com mesmo nıvel de precedencia sao avaliados pelocompilador da esquerda para a direita;

Os parenteses podem ser usados para alterar a ordem de precedencia,forcando a operacao a ter um nıvel de precedencia maior.

18

OperadoresCasts

Referencias

IntroducaoAtribuicaoOperadores AritmeticosOperadores relacionais e logicosOutros operadores

Precedencia dos operadores

Calcule o resultado das expressoes:

i n t x , y , z ;f l o a t a ;

x=y =10;z=++x ;x= −x ;y++;x=x+y−(z− −) ;x = 25 % 5 ;y = 6 / 4 ;a = 6 / 4y = 3 + 5 ∗ 4 % (2 + 8) ;

19

OperadoresCasts

Referencias

IntroducaoAtribuicaoOperadores AritmeticosOperadores relacionais e logicosOutros operadores

Precedencia dos operadores

Calcule o resultado das expressoes:

i n t x , y , z ;

x=y =10; // x = 10 e y = 10z=++x ; // z = 11 e x = 11w = x++; // w = 11 e x = 12x=−x ; // x = −12y++; // y = 11x=x+y−(z−−); // x = −12 z = 10x = 25 % 5 ; // x = 0y = 6 / 4 ; // y = 1a = 6 / 4 // a = 1 . 5y = 3 + 5 ∗ 4 % (2 + 8) ; // y = 3

20

OperadoresCasts

Referencias

IntroducaoAtribuicaoOperadores AritmeticosOperadores relacionais e logicosOutros operadores

Operadores relacionais e logicos

O termo relacional refere-se as relacoes que os valores podem ter uns comos outros;

O termo logico refere-se as maneiras como essas relacoes podem serconectadas;

A ideia de verdadeiro e falso e a base dos conceitos dos operadores logicose relacionais;

Em C verdadeiro e qualquer valor diferente de zero (0) e falso e zero.

21

OperadoresCasts

Referencias

IntroducaoAtribuicaoOperadores AritmeticosOperadores relacionais e logicosOutros operadores

Operadores relacionais e logicos

Expressoes relacionais

Expressoes relacionais sao aquelas que realizam uma comparacao entreduas expressoes e retornam:

1 0 (zero), se o resultado for falso;

2 Qualquer valor diferente de zero, se o resultado for verdadeiro.

22

OperadoresCasts

Referencias

IntroducaoAtribuicaoOperadores AritmeticosOperadores relacionais e logicosOutros operadores

Operadores relacionais e logicos

Operadores relacionais

Operadores relacionais

Operador Acao

== Igualdade!= Diferente> Maior que< Menor que>= Maior que ou igual que<= Menor que ou igual que

23

OperadoresCasts

Referencias

IntroducaoAtribuicaoOperadores AritmeticosOperadores relacionais e logicosOutros operadores

Operadores relacionais e logicos

Operadores relacionais

Exemplos:

<expressao1> == <expressao2>: retorna verdadeiro se as duasexpressoes retornarem o mesmo valor (a == b);

<expressao1> != <expressao2>: retorna verdadeiro se as duasexpressoes retornarem valores diferentes (a != b);

<expressao1> > <expressao2>: retorna verdadeiro se a 1a

expressao retornar um valor maior que a 2a (a > b);

<expressao1> < <expressao2>: retorna verdadeiro se a 1a

expressao retornar um valor menor que a 2a (a < b);

24

OperadoresCasts

Referencias

IntroducaoAtribuicaoOperadores AritmeticosOperadores relacionais e logicosOutros operadores

Operadores relacionais e logicos

Operadores logicos

Operadores logicos

Operador Acao

&& AND|| OR! NOT

Expressoes logicas sao aquelas que realizam uma operacao logica (e, ou,nao, ...) e retornam verdadeiro ou falso;

E permitido colocar diversas operacoes em uma unica expressao:

i n t a = 1 0 ;i n t b = 5 ;i n t c = 9

a > b && ! ( a < c ) | | b <= c

25

OperadoresCasts

Referencias

IntroducaoAtribuicaoOperadores AritmeticosOperadores relacionais e logicosOutros operadores

Operadores relacionais e logicos

Tabela verdade dos operadores logicos

p q p && q p || q !p0 0 0 0 10 1 0 1 11 0 0 1 01 1 1 1 0

26

OperadoresCasts

Referencias

IntroducaoAtribuicaoOperadores AritmeticosOperadores relacionais e logicosOutros operadores

Operadores relacionais e logicos

Embora C nao tenha um operador logico or exclusivo (xor), pode-sefacilmente criar uma funcao que execute essa tarefa usando outrosoperadores logicos.

#i n c l u d e <s t d i o . h>i n t x o r ( i n t a , i n t b ) {

r e t u r n ( ( a | | b ) && ! ( a && b ) ) ;}

v o i d main ( v o i d ) {p r i n t f ( ”x o r ( 1 , 0 ) = %d\n ” , x o r ( 1 , 0 ) ) ;p r i n t f ( ”x o r ( 1 , 1) = %d\n ” , x o r ( 1 , 1) ) ;p r i n t f ( ”x o r ( 0 , 1) = %d\n ” , x o r ( 0 , 1) ) ;p r i n t f ( ”x o r ( 0 , 0) = %d\n ” , x o r ( 0 , 0) ) ;

}

27

OperadoresCasts

Referencias

IntroducaoAtribuicaoOperadores AritmeticosOperadores relacionais e logicosOutros operadores

Operadores relacionais e logicos

Exemplo operadores logicos

. . .

Se (num >= 0)Se (num % 2 == 0)

p r i n t f ( ”Numero par nao n e g a t i v o .\ n ”) ;

// conectando as duas c o n d i c o e s com um o p e r a d o r l o g i c o

Se ( ( num>=0) && (num%2 == 0) )p r i n t f ( ”Numero par nao n e g a t i v o .\ n ”) ;

// ou . . .

Se (num>0 && ! ( num%2) )p r i n t f ( ”Numero par nao n e g a t i v o .\ n ”) ;

. . .

28

OperadoresCasts

Referencias

IntroducaoAtribuicaoOperadores AritmeticosOperadores relacionais e logicosOutros operadores

Operadores relacionais e logicos

Precedencia relativa dos operadores relacionais e logicos

Maior !> >= < <=== !=&&

Menor ||

Exemplo:

! 0 && 0 | | 0

! ( 0 && 0) | | 0

29

OperadoresCasts

Referencias

IntroducaoAtribuicaoOperadores AritmeticosOperadores relacionais e logicosOutros operadores

Operadores relacionais e logicos

Precedencia - O que sera impresso?

#i n c l u d e <s t d i o . h>i n t main ( ) {

i n t s c o r e = 5 ;

p r i n t f ( ”%d\n ” , 5 + 10 ∗ 5 % 6) ;p r i n t f ( ”%d\n ” , 10 / 4) ;p r i n t f ( ”%f \n ” , 1 0 . 0 / 4 . 0 ) ;p r i n t f ( ”%c\n ” , ’A ’ + 1) ;p r i n t f ( ”%d\n ” , s c o r e + ( s c o r e = = 0) ) ;

}

30

OperadoresCasts

Referencias

IntroducaoAtribuicaoOperadores AritmeticosOperadores relacionais e logicosOutros operadores

Operadores relacionais e logicos

Precedencia - O que sera impresso?

#i n c l u d e <s t d i o . h>i n t main ( ) {

i n t s c o r e = 5 ;

p r i n t f ( ”%d\n ” , 5 + 10 ∗ 5 % 6) ;p r i n t f ( ”%d\n ” , 10 / 4) ;p r i n t f ( ”%f \n ” , 1 0 . 0 / 4 . 0 ) ;p r i n t f ( ”%c\n ” , ’A ’ + 1) ;p r i n t f ( ”%d\n ” , s c o r e + ( s c o r e == 0) ) ;

}

722.500000B5

31

OperadoresCasts

Referencias

IntroducaoAtribuicaoOperadores AritmeticosOperadores relacionais e logicosOutros operadores

O operador vırgula

O operador vırgula (,) e usado para encadear diversas expressoes;

x = ( y=3, y+1) ;

Primeiro atribui o valor 3 a y, em seguida, atribui o valor 4 a x;

Os parenteses sao necessarios porque o operador de vırgula tem umaprecedencia menor que o de atribuicao;

A vırgula provoca uma sequencia de operacoes;

Esse operador tem o mesmo significado da palavra e em portugues, comofaca isso e isso e isso...

32

OperadoresCasts

Referencias

IntroducaoAtribuicaoOperadores AritmeticosOperadores relacionais e logicosOutros operadores

Outros operadores

operadores de ponteiros: & e *;

operadores de estruturas e unioes: · e →;

Operador ? : substitui certas centencas da forma if-then-else;

Parenteses como operadores: servem para aumentar a precedencia dasoperacoes dentro deles;

Colchetes como operadores: Realizam indexacao de matrizes.

33

OperadoresCasts

Referencias

IntroducaoAtribuicaoOperadores AritmeticosOperadores relacionais e logicosOutros operadores

Resumo das precedencias

Maior () [] →! ++ - - -(tipo) * &* / %+ -< <= > >=== !=&&||?:= += -= *= etc

Menor ,

34

OperadoresCasts

Referencias

Conversao de tipo com castLegibilidadeSimplificando expressoes

Uso de cast

O programdor pode forcar uma expressao a ser de um determinado tipousando um cast;

Forma generica:

( t i p o ) e x p r e s s ao ;

Onde tipo e qualquer tipo de dados valido em C;

Exemplo: Para garantir que a expressao x \ 2 seja um float:

( f l o a t ) x \2 ;

35

OperadoresCasts

Referencias

Conversao de tipo com castLegibilidadeSimplificando expressoes

Uso de cast

Exemplo:

#i n c l u d e <s t d i o . h>

v o i d main ( v o i d ) {i n t i ;

f o r ( i =1; i <=100; i ++)p r i n t f ( ”%d / 2 e : %f \n ” , i , ( f l o a t ) i /2) ;

}

1 / 2 e : 0 .5000002 / 2 e : 1 .0000003 / 2 e : 1 .5000004 / 2 e : 2 .0000005 / 2 e : 2 .5000006 / 2 e : 3 .000000. . .95 / 2 e : 47 .50000096 / 2 e : 48 .00000097 / 2 e : 48 .50000098 / 2 e : 49 .00000099 / 2 e : 49 .500000100 / 2 e : 50 .000000

36

OperadoresCasts

Referencias

Conversao de tipo com castLegibilidadeSimplificando expressoes

Uso de cast

Exemplo:

#i n c l u d e <s t d i o . h>

v o i d main ( v o i d ) {i n t i ;

f o r ( i =1; i <=100; i ++)p r i n t f ( ”%d / 2 e : %f \n ” , i , ( f l o a t ) i /2) ;

}

Sem o cast (float), teria sido efetuado somente uma divisao inteira;

O cast garante exibir a parte fracionaria do resultado.

37

OperadoresCasts

Referencias

Conversao de tipo com castLegibilidadeSimplificando expressoes

O uso de espacamento e parenteses

O programador pode usar tabulacoes e espacos em expressoes em C paratorna-las mais legıveis;

// A e x p r e s s aox=10/y +(127/ x ) ;

// i d e n t i c a ax = 10/ y + (127/ x ) ;

Parenteses redundantes ou adicionais nao causam erros ou diminuem avelocidade da execucao das expressoes;

Usa-se parenteses para esclarecer a ordem de avaliacao para o proprioprogramador e os demais.

x=y/2−34∗temp %127;

x = ( y /2) − ((34∗ temp ) %127) ;

38

OperadoresCasts

Referencias

Conversao de tipo com castLegibilidadeSimplificando expressoes

Simplificando expressoes

Existe uma variante no comando de atribuicao, as vezes, chamado de Creduzido, que simplifica a codificacao de um certo tipo de atribuicao;

x = x + 1 0 ;

// i d e n t i c o ax +=10;

Essa abreviacao existe para todos os operadores binarios em C. Formageral:

v a r = v a r o p e r a d o r e x p r e s s ao ;

// i d e n t i c o av a r o p e r a d o r= e x p r e s s ao ;

39

OperadoresCasts

Referencias

Referencias

1 C Completo e Total, Herbert Schidt; Pearson Makron Books; 3a.Ed., 1997.

2 Linguagem C. DAMAS, Luis. 10a. Edicao. LTC, 2014.