introdução a c tipos de dados variáveis operadoreslopes/inf1005/progiaula4.pdf · 2012-08-07 ·...
Post on 03-Jul-2020
7 Views
Preview:
TRANSCRIPT
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
lopes@inf.puc-rio.br
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
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
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)
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
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
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
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
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
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)
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
32
INF 1005 Programação I - Prof. Hélio lopes 8/7/12
dúvidas? Prof. Hélio Lopes lopes@inf.puc-rio.br sala 408 RDC
63
top related