introdução a c tipos de dados variáveis operadoreslopes/inf1005/progiaula4.pdf · 2012-08-07 ·...

32
1 INF 1005 Programação I - Prof. Hélio lopes 8/7/12 Introdução a C Tipos de Dados Variáveis Operadores INF1005 – Programação I Prof. Hélio Lopes [email protected] sala 408 RDC 1 introdução a C tópicos ciclo de desenvolvimento sistemas numéricos tipos de dados variáveis e constantes operadores pré-processamento referência Capítulo 2 da apostila 2

Upload: others

Post on 03-Jul-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introdução a C Tipos de Dados Variáveis Operadoreslopes/inf1005/ProgIAula4.pdf · 2012-08-07 · Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação

1  

INF 1005 Programação I - Prof. Hélio lopes 8/7/12

   

Introdução a C • Tipos de Dados • Variáveis • Operadores

INF1005 – Programação I

Prof. Hélio Lopes

[email protected]

sala 408 RDC

1

introdução a C

tópicos ciclo de desenvolvimento

sistemas numéricos

tipos de dados

variáveis e constantes

operadores

pré-processamento

referência Capítulo 2 da apostila

2

Page 2: Introdução a C Tipos de Dados Variáveis Operadoreslopes/inf1005/ProgIAula4.pdf · 2012-08-07 · Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação

2  

INF 1005 Programação I - Prof. Hélio lopes 8/7/12

... ...

algumas linguagens de programação

3

Java Ruby PHP 1995

Lua 1993

C++ 1983

1972 C Smalltalk Prolog

Pascal 1970

ALGOL 68 1968

COBOL 61 1961

FORTRAN I 1957

Visual Basic 1991

Javascript Perl 1996

2000 C#

LISP 1959

linguagem C

Criada por Dennis Ritchie (co-criador do UNIX)

entre 1969 e 1973 no AT&T Bell Labs

(Dennis Ritchie 1941-2011)

(K&R 1972) 4

Page 3: Introdução a C Tipos de Dados Variáveis Operadoreslopes/inf1005/ProgIAula4.pdf · 2012-08-07 · Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação

3  

INF 1005 Programação I - Prof. Hélio lopes 8/7/12

ciclo de desenvolvimento

5

ciclo de desenvolvimento simplificado

desenvolvimento editor de texto

testes

saída

programa executável

(arq.exe)

compilador

correção em caso de erros de compilação

correção em caso de erros de exeçucão

compilação

programa em C

(código fonte: arq2.c)

saída

saída

entrada

entrada

entrada

6

programa em C

(código fonte: arq1.c)

Page 4: Introdução a C Tipos de Dados Variáveis Operadoreslopes/inf1005/ProgIAula4.pdf · 2012-08-07 · Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação

4  

INF 1005 Programação I - Prof. Hélio lopes 8/7/12

exemplo de programa em C  #include  <stdio.h>  int  main  (void)  {    float  cels;      float  fahr;          printf("Digite  a  temperatura  em  Celsius:  ");      scanf("%f",  &cels);        fahr  =  1.8  *  cels  +  32;          printf("Temperatura  em  Fahrenheit:  %f",  fahr);    return  0;  }  

03_01_conversao_temp.c

7

exemplo de programa em C /*  Converte  temperatura  de  Celsius  em  Fahrenheit  */  #include  <stdio.h>  /*  inclui  biblioteca  padrão  */  int  main  (void)  {    float  cels;  /*  temperatura  em  Celsius  */    float  fahr;  /*  temperatura  em  Fahrenheit  */      /*  exibe  instrução  para  usuário  */    printf("Digite  a  temperatura  em  Celsius:  ");    /*  lê  do  teclado  temperatura  em  Celsius  */    scanf("%f",  &cels);      /*  calcula  a  conversão  */    fahr  =  1.8  *  cels  +  32;        /*  exibe  na  tela  o  resultado  */    printf("Temperatura  em  Fahrenheit:  %f",  fahr);    return  0;  }  

03_01_conversao_temp.c

8

Page 5: Introdução a C Tipos de Dados Variáveis Operadoreslopes/inf1005/ProgIAula4.pdf · 2012-08-07 · Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação

5  

INF 1005 Programação I - Prof. Hélio lopes 8/7/12

exemplo de programa em C /*  Converte  temperatura  de  Celsius  em  Fahrenheit  */  #include  <stdio.h>  /*  inclui  biblioteca  padrão  */  int  main  (void)  {    float  cels;  /*  temperatura  em  Celsius  */    float  fahr;  /*  temperatura  em  Fahrenheit  */      /*  exibe  instrução  para  usuário  */    printf("Digite  a  temperatura  em  Celsius:  ");    /*  lê  do  teclado  temperatura  em  Celsius  */    scanf("%f",  &cels);      /*  calcula  a  conversão  */    fahr  =  1.8  *  cels  +  32;        /*  exibe  na  tela  o  resultado  */    printf("Temperatura  em  Fahrenheit:  %f",  fahr);    return  0;  }  

comentários são marcados entre /* e */  

9

exemplo de programa em C /*  Converte  temperatura  de  Celsius  em  Fahrenheit  */  #include  <stdio.h>  /*  inclui  biblioteca  padrão  */  int  main  (void)  {    float  cels;  /*  temperatura  em  Celsius  */    float  fahr;  /*  temperatura  em  Fahrenheit  */      /*  exibe  instrução  para  usuário  */    printf("Digite  a  temperatura  em  Celsius:  ");    /*  lê  do  teclado  temperatura  em  Celsius  */    scanf("%f",  &cels);      /*  calcula  a  conversão  */    fahr  =  1.8  *  cels  +  32;        /*  exibe  na  tela  o  resultado  */    printf("Temperatura  em  Fahrenheit:  %f",  fahr);    return  0;  }  

função main indica início do programa  

10

Page 6: Introdução a C Tipos de Dados Variáveis Operadoreslopes/inf1005/ProgIAula4.pdf · 2012-08-07 · Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação

6  

INF 1005 Programação I - Prof. Hélio lopes 8/7/12

exemplo de programa em C /*  Converte  temperatura  de  Celsius  em  Fahrenheit  */  #include  <stdio.h>  /*  inclui  biblioteca  padrão  */  int  main  (void)  {    float  cels;  /*  temperatura  em  Celsius  */    float  fahr;  /*  temperatura  em  Fahrenheit  */      /*  exibe  instrução  para  usuário  */    printf("Digite  a  temperatura  em  Celsius:  ");    /*  lê  do  teclado  temperatura  em  Celsius  */    scanf("%f",  &cels);      /*  calcula  a  conversão  */    fahr  =  1.8  *  cels  +  32;        /*  exibe  na  tela  o  resultado  */    printf("Temperatura  em  Fahrenheit:  %f",  fahr);    return  0;  }  

cada bloco de instruções é marcado entre { e }  

11

exemplo de programa em C /*  Converte  temperatura  de  Celsius  em  Fahrenheit  */  #include  <stdio.h>  /*  inclui  biblioteca  padrão  */  int  main  (void)  {    float  cels;  /*  temperatura  em  Celsius  */    float  fahr;  /*  temperatura  em  Fahrenheit  */      /*  exibe  instrução  para  usuário  */    printf("Digite  a  temperatura  em  Celsius:  ");    /*  lê  do  teclado  temperatura  em  Celsius  */    scanf("%f",  &cels);      /*  calcula  a  conversão  */    fahr  =  1.8  *  cels  +  32;        /*  exibe  na  tela  o  resultado  */    printf("Temperatura  em  Fahrenheit:  %f",  fahr);    return  0;  }  

variáveis são declaradas com seu tipo (número inteiro, real, etc.)  

12

Page 7: Introdução a C Tipos de Dados Variáveis Operadoreslopes/inf1005/ProgIAula4.pdf · 2012-08-07 · Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação

7  

INF 1005 Programação I - Prof. Hélio lopes 8/7/12

exemplo de programa em C /*  Converte  temperatura  de  Celsius  em  Fahrenheit  */  #include  <stdio.h>  /*  inclui  biblioteca  padrão  */  int  main  (void)  {    float  cels;  /*  temperatura  em  Celsius  */    float  fahr;  /*  temperatura  em  Fahrenheit  */      /*  exibe  instrução  para  usuário  */    printf("Digite  a  temperatura  em  Celsius:  ");    /*  lê  do  teclado  temperatura  em  Celsius  */    scanf("%f",  &cels);      /*  calcula  a  conversão  */    fahr  =  1.8  *  cels  +  32;        /*  exibe  na  tela  o  resultado  */    printf("Temperatura  em  Fahrenheit:  %f",  fahr);    return  0;  }  

printf é função que exibe algo na tela  

13

exemplo de programa em C /*  Converte  temperatura  de  Celsius  em  Fahrenheit  */  #include  <stdio.h>  /*  inclui  biblioteca  padrão  */  int  main  (void)  {    float  cels;  /*  temperatura  em  Celsius  */    float  fahr;  /*  temperatura  em  Fahrenheit  */      /*  exibe  instrução  para  usuário  */    printf("Digite  a  temperatura  em  Celsius:  ");    /*  lê  do  teclado  temperatura  em  Celsius  */    scanf("%f",  &cels);      /*  calcula  a  conversão  */    fahr  =  1.8  *  cels  +  32;        /*  exibe  na  tela  o  resultado  */    printf("Temperatura  em  Fahrenheit:  %f",  fahr);    return  0;  }  

scanf é função que lê valores do teclado e os atribui a variáveis (nesse caso apenas um valor real, atribuído à variável cels)  

14

Page 8: Introdução a C Tipos de Dados Variáveis Operadoreslopes/inf1005/ProgIAula4.pdf · 2012-08-07 · Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação

8  

INF 1005 Programação I - Prof. Hélio lopes 8/7/12

exemplo de programa em C /*  Converte  temperatura  de  Celsius  em  Fahrenheit  */  #include  <stdio.h>  /*  inclui  biblioteca  padrão  */  int  main  (void)  {    float  cels;  /*  temperatura  em  Celsius  */    float  fahr;  /*  temperatura  em  Fahrenheit  */      /*  exibe  instrução  para  usuário  */    printf("Digite  a  temperatura  em  Celsius:  ");    /*  lê  do  teclado  temperatura  em  Celsius  */    scanf("%f",  &cels);      /*  calcula  a  conversão  */    fahr  =  1.8  *  cels  +  32;        /*  exibe  na  tela  o  resultado  */    printf("Temperatura  em  Fahrenheit:  %f",  fahr);    return  0;  }  

comando de atribuição (variável fahr recebe valor à direita do = )  

15

exemplo de programa em C /*  Converte  temperatura  de  Celsius  em  Fahrenheit  */  #include  <stdio.h>  /*  inclui  biblioteca  padrão  */  int  main  (void)  {    float  cels;  /*  temperatura  em  Celsius  */    float  fahr;  /*  temperatura  em  Fahrenheit  */      /*  exibe  instrução  para  usuário  */    printf("Digite  a  temperatura  em  Celsius:  ");    /*  lê  do  teclado  temperatura  em  Celsius  */    scanf("%f",  &cels);      /*  calcula  a  conversão  */    fahr  =  1.8  *  cels  +  32;        /*  exibe  na  tela  o  resultado  */    printf("Temperatura  em  Fahrenheit:  %f",  fahr);    return  0;  }  

retorno da main indica término do programa; por convenção, 0  indica  que  não  houve  erro  16

Page 9: Introdução a C Tipos de Dados Variáveis Operadoreslopes/inf1005/ProgIAula4.pdf · 2012-08-07 · Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação

9  

INF 1005 Programação I - Prof. Hélio lopes 8/7/12

exemplo de programa em C - execução /*  Converte  temperatura  de  Celsius  em  Fahrenheit  */  #include  <stdio.h>  /*  inclui  biblioteca  padrão  */  int  main  (void)  {    float  cels;  /*  temperatura  em  Celsius  */    float  fahr;  /*  temperatura  em  Fahrenheit  */      /*  exibe  instrução  para  usuário  */    printf("Digite  a  temperatura  em  Celsius:  ");    /*  lê  do  teclado  temperatura  em  Celsius  */    scanf("%f",  &cels);      /*  calcula  a  conversão  */    fahr  =  1.8  *  cels  +  32;        /*  exibe  na  tela  o  resultado  */    printf("Temperatura  em  Fahrenheit:  %f",  fahr);    return  0;  }  

Digite  a  temperatura  em  Celsius:  0  Temperatura  em  Fahrenheit:  32.000000  

03_01_conversao_temp.c

17

diretivas de pré-processamento

funções auxiliares (Cap. 3 da apostila)

função principal (main): início da execução do programa

estrutura de um programa em C #include  <stdio.h>    /*  Retorna  o  valor  equivalente  em  Fahrenheit  à          temperatura  c  (em  Celsius)  */    float  converte  (float  c)  {      return  1.8F  *  c  +  32;  }    int  main  (void)  {    float  cels;    /*  temperatura  em  Celsius  */    float  fahr;    /*  temperatura  em  Fahrenheit  */    printf("Digite  a  temperatura  em  Celsius:  ");    scanf("%f",  &cels);    fahr  =  converte(cels);      printf("Temperatura  em  Fahrenheit:  %f",  fahr);    return  0;  }  

03_01_conversao_temp.c

18

comentários (em todo o código)

comentários (em todo o código)

Page 10: Introdução a C Tipos de Dados Variáveis Operadoreslopes/inf1005/ProgIAula4.pdf · 2012-08-07 · Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação

10  

INF 1005 Programação I - Prof. Hélio lopes 8/7/12

a importância de escrever programas legíveis

  legíveis (para você e outros programadores):   comentários /* ignorados pelo compilador */

  endentação

  escolha dos nomes das variáveis

  que os usuários consigam utilizar:   instruções para os usuários

Leia o código abaixo.

Você gostaria de trabalhar assim? Seria eficiente?

#include  <stdio.h>    int  main  (void)  {  float  x,  y;  scanf("%f",  &x);  y  =  1.8  *  x  +  32;  printf("%f",  y);  return  0;  }  

19

sistemas numéricos

20

Page 11: Introdução a C Tipos de Dados Variáveis Operadoreslopes/inf1005/ProgIAula4.pdf · 2012-08-07 · Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação

11  

INF 1005 Programação I - Prof. Hélio lopes 8/7/12

bits vs. algarismos decimais

0

1

bit algarismo decimal

0

1

2

3

4

5

6

7

8

9

21

sistemas numéricos

decimal (base 10)

9 5 0 7

9×103  +  5×102  +  0×101  +  7×100=  9000  +    500  +        0  +        7  

binário (base 2)

1 0 1 1

1×23    +  0×22      +  1×21    +  1×20=  

   8    +      0    +      2    +    1  =  11  22

Page 12: Introdução a C Tipos de Dados Variáveis Operadoreslopes/inf1005/ProgIAula4.pdf · 2012-08-07 · Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação

12  

INF 1005 Programação I - Prof. Hélio lopes 8/7/12

sistemas numéricos

Os governantes do planeta Kroyz querem declarar guerra ao planeta Bript, alegando que eles foram enganados na conta de um

restaurante da Federação de Planetas Matmatix.

Considerando que os Kroyzen possuem oito dedos em cada mão, e

os Briptus possuem quatro dedos em cada mão, verifique se as

contas abaixo estão corretas, se são equivalentes, e quais os valores equivalentes no sistema decimal.

Kroyzen

2E9

+ 141

42A

EX. 01

Briptus

1351

+ 501

2052 23

bits & bytes

0

1

bit

byte 0 0 0 0 1 0 1 1

8 bits 24

Page 13: Introdução a C Tipos de Dados Variáveis Operadoreslopes/inf1005/ProgIAula4.pdf · 2012-08-07 · Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação

13  

INF 1005 Programação I - Prof. Hélio lopes 8/7/12

Como obter a representação binária de um número decimal?

25

37 2

1 18 2

0 9 2

1 4 2

0 2 2

0 1

37 = 32 + 4 + 1 = 25+22+20 = 00100101

tipos de dados

26

Page 14: Introdução a C Tipos de Dados Variáveis Operadoreslopes/inf1005/ProgIAula4.pdf · 2012-08-07 · Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação

14  

INF 1005 Programação I - Prof. Hélio lopes 8/7/12

último bit utilizado como sinal

Quanto cabe num byte?

27

28 valores → 256 valores unsigned char – valores inteiros não negativos: 0 a 255

char – valores inteiros: -128 a 127

1 1 1 1 1 1 1 1 = 255 (0xFF)

= -128 (0x80) 1 0 0 0 0 0 0 0

= 127 (0x7F) 0 1 1 1 1 1 1 1

= -1 (0xFF) 1 1 1 1 1 1 1 1

= -127 (0x81) 1 0 0 0 0 0 0 1

= -126 (0x82) 1 0 0 0 0 0 1 0

03_03_tipos_de_dados.c

= 127 (0x7F) 0 1 1 1 1 1 1 1

tipos de dados

char unsigned char: 0 a 255 char –128 a 127

short int short int: –32 768 a 32 767 unsigned short int: 0 a 65 535

long int long int: –2 147 483 648 a 2 147 483 647 unsigned long int: 0 a 4 294 967 295

1 byte

2 bytes

4 bytes

456

letra ‘C’ = 67

1.077.150.273

0 1 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1

0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 0

0 1 0 0 0 0 1 1

28

Page 15: Introdução a C Tipos de Dados Variáveis Operadoreslopes/inf1005/ProgIAula4.pdf · 2012-08-07 · Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação

15  

INF 1005 Programação I - Prof. Hélio lopes 8/7/12

tipos de dados (cont.)

29

tipo bytes valores

números inteiros

char 1 -128 a 127

short int 2 –32.768 a 32.767

long int 4 –2.147.483.648

a 2.147.483.647

long long 8 -9.223.372.036.854.775.808

a 9.223.372.036.854.775.807

int (em geral = long int)

números reais

float 4 ~10-38 a 1038

double 8 ~10-308 a 10308

variáveis

30

Page 16: Introdução a C Tipos de Dados Variáveis Operadoreslopes/inf1005/ProgIAula4.pdf · 2012-08-07 · Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação

16  

INF 1005 Programação I - Prof. Hélio lopes 8/7/12

O que é uma variável?

O nome que se dá a um espaço reservado na memória, onde será possível armazenar um valor de um determinado tipo.

Antes de ser utilizada, uma variável deve ser declarada, indicando

seu tipo e, opcionalmente, seu valor inicial: int  contador  =  0;  

float  a,  b;  

float  media  =  0.0F;  

31

memória (esquema meramente ilustrativo)

número inteiro de nome contador

número de ponto flutuante de nome a

número de ponto flutuante de nome b

número de ponto flutuante de nome media

0x24A57B89

0x24A57B8D

0x24A57B91

0x24A57B95

todo espaço de memória tem um endereço único

Como declarar uma variável?

declaração de variáveis float  tempC;  

float  tempF;

inicialização de valor (atribuição após a declaração)

int  a,  b;  

a  =  5;  

b  =  10;  

Toda variável deve ser inicializada antes de ser utilizada (ex.: exibida, incluída em uma expressão)

declaração de variáveis de um mesmo tipo (em uma só instrução)

float  tempC,  tempF;  

int  a,  b;  

declaração com inicialização

int  a  =  5,  b  =  10;  

32

Page 17: Introdução a C Tipos de Dados Variáveis Operadoreslopes/inf1005/ProgIAula4.pdf · 2012-08-07 · Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação

17  

INF 1005 Programação I - Prof. Hélio lopes 8/7/12

constantes

valores constantes int  a  =  5;  

int  b;  

b  =  a  +  12;  

exemplos inteiros

13                  –4  double

12.45  1245e-­‐2  

float

12.45F  char

'a'    'A'  string (cadeia de char)

"Rio  de  Janeiro"    "RJ"  "a"      "A"  

33

Qual é o valor de a?

exemplo 1 int  a;  

a  =  4;  

exemplo 2 int  a;  

a  =  4.9F;  

exemplo 3 int  a,  b  =  5;  

exemplo 4 int  a,  b,  c=3;  

 a  =  b+c;  

a=?

a=?

a=?

a=?

03_05_variavel_a.c !

EX. 02

34

Page 18: Introdução a C Tipos de Dados Variáveis Operadoreslopes/inf1005/ProgIAula4.pdf · 2012-08-07 · Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação

18  

INF 1005 Programação I - Prof. Hélio lopes 8/7/12

conversão de tipo

implícita (automática, na avaliação de uma expressão) float  a  =  3;  /*  conversão  para  3.0F  */  

explícita, através de cast int  x;  

float  y  =  3.5F;  

x  =  (int)  y;  /*  descarta  parte  fracionária  de  y  */  

03_07_conv_tipo.c

35

exercício

Suponha que: a  =  3;  

b  =  a  /  2;  

c  =  b  +  3.1F;  

Como as variáveis a, b e c devem ser declaradas (int, float etc.) para obter cada um dos seguintes resultados?

c  =  4.6  

c  =  4.1  

c  =  4  

float  a,  b,  c;  

int  a,  b;  float  c;  

int  a,  b,  c;  

EX. 03

03_09_explora_tipo.c

36

Page 19: Introdução a C Tipos de Dados Variáveis Operadoreslopes/inf1005/ProgIAula4.pdf · 2012-08-07 · Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação

19  

INF 1005 Programação I - Prof. Hélio lopes 8/7/12

caracteres (char: 1 byte) – tabela ASCII American Standard Code for Information Interchange

37

03_10_char.c

caracteres: declaração e inicialização

Qual é o caractere armazenado em a?

Qual é o valor de c?

Qual é o caractere armazenado em d?

char  a  =  98;  

char  b  =  ‘A’;  

int  c  =  b;  

char  d;  

d  =  c  +  32;  

‘b’  

65  

‘a’  

38

Page 20: Introdução a C Tipos de Dados Variáveis Operadoreslopes/inf1005/ProgIAula4.pdf · 2012-08-07 · Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação

20  

INF 1005 Programação I - Prof. Hélio lopes 8/7/12

Dado que, na tabela ASCII, A=65, Z=90, a=97 e

z=122, como converter uma letra maiúscula em

letra minúscula?

EX. 04

39

operadores

40

Page 21: Introdução a C Tipos de Dados Variáveis Operadoreslopes/inf1005/ProgIAula4.pdf · 2012-08-07 · Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação

21  

INF 1005 Programação I - Prof. Hélio lopes 8/7/12

operadores

aritméticos + – * / % (módulo)

atribuição =

incremento e

decremento ++ ––

relacionais > < <= >= == !=

lógicos && (and)

|| (or)

! (not)

41

operadores aritméticos

+ – * / % (módulo)

7 / 2 3 (a parte fracionária é descartada)

7 / 2.0 7.0 / 2.0 3.5

7.0 / 2 7.0 / 2.0 3.5

(converte operandos para a maior precisão)

03_13_op_arit.c

42

Page 22: Introdução a C Tipos de Dados Variáveis Operadoreslopes/inf1005/ProgIAula4.pdf · 2012-08-07 · Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação

22  

INF 1005 Programação I - Prof. Hélio lopes 8/7/12

operadores aritméticos – módulo %

Resto da divisão inteira (operandos devem ser inteiros) 0 % 3 resulta em 0

1 % 3 resulta em 1

2 % 3 resulta em 2

3 % 3 resulta em 0

4 % 3 resulta em 1

5 % 3 resulta em 2

5 % 0 resulta em _____?

Útil para identificar números pares ou ímpares se x % 2 é 0, o número x é par

se x % 2 é 1, o número x é impar

Em que outras situações o % é útil?

03_13_op_arit.c

43

operadores de atribuição

= a = 5;

y = x = 5;

operadores de atribuição compostos i += 2 equivale a i = i + 2

i *= 2 equivale a i = i * 2

i /= 2 equivale a i = i / 2

...

var op= expr; equivale a var = var op (expr);

x *= y+1; equivale ao quê? x = x * (y+1);

44

Page 23: Introdução a C Tipos de Dados Variáveis Operadoreslopes/inf1005/ProgIAula4.pdf · 2012-08-07 · Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação

23  

INF 1005 Programação I - Prof. Hélio lopes 8/7/12

operadores de incremento e decremento

após a variável: “utiliza” o valor original, depois incrementa

x = 3;

a = x++;

antes da variável primeiro incrementa, depois “utiliza” o valor

resultante

x = 3;

a = ++x;

a  =  x;  x  =  x  +  1;  

x  =  x  +  1;  a  =  x;  

a=3;  x=3+1;  

x=3+1;a=4;  

45

EX. 05 operadores de incremento e decremento

int n = 4, x = 1;

n = 5;

x = n++;

x = ++n;

x = ++n * 2;

x = n++ * 3;

03_11_op_inc_dec.c

n x

46

Page 24: Introdução a C Tipos de Dados Variáveis Operadoreslopes/inf1005/ProgIAula4.pdf · 2012-08-07 · Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação

24  

INF 1005 Programação I - Prof. Hélio lopes 8/7/12

operadores de incremento e decremento

int n = 4, x = 1;

n = 5; /* n 5 */

x = n++; /* x 5; n incrementa para 6 */

x = ++n; /* n incrementa para 7; x 7 */

x = ++n * 2; /* n incrementa para 8; x 16 */

x = n++ * 3; /* x 24; n incrementa para 9 */

03_11_op_inc_dec.c

EX. 05

47

dúvidas?

48

Page 25: Introdução a C Tipos de Dados Variáveis Operadoreslopes/inf1005/ProgIAula4.pdf · 2012-08-07 · Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação

25  

INF 1005 Programação I - Prof. Hélio lopes 8/7/12

operador sizeof

número de bytes ocupados por um tipo int a = sizeof(long); /* 4 */

a = sizeof(char); /* 1 */

a = sizeof(short); /* 2 */

a = sizeof(float); /* 4 */

a = sizeof(double); /* 8 */

49

número de bytes ocupados por um ponteiro (endereço de memória)

máquina de 32 bits

sizeof(void*): 4

máquina de 64 bits

sizeof(void*): 8

50

Page 26: Introdução a C Tipos de Dados Variáveis Operadoreslopes/inf1005/ProgIAula4.pdf · 2012-08-07 · Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação

26  

INF 1005 Programação I - Prof. Hélio lopes 8/7/12

precedência de operadores tipo de operador operador associatividade

primários ()  []  .  -­‐>  expr++  expr-­‐-­‐   esquerda para direita

unários *  &  +  -­‐  !  ~  ++expr  –expr  (typecast)  sizeof  

direita para esquerda

binários *  /  %   esquerda para direita

+  -­‐  

>>  <<  

<  >  <=  >=  

==  !=  

&  

^  

|  

&&  

||  

ternário ?  :   direita para esquerda

atribuição =  +=  -­‐=  *=  /=  %=  >>=  <<=  &=  ^=  |=   direita para esquerda 51

relembrando: ciclo de desenvolvimento

desenvolvimento editor de texto

testes

saída

programa executável

(arq.exe)

compilador

correção em caso de erros de compilação

correção em caso de erros de exeçucão

compilação

programa em C

(código fonte: arq.c)

saída

saída

entrada

entrada

entrada

52

pré-processamento

Page 27: Introdução a C Tipos de Dados Variáveis Operadoreslopes/inf1005/ProgIAula4.pdf · 2012-08-07 · Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação

27  

INF 1005 Programação I - Prof. Hélio lopes 8/7/12

pré-processador

53

diretivas de pré-processamento: #include

#include  <stdio.h>    /*  definições  de  printf,  scanf,  ...  */        int  main  (void)  {    float  raio;  /*  raio  da  esfera  */    float  vol;    /*  volume  calculado  */    printf("Entre  com  o  raio  da  esfera:  ");    scanf("%f",  &raio);    vol  =  (4.0  /  3.0)  *  3.14159F  *  raio  *  raio  *  raio;    printf("Volume  da  esfera  :  %f",  vol);    return  0;  }  

54

Page 28: Introdução a C Tipos de Dados Variáveis Operadoreslopes/inf1005/ProgIAula4.pdf · 2012-08-07 · Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação

28  

INF 1005 Programação I - Prof. Hélio lopes 8/7/12

diretiva #include “arquivo” ou #include <arquivo>

o pré-processador substitui o “#include” pelo corpo do arquivo especificado

#include "aux/fc.h"

int main(void)

{

testa_fatorial(1);

return 0;

}

void testa_fatorial(int n);

void testa_etc();

int main(void)

{

testa_fatorial(1);

return 0;

}

pré-proc.

void testa_fatorial(int n);

void testa_etc();

arquivo fc.h no subdiretório aux

arquivo prog.c

55

diretivas de pré-processamento: #include

#include  <stdio.h>    /*  definições  de  printf,  scanf,  ...  */        int  main  (void)  {    float  raio;  /*  raio  da  esfera  */    float  vol;    /*  volume  calculado  */    printf("Entre  com  o  raio  da  esfera:  ");    scanf("%f",  &raio);    vol  =  (4.0  /  3.0)  *  3.14159F  *  raio  *  raio  *  raio;    printf("Volume  da  esfera  :  %f",  vol);    return  0;  }  

56

Page 29: Introdução a C Tipos de Dados Variáveis Operadoreslopes/inf1005/ProgIAula4.pdf · 2012-08-07 · Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação

29  

INF 1005 Programação I - Prof. Hélio lopes 8/7/12

diretivas de pré-processamento: #define

#include  <stdio.h>    /*  definições  de  printf,  scanf,  ...  */    #define  PI  3.14159F  /*  símbolo  a  ser  substituído  no  código  */    int  main  (void)  {    float  raio;  /*  raio  da  esfera  */    float  vol;    /*  volume  calculado  */    printf("Entre  com  o  raio  da  esfera:  ");    scanf("%f",  &raio);    vol  =  (4.0  /  3.0)  *  PI  *  raio  *  raio  *  raio;    printf("Volume  da  esfera  :  %f",  vol);    return  0;  }  

57

diretiva #define constante valor

o pré-processador substitui toda ocorrência da constante pelo valor especificado

#define PI 3.14159F

float area (float r)

{

float a = PI * r * r;

return a;

}

float area (float r)

{

float a = 3.14159F * r * r;

return a;

}

pré-proc.

58

Page 30: Introdução a C Tipos de Dados Variáveis Operadoreslopes/inf1005/ProgIAula4.pdf · 2012-08-07 · Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação

30  

INF 1005 Programação I - Prof. Hélio lopes 8/7/12

diretivas de pré-processamento: #include e #define

#include  <stdio.h>    /*  definições  de  printf,  scanf,  ...  */  #include  <math.h>      /*  definições  de  pow(base,  expoente),  ...*/  #define  PI  3.14159F  /*  símbolo  a  ser  substituído  no  código  */    int  main  (void)  {    float  raio;  /*  raio  da  esfera  */    float  vol;    /*  volume  calculado  */    printf("Entre  com  o  raio  da  esfera:  ");    scanf("%f",  &raio);    vol  =  (4.0  /  3.0)  *  PI  *  pow(raio,  3);    printf("Volume  da  esfera  :  %f",  vol);    return  0;  }  

59

diretiva #define nome macro

definição com parâmetros #define MULT(a,b) ((a)*(b))

...

v = 4.5;

c = MULT(v, -3.0);

...

...

v = 4.5;

c = ((v)*(-3.0));

...

60

Page 31: Introdução a C Tipos de Dados Variáveis Operadoreslopes/inf1005/ProgIAula4.pdf · 2012-08-07 · Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação

31  

INF 1005 Programação I - Prof. Hélio lopes 8/7/12

diretiva #define: cuidados

macro e seus parâmetros entre parênteses

exemplo #define MULT(a,b) a*b

int x = MULT (3+2, 4) /* 3+2*4 = 3+8 = 11, ERRADO */

#define MULT(a,b) ((a)*(b))

int x = MULT (3+2, 4) /* ((3+2)*(4)) = (5*4) = 20, CERTO */

61

exercício EX. 06

Escreva um programa de caixa eletrônico que que lê um valor e retorna o menor número de notas de R$50, R$20 e R$10 que

devem ser entregues ao correntista para somar aquele valor.

Indique ainda o total entregue e o resto que não poderá ser

entregue. exemplo de saída:

03_19_caixa.c

Digite  a  quantia  desejada:  R$  215    Notas  de  R$  50:  4  Notas  de  R$  20:  0  Notas  de  R$  10:  1    Total  entregue:  R$  210  Resto:                    R$  5  

62

Page 32: Introdução a C Tipos de Dados Variáveis Operadoreslopes/inf1005/ProgIAula4.pdf · 2012-08-07 · Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação

32  

INF 1005 Programação I - Prof. Hélio lopes 8/7/12

dúvidas? Prof. Hélio Lopes [email protected] sala 408 RDC

63