Programac ao: Tipos, Vari aveis e Express oes Jos e Romildo - - PowerPoint PPT Presentation

programac ao tipos vari aveis e express oes
SMART_READER_LITE
LIVE PREVIEW

Programac ao: Tipos, Vari aveis e Express oes Jos e Romildo - - PowerPoint PPT Presentation

Programac ao de Computadores I Aula 05 Programac ao: Tipos, Vari aveis e Express oes Jos e Romildo Malaquias Departamento de Computac ao Universidade Federal de Ouro Preto 2011-1 1/56 Valores Valor e


slide-1
SLIDE 1

1/56

Programac ¸ ˜ ao de Computadores I Aula 05

Programac ¸ ˜ ao: Tipos, Vari´ aveis e Express˜

  • es

Jos´ e Romildo Malaquias

Departamento de Computac ¸ ˜ ao Universidade Federal de Ouro Preto

2011-1

slide-2
SLIDE 2

2/56

Valores

◮ Valor ´

e uma entidade da linguagem que pode ser manipulada durante a execuc ¸ ˜ ao do programa atrav´ es de operac ¸ ˜

  • es.

◮ Um valor representa um dado que pode ser processado. ◮ Exemplos:

◮ n´

umeros inteiros: 101, 453, 1231

◮ textos: ”bom dia”, ”digite um n´

umero”

slide-3
SLIDE 3

3/56

Tipos

◮ Tipo ´

e um conjunto de valores que apresenta comportamento uniforme sob um conjunto de opreac ¸ ˜

  • es.

◮ Os tipos resultam da classificac

¸ ˜ ao dos valores em categorias que levam em conta a sua representac ¸ ˜ ao na mem´

  • ria do

computador, e as operac ¸ ˜

  • es que podem ser realizadas com eles.

◮ Assim os n´

umeros inteiros formam um tipo, e seus valores podem ser manipulados atrav´ es de operac ¸ ˜

  • es aritm´

eticas, por exemplo.

◮ J´

a as sequˆ ecias de caracteres (textos) formam outro tipo, e podem ser exibidas na tela, por exemplo.

slide-4
SLIDE 4

4/56

Tipos primitivos e tipos derivados

◮ Os valores de um tipo primitivo s˜

ao indivis´ ıveis, e o tipo n˜ ao depende de outros tipos. Exemplos: tipos num´ ericos e tipo dos caracteres.

◮ Os valores de um tipo derivado s˜

ao estruturas formadas por valores mais simples, e o tipo ´ e expresso em func ¸ ˜ ao de outros

  • tipos. Exemplos: listas de inteiros, matriz de n´

umeros reais, registro de um usu´ ario da biblioteca.

slide-5
SLIDE 5

5/56

N´ umeros inteiros I

◮ N´

umeros inteiros com sinal:

◮ char ou signed char ◮ short ou signed short ◮ int ou signed int ou signed ◮ long ou signed long

◮ Na representac

¸ ˜ ao de complemento de 2 com n bits: n´ umero de valores poss´ ıveis 2n menor valor

−2n−1

maior valor 2n−1 − 1

◮ Por exemplo, numa representac

¸ ˜ ao de complemento de 2 com 32 bits: n´ umero de valores poss´ ıveis 4.294.967.296 menor valor

−231 = −2.147.483.648

maior valor 231 − 1 = 2.147.483.647

slide-6
SLIDE 6

6/56

N´ umeros inteiros II

◮ ´

E garantido que:

◮ n´

umero m´ ınimo de bits e maior valor: tipo n´ umero m´ ınimo de bits maior valor que ´ e garantido char 8 127 short 16 32.767 int 16 32.767 long 32 2.147.483.647

◮ tamanho(char) ≤ tamanho(short) ≤ tamanho(int) ≤

tamanho(long)

slide-7
SLIDE 7

7/56

N´ umeros inteiros III

◮ N´

umeros inteiros sem sinal:

◮ unsiged char ◮ unsiged short ◮ unsiged int ou unsigned ◮ unsiged long

◮ Utiliza o mesmo n´

umero de bits que o inteiro com sinal correspondente.

◮ Na representac

¸ ˜ ao com n bits: n´ umero de valores poss´ ıveis 2n menor valor maior valor 2n − 1

◮ Por exemplo, numa representac

¸ ˜ ao com 32 bits: n´ umero de valores poss´ ıveis 4.294.967.296 menor valor maior valor 232 − 1 = 4.294.967.295

slide-8
SLIDE 8

8/56

N´ umeros inteiros IV

◮ Como escolher o tipo?

◮ Normalmente use int. ◮ Se precisar de valores grandes, use long. ◮ Se precisar economizar espac

¸o na mem´

  • ria, use short.

◮ Se valores negativos n˜

ao s˜ ao importantes, use o tipo sem sinal correspondente.

◮ Evite usar os tipos char para representar n´

umeros inteiros, pois costumam ser problem´ aticos.

◮ Se precisar de inteiros maiores que os fornecidos pelos tipos

b´ asicos, use uma biblioteca de inteiros de precis˜ ao arbit´ aria.

slide-9
SLIDE 9

9/56

N´ umeros inteiros V

◮ Literais expressam diretamente um valor. ◮ Sistema de numerac

¸ ˜ ao:

◮ Decimal: sequˆ

ecia de um ou mais d´ ıgitos decimais que n˜ ao comec ¸a com zero.

◮ Octal: sequˆ

ecia de um ou mais d´ ıgitos octais comec ¸ando com 0.

◮ Hexadecimal: sequˆ

ecia de um ou mais d´ ıgitos hexadecimais precedida de 0x.

◮ Literais sem sinal: acrescenta-se o sufixo u ou U. ◮ Literais long: acrescenta-se o sufixo l ou L. ◮ Exemplos:

decimais 2011, 452, 324892

  • ctais

0, 0632, 0234, 03100 hexadecimais 0x324, 0xA3, 0x400FBC01 sem sinal 2011u, 0234u, 0x420Bu longas 2011u, 0234u, 0x420Bu longas sem sinal 23423420ul, 02200174ul, 0x10A20Bul

slide-10
SLIDE 10

10/56

N´ umeros em ponto flutuante I

◮ Podem ser representados na mem´

  • ria por um bit de sinal,

seguindo de uma mantissa (algarismos significativos), seguidos por um expoente de uma potˆ ecia de 2:

(−1)sinal × mantissa× 2expoente

Exemplo: 0.5 = (−1)0 × 1× 2-1

◮ S˜

ao usados como aproximac ¸ ˜

  • es para os n´

umeros reais.

◮ Existem trˆ

es tipos que podem diferir na precis˜ ao (quantidade de algarismos significativos) e na faixa (expoente da potˆ ecia de 2).

◮ float ◮ double ◮ long double

slide-11
SLIDE 11

11/56

N´ umeros em ponto flutuante II

◮ Literal: ´

e formado por:

◮ uma parte inteira ◮ um ponto decimal ◮ uma parte fracion´

aria

◮ uma parte de expoente ◮ um sufixo

◮ as partes inteira e fracion´

aria s˜ ao formadas por d´ ıgitos decimais

◮ a parte de expoente ´

e formada por e ou E seguido de um sinal

  • pcional (+ ou -), seguido de um ou mais d´

ıgitos decimais

◮ a parte inteira ou a parte integral podem ser omitidas, mas n˜

ao ambas

◮ o ponto decimal ou a parte de expoente podem ser omitidas, mas

n˜ ao ambas

◮ os sufixos f e F indicam o tipo float ◮ os sufixos l e L indicam o tipo long double ◮ se nenhum sufixo ´

e especificado, o literal ´ e do tipo double

slide-12
SLIDE 12

12/56

N´ umeros em ponto flutuante III

◮ Exemplos:

23.898e-7, 43.736, 32301., .56, 34E+87, 0.612e102

slide-13
SLIDE 13

13/56

Caracteres I

◮ O tipo char ´

e utilizado para representar os caracteres: letras, d´ ıgitos decimais, sinais de pontuac ¸ ˜ ao e caracteres de controle.

◮ char ´

e um tipo num´ erico correspondente ao c´

  • digo do caracter,

por´ em deve-se evitar utiliz´ a-lo simplesmente como um inteiro muito pequeno.

◮ Normalmente utiliza-se a tabela ASCII estendida para

codificac ¸ ˜ ao dos caracteres.

slide-14
SLIDE 14

14/56

Caracteres II

slide-15
SLIDE 15

15/56

Caracteres III

◮ Literais: Escreve-se o caracter entre ap´

  • strofos (tamb´

em chamados de aspas simples): ’A’, ’+’, ’!’, ’#’

◮ Sequˆ

ecias de escape:

◮ forma especial de indicar o caracter ◮ comec

¸am com \

’\n ’

nova linha

’\r ’

retorno de carro

’\t ’

tabulac ¸ ˜ ao horizontal

’\’’

  • caracter ’

’\"’

  • caracter "

’\\’

  • caracter \

’\ddd ’

  • caracter cujo c´
  • digo ´

e ddd, sendo ddd uma sequˆ ecia de trˆ es d´ ıgitos decimais

slide-16
SLIDE 16

16/56

Cadeias de caracteres

◮ Uma string (ou cadeia de caracteres) ´

e uma sequˆ ecia de caracteres e pode ser usada como uma representac ¸ ˜ ao de um texto.

◮ Uma string ´

e representada na mem´

  • ria como uma sequˆ

ecia de valores do tipo char.

◮ O final da sequˆ

encia ´ e indicada pelo caracter nulo ’\0’.

◮ O tipo das strings ´

e um tipo especial chamado ponteiro para caracteres, e ´ e escrito como char*.

◮ Ponteiros ser˜

ao estudados no decorrer do curso.

◮ Um literal string ´

e escrito colocando a sequˆ ecia de caracteres entre aspas.

◮ Exemplos: "abc", "ana paula", "bom dia\nBrazil",

"3+4 = 7"

slide-17
SLIDE 17

17/56

Vari´ aveis I

◮ VARI´ AVEL

slide-18
SLIDE 18

18/56

Vari´ aveis II

◮ Vari´

avel ´ e uma posic ¸ ˜ ao de mem´

  • ria, e usada para guardar um

valor.

◮ Pode ser identificada atrav´

es de um enderec ¸o ou atrav´ es de um nome.

◮ ´

E caracterizada por um tipo, que define como a sequˆ encia de bits armazenada na vari´ avel ´ e interpretada.

slide-19
SLIDE 19

19/56

Vari´ aveis III

slide-20
SLIDE 20

20/56

Vari´ aveis IV

◮ O programador usa vari´

aveis nos algoritmos visando atingir os resultados esperados.

slide-21
SLIDE 21

21/56

Vari´ aveis V

◮ Escopo de uma vari´

avel

◮ ´

E o segmento de programa em que a vari´ avel pode ser usada.

◮ Comec

¸a a partir da declarac ¸ ˜ ao da vari´ avel.

◮ Termina no menor bloco contendo a declarac

¸ ˜ ao da vari´ avel.

◮ pode ser um bloco, uma rotina ou todo o programa (locais ×

globais)

global (todos acessam) local(s´

  • pertence a ele)
slide-22
SLIDE 22

22/56

Vari´ aveis VI

◮ Identificador

◮ Nome de vari´

aveis, func ¸ ˜

  • es, r´
  • tulos e v´

arios outros objetos definidos pelo usu´ ario

◮ Constantes

◮ Identificadores que n˜

ao podem ter seus valores alterados durante a execuc ¸ ˜ ao do programa

slide-23
SLIDE 23

23/56

Vari´ aveis VII

◮ Alocac

¸ ˜ ao est´ atica × Alocac ¸ ˜ ao dinˆ amica

◮ Alocac

¸ ˜ ao est´ atica

◮ Reserva de espac

¸o de memoria antes da execuc ¸ ˜ ao

◮ Vari´

aveis locais e globais armazenadas de forma FIXA

◮ Necessidade de previs˜

ao de tamanho do espac ¸o (ex. vetor)

◮ Alocac

¸ ˜ ao dinˆ amica

◮ Reserva de espac

¸o de memoria em tempo de execuc ¸ ˜ ao

◮ Necessidade de func

¸ ˜

  • es para alocac

¸ ˜ ao

◮ Uso de ponteiro para a ´

area reservada e crescimento dinˆ amico

slide-24
SLIDE 24

24/56

Declarac ¸ ˜ ao de vari´ aveis I

◮ Uma declarac

¸ ˜ ao de vari´ avel introduz uma nova vari´ avel para ser utilizada no programa.

◮ ´

E necess´ ario especificar o nome e o tipo da vari´ avel.

◮ O compilador se encarrega de gerar c´

  • digo para alocar espac

¸o na mem´

  • ria para a vari´
  • avel. O tamanho em bits do espac

¸o alocado depende do tipo da vari´ avel.

slide-25
SLIDE 25

25/56

Declarac ¸ ˜ ao de vari´ aveis II

Espac ¸o de memoria utilizado pelas vari´ aveis

slide-26
SLIDE 26

26/56

Declarac ¸ ˜ ao de vari´ aveis III

◮ Identificador ´

e um nome dado a algum elemento da linguagem.

◮ Utilizamos identificadores para nomear vari´

aveis.

◮ Regras para nomes de vari´

aveis em C:

◮ ´

E formado por uma sequˆ encia de letras (mai´ usculas ou min´ usculas), d´ ıgitos e sublinhados (_ underscore).

◮ Deve comec

¸ar com uma letra ou sublinhado.

◮ Portanto nunca pode comec

¸ar com um n´ umero.

◮ N˜

ao se pode utilizar { ( + - / \ ; . , ? como parte do nome de uma vari´ avel.

◮ C ´

e uma linguagem case-sensitive, ou seja, que faz diferenc ¸a entre nomes com letras mai´ usculas e nomes com letras min´ usculas: Peso e peso s˜ ao identificadores diferentes.

◮ Costuma-se usar mai´

usculas e min´ usculas para separar palavras dentro do identificador PesoDoCarro.

◮ Mas pode-se tamb´

em utilizar sublinhado: peso_do_carro.

slide-27
SLIDE 27

27/56

Declarac ¸ ˜ ao de vari´ aveis IV

◮ Identificadores devem ser ´

unicos no mesmo escopo (n˜ ao podem haver vari´ aveis com mesmo identificador dentro do mesmo bloco).

slide-28
SLIDE 28

28/56

Declarac ¸ ˜ ao de vari´ aveis V

◮ As seguintes palavras, chamadas de palavras-reservadas, j´

a tem um significado na linguagem C e por esse motivo n˜ ao podem ser utilizadas como identificadores: auto double int struct break enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do

slide-29
SLIDE 29

29/56

Declarac ¸ ˜ ao de vari´ aveis VI

◮ Quais dos nomes a seguir s˜

ao nomes corretos de vari´ aveis? Se n˜ ao forem corretos, porque n˜ ao s˜ ao? 3ab a3b fim int

\meu _A n_a_o

papel-branco

a* c++ *nova_variavel

slide-30
SLIDE 30

30/56

Declarac ¸ ˜ ao de vari´ aveis VII

◮ Uma vari´

avel ´ e manipulada no programa atrav´ es do nome dado na declarac ¸ ˜ ao.

◮ Pode-se consultar o conte´

udo da vari´ avel, bastando para isto utilizar o seu nome.

◮ Pode-se tamb´

em alterar o conte´ udo da vari´ avel atrav´ es de uma express˜ ao de atribuic ¸ ˜ ao.

slide-31
SLIDE 31

31/56

Express˜

  • es

◮ Express˜

ao ´ e uma frase na linguagem de programac ¸ ˜ ao que pode ser avaliada para produzir um valor.

◮ Toda express˜

ao tem um tipo, que ´ e o tipo do seu valor.

◮ Exemplos:

express˜ ao valor tipo 2+3*4-1 13 int (2.3 - 0.2)*3.0 6.3 double ’N’ ’N’ char ”Computador” ”Computador” char*

slide-32
SLIDE 32

32/56

Express˜

  • es: Literais

◮ A forma mais simples de express˜

  • es s˜

ao literais, que expressam diretamente o valor que se deseja, sem necessidade de c´ alculo.

◮ As formas literais foram apresentadas junto com os seus tipos. ◮ Exemplos:

express˜ ao valor tipo 4752 4752 int 077 63 int 0xFFu 255 unsigned int 6783L 6783 long int 346783ul 346783 unsigned long int 0.452F 0.452 float 56.7327e-45 56.7327e-45 double 8.324E-65L 8.324e-65 long double

’z’ ’z’

char ”UFOP” ”UFOP” char*

slide-33
SLIDE 33

33/56

Express˜

  • es: Vari´

aveis

◮ Uma vari´

avel ´ e uma express˜ ao cujo tipo ´ e o pr´

  • prio tipo da

vari´ avel, e cujo valor ´ e o conte´ udo da vari´ avel.

◮ Exemplo: Se peso ´

e uma vari´ avel do tipo double cujo conte´ udo ´ e 5.6, ent˜ ao peso tamb´ em ´ e uma express˜ ao do tipo double e valor 5.6.

slide-34
SLIDE 34

34/56

Express˜

  • es: operadores

◮ Um operador permite realizar uma operac

¸ ˜ ao com um ou mais

  • perandos (que s˜

ao express˜

  • es).

◮ Classificac

¸ ˜ ao quanto ao n´ umero de operandos:

  • perador

n´ umero de operandos exemplo un´ ario 1

  • 3

bin´ ario 2

2 + 3

tern´ ario 3

x>5 ? z = x+2 : z = x-2

◮ Classificac

¸ ˜ ao quanto ` a posic ¸ ˜ ao do operador:

  • perador

posic ¸ ˜ ao exemplo prefixo antes dos operandos

! encontrou

infixo entre os operandos

5*x

sufixo depois dos operandos

slide-35
SLIDE 35

35/56

Prioridade dos operadores

◮ Quando usamos v´

arios operadores em uma determinada express˜ ao, torna-se dif´ ıciel decidir quem ´ e o operando de cada

  • perador.

◮ Exemplo: 2+3*4

3 ´ e operando do + ou do * ?

◮ Existe uma relac

¸ ˜ ao de prioridade (ou precedˆ encia) dos

  • peradores que permite tomar a decisc

¸ ˜

  • ao. neste caso o * tem

prioridade maior que o +, portanto o 3 ´ e um operando do * e n˜ ao do +, e a express˜ ao ´ e avalidada como 2+(3*4), resultando em 14.

◮ Operac

¸ ˜

  • es cujos operadores tem maior prioridade s˜

ao realizadas primeiro.

slide-36
SLIDE 36

36/56

Associatividade dos operadores

◮ Quando usamos v´

arios operadores de mesma prioridade em uma express˜ ao, torna-se dif´ ıciel decidir quem ´ e o operando de cada operador.

◮ Exemplo: 2-3-4

3 ´ e operando do primeiro ou do segundo -?

◮ Um operador pode ser:

associativo ` a esquerda as operac ¸ ˜

  • es realizam-se da esquerda

para a direita associativo ` a direita as operac ¸ ˜

  • es realizam-se da direita para

a esquerda n˜ ao associativo n˜ ao ´ e poss´ ıvel usar o operador em sequˆ encia

◮ Exemplo: O operador - ´

e associativo ` a esquerda, logo a express˜ ao 2-3-4 ´ e avaliada como (2-3)-4 resultando em -5. Se ele fosse associativo ` a direita, a express˜ ao seria avaliada como

2-(3-4) resultando no valor 3.

slide-37
SLIDE 37

37/56

Express˜

  • es: uso de parˆ

enteses

◮ Qualquer express˜

ao pode ser escrita entre parˆ enteses.

◮ O tipo e o valor da express˜

ao parentetizada s˜ ao os mesmos da express˜ ao sem parˆ enteses.

◮ Parˆ

enteses s˜ ao ´ uteis para mudar a ordem de avaliac ¸ ˜ ao das

  • perac

¸ ˜

  • es quando n˜

ao se deseja usar a prioridade ou associatividade de um operador.

◮ Exemplos:

express˜ ao valor (2+4) 6 2+(3*6-4)/7 4 ((5-1)*(3+7)*2)/4 20

slide-38
SLIDE 38

38/56

Express˜

  • es: operadores b´

asicos

Alguns operadores agrupados por ordem decrescente de prioridade

  • perador
  • perac

¸ ˜ ao associat.

var = expr

atribuic ¸ ˜ ao direita

  • expr

sim´ etrico direita

+ expr

nenhum

++ var

pre-incremento

var ++

  • s-incremento
  • - var

pre-decremento

var --

  • s-decremento

(tipo) expr

promoc ¸ ˜ ao de tipo

expr1 * expr2

multiplicac ¸ ˜ ao esquerda

expr1 / expr2

quociente da divis˜ ao

expr1 % expr2

resto da divis˜ ao

expr1 + expr2

adic ¸ ˜ ao esquerda

expr1 - expr2

subtrac ¸ ˜ ao

(expr)

parˆ enteses esquerda

slide-39
SLIDE 39

39/56

Express˜

  • es: observac

¸ ˜

  • es sobre operadores I

◮ Se os operandos de uma opeac

¸ ˜ ao s˜ ao de um mesmo tipo, ent˜ ao

  • resultado tamb´

em ´ e deste mesmo tipo.

◮ Assim o valor de 15/2 ´

e 7, e n˜ ao 7.5, pois os dois argumentos s˜ ao do tipo int.

◮ J´

a o valor da express˜ ao 15.0/2.0 ´ e 7.5, pois os tipos dos argumentos ´ e double, levando a um resultado tamb´ em do tipo

double.

◮ O operador \% calcula o resto da divis˜

ao de seus operandos. Exemplo: O valor de 17 \% 3 ´ e 2.

◮ O segundo operando dos operandos de divis˜

ao / e \% n˜ ao pode ser zero.

◮ N˜

ao h´ a nenhum operador para a operac ¸ ˜ ao de potenciac ¸ ˜ ao.

slide-40
SLIDE 40

40/56

Express˜

  • es: atribuic

¸ ˜ ao I

◮ Atribuir um valor de uma express˜

ao a uma vari´ avel significa calcular o valor daquela express˜ ao e copiar aquele valor para uma determinada posic ¸ ˜ ao de mem´

  • ria representada pela

vari´ avel.

◮ A avaliac

¸ ˜ ao da express˜ ao de atribuic ¸ ˜ ao

var = express˜ ao

´ e feita pela avaliac ¸ ˜ ao de express˜ ao, cujo valor ´ e usado para atualizar o conte´ udo da variavel,

◮ Exemplo:

soma = a + b;

A vari´ avel soma recebe o valor da express˜ ao a+b.

◮ O resultado da express˜

ao de atribuic ¸ ˜ ao ´ e pr´

  • prio valor final de

express˜ ao.

slide-41
SLIDE 41

41/56

Express˜

  • es: atribuic

¸ ˜ ao II

◮ Sempre que se faz uma atribuic

¸ ˜ ao, o valor da vari´ avel ´ e substitu´ ıdo pelo valor da express˜

  • ao. Portanto o valor anterior ´

e perdido.

slide-42
SLIDE 42

42/56

Express˜

  • es: atribuic

¸ ˜ ao III

◮ Exemplo:

double altura; altura = 1.72; altura = 2 * altura;

◮ A primeira linha declara a vari´

avel altura, por´ em n˜ ao a

  • inicializa. Isto significa que o valor da vari´

avel logo ap´

  • s a sua

declarac ¸ ˜ ao ´ e desconhecido (lixo). Este valor inicial ´ e formado de acordo com a sequˆ encia de bits armazenada na posic ¸ ˜ ao de mem´

  • ria no momento em que ela ´

e alocada.

◮ A segunda linha armazena o valor 1.72 na vari´

avel altura.

◮ A terceira linha calcula o valor da express˜

ao 2 * altura, que ´ e 3.44, e o armazena na vari´ avel altura. O valor anterior (1.72) ´ e perdido.

slide-43
SLIDE 43

43/56

Express˜

  • es: atribuic

¸ ˜ ao combinada com operac ¸ ˜ ao I

◮ Incremento

◮ Modificam a vari´

avel somando 1 ao seu conte´ udo.

◮ Pr´

e-incremento: ++x

◮ Incrementa a vari´

avel primeiro e s´

  • depois usa a vari´

avel no restante da express˜ ao.

◮ Exemplo:

int x = 2; int y = 3 * (++x) - 4;

Primeiro a vari´ avel x ´ e incrementada (o seu novo valor ´ e 3) e depois a express˜ ao 3 * x - 4 ´ e avaliada, resultando em 5.

slide-44
SLIDE 44

44/56

Express˜

  • es: atribuic

¸ ˜ ao combinada com operac ¸ ˜ ao II

◮ P´

  • s-incremento: x++

◮ Primeiro usa a vari´

avel no restante da express˜ ao, e s´

  • depois

incrementa a vari´ avel.

◮ Exemplo:

int x = 2; int y = 3 * (x++) - 4;

Primeiro a express˜ ao 3 * x - 4 ´ e avaliada, resultando em 2, e somente depois a vari´ avel x ´ e incrementada (o seu novo valor ´ e 3).

slide-45
SLIDE 45

45/56

Express˜

  • es: atribuic

¸ ˜ ao combinada com operac ¸ ˜ ao III

◮ Decremento

◮ Modificam a vari´

avel subtraindo 1 do seu conte´ udo.

◮ Pr´

e-decremento: --x

◮ Decrementa a vari´

avel primeiro e s´

  • depois usa a vari´

avel no restante da express˜ ao.

◮ Exemplo:

int x = 2; int y = 3 * (--x) - 4;

Primeiro a vari´ avel x ´ e decrementada (o seu novo valor ´ e 1) e depois a express˜ ao 3 * x - 4 ´ e avaliada, resultando em -1.

slide-46
SLIDE 46

46/56

Express˜

  • es: atribuic

¸ ˜ ao combinada com operac ¸ ˜ ao IV

◮ P´

  • s-decremento: x--

◮ Primeiro usa a vari´

avel no restante da express˜ ao, e s´

  • depois

decrementa a vari´ avel.

◮ Exemplo:

int x = 2; int y = 3 * (x--) - 4;

Primeiro a express˜ ao 3 * x - 4 ´ e avaliada, resultando em 2, e somente depois a vari´ avel x ´ e incrementada (o seu novo valor ´ e 1).

slide-47
SLIDE 47

47/56

Express˜

  • es: atribuic

¸ ˜ ao combinada com operac ¸ ˜ ao V

◮ Operac

¸ ˜ ao combinada com atribuic ¸ ˜ ao: += -= *= /= %=

◮ Realizam a operac

¸ ˜ ao indicada com a vari´ avel que aparece do lado esquerdo e a express˜ ao que aparece do lado direito.

◮ O resultado da operac

¸ ˜ ao ´ e armazenado na vari´ avel que aparece do lado esquerdo.

◮ Exemplo:

int x = 7; x += 2; // x = x + 2 x -= 2; // x = x - 2 x *= 2; // x = x * 2 x /= 2; // x = x / 2 x %= 2; // x = x % 2

slide-48
SLIDE 48

48/56

Express˜

  • es: atribuic

¸ ˜ ao combinada com operac ¸ ˜ ao VI

◮ Exemplo: qual ´

e valor exibido na tela pelo programa? /* Operadores */ int main(void) { int i = 10, j = 20; i = i + 1; i++; j -= 5; prinft("i + j = %d", i+j); return 0; }

slide-49
SLIDE 49

49/56

Express˜

  • es: promoc

¸ ˜ ao impl´ ıcita de tipos

◮ Quando os operandos de algumas operac

¸ ˜

  • es n˜

ao s˜ ao compat´ ıveis com o tipo esperado, ´ e poss´ ıvel que o compilador automaticamente gere c´

  • digo para converter o operando para o

tipo adequado.

◮ Os tipos num´

ericos podem ser convertidos implicitamente para tipos num´ ericos com tamanhos maiores.

◮ Exemplo:

double x; x = 23 + 5.6;

Na express˜ ao 23 + 5.6 os operandos 23 e 5.6 s˜ ao do tipo int e

double respectivamente. Para que a operac

¸ ˜ ao possa ser realizada, ´ e necess´ ario que os dois operandos sejam do mesmo

  • tipo. Logo o operando do tipo int ´

e automaticamente promovido ao tipo double, e o resultado final ´ e 28.6.

slide-50
SLIDE 50

50/56

Express˜

  • es: promoc

¸ ˜ ao expl´ ıcita de tipos

◮ O programador pode realizar uma promoc

¸ ˜ ao expl´ ıcita de tipos atrav´ es das express˜

  • es de promoc

¸ ˜ ao de tipo.

(tipo desejado) express˜ ao

◮ Exemplo: o valor da express˜

ao

(int)(23.4/2.0 + 2.2) / 2

´ e 6.

slide-51
SLIDE 51

51/56

Express˜

  • es: chamadas de func

¸ ˜ ao I

◮ Func

¸ ˜

  • es s˜

ao partes de um programa que permite calcular um valor segunda uma determinada regra, de maneira semelhante ao que se faz com as func ¸ ˜

  • es matem´

aticas.

◮ No decorrer do curso aprenderemos a definir nossas pr´

  • prias

func ¸ ˜

  • es.

◮ A biblioteca do C oferece uma grande quantidade de func

¸ ˜

  • es

que podem ser usadas nos nossos programas.

◮ Quando uma func

¸ ˜ ao ´ e definida, especifica-se o tipo dos argumentos e tamb´ em o tipo do resultado.

◮ Para usarmos uma func

¸ ˜ ao ´ e preciso informar ao compilador como a func ¸ ˜ ao pode ser usada. Isto ´ e feito informando o tipo dos argumentos e o tipo do resultado.

◮ Se a func

¸ ˜ ao foi definida em uma biblioteca, deve-se incluir o arquivo de cabec ¸alho desta biblioteca.

◮ O arquivo de cabec

¸alho cont´ em informac ¸ ˜

  • es sobre como usar as

func ¸ ˜

  • es ali definidas.
slide-52
SLIDE 52

52/56

Express˜

  • es: chamadas de func

¸ ˜ ao II

◮ A chamada de func

¸ ˜ ao ´ e uma express˜ ao da forma

nome (express˜ ao1, ..., express˜ aon)

  • nde nome ´

e o nome da func ¸ ˜ ao, e express˜ ao1, . . . , express˜ aon s˜ ao os argumentos que ser˜ ao utilizados para se obter o resultado segundo a regra implementada pela func ¸ ˜ ao.

◮ Os tipos dos argumentos devem ser compat´

ıveis com os tipos declarados na func ¸ ˜ ao.

◮ O resultado ser´

a do tipo especificado na func ¸ ˜ ao.

◮ Os argumentos s˜

ao avaliados da esquerda para a direita, e em seguida a regra que define a func ¸ ˜ ao ´ e avaliada para se obter o resultado.

slide-53
SLIDE 53

53/56

Express˜

  • es: chamadas de func

¸ ˜ ao III

◮ Potenciac

¸ ˜ ao: a func ¸ ˜ ao

double pow(double x, double y);

da biblioteca math.h calcula a potˆ encia de dois n´

  • umeros. O

primeiro argumento ´ e a base e o segundo ´ e o expoente. Tanto os argumentos quanto o resultado s˜ ao do tipo double.

◮ Exemplo: o valor da express˜

ao pow(2.1, 3.0) ´ e 9.261.

slide-54
SLIDE 54

54/56

Express˜

  • es: chamadas de func

¸ ˜ ao IV

◮ Raiz quadrada: a func

¸ ˜ ao

double sqrt(double x);

tamb´ em da biblioteca math.h calcula a raiz quadrada de um n´

  • umero. O ´

unico argumento ´ e o radicando. Tanto o argumento quanto o resultado s˜ ao do tipo double.

◮ Exemplo: o valor da express˜

ao sqrt(0.81) ´ e 0.9.

slide-55
SLIDE 55

55/56

Express˜

  • es: tamanho de tipo I

◮ A express˜

ao sizeof(tipo) retorna o tamanho, em bytes, de um determinado tipo. (Um byte corresponde a 8 bits).

◮ Exemplo: o valor da express˜

ao sizeof(int) no meu computador ´ e 4.

slide-56
SLIDE 56

56/56

FIM

Cr´ editos: Baseado no material preparado pelo

  • Prof. Guillermo C´

amara-Ch´ avez.