Baixe o app para aproveitar ainda mais
Prévia do material em texto
Introdução a C • Tipos de Dados • Variáveis • Operadores INF1005 – Programação I – 33B Prof. Gustavo Moreira gmoreira@inf.puc-rio.br 1 introdução a C tópicos sistemas numéricos tipos de dados variáveis e constantesvariáveis e constantes operadores pré-processamento referência Capítulo 2 da apostila 2 algumas linguagens de programação Java Ruby PHP Lua 1993 C++ 1983 Pascal 1970 ALGOL 68 1968 COBOL 61 FORTRAN I 1957 Visual Basic 1991 LISP 1959 ... ... 3 PHP 1995 1972 C Smalltalk Prolog COBOL 61 1961 Javascript Perl 1996 2000 C# linguagem C Criada por Dennis Ritchie (co-criador do UNIX) entre 1969 e 1973 no AT&T Bell Labs (Dennis Ritchie 1941-2011) 4(K&R 1972) 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; } 5 03_01_conversao_temp.c 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; } 6 03_01_conversao_temp.c 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: "); comentários são marcados entre /* e */ /* 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; } 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: "); função main indica início do programa /* 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; } 8 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: "); cada bloco de instruções é marcado entre { e } /* 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; } 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: "); variáveis são declaradas com seu tipo (número inteiro, real, etc.) /* 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; } 10 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: "); printf é função que exibe algo na/* 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; } 11 que exibe algo na tela 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; } 12 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) 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; } 13 comando de atribuição (variável fahr recebe valor à direita do = ) 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; } 14 retorno da main indica término do programa; por convenção, 0 indica que não houve erro 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: "); Digite a temperatura em Celsius: 0 Temperatura em Fahrenheit: 32.000000 /* 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; } 15 03_01_conversao_temp.c diretivas de pré-processamento funções auxiliares (Cap. 3 da apostila) 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; } comentários (em todo o código) função principal (main): início da execução do programa int main (void) { float cels; /* temperatura em Celsius */ float fahr; /* temperatura em Fahrenheit */ printf("Digite a temperaturaem Celsius: "); scanf("%f", &cels); fahr = converte(cels); printf("Temperatura em Fahrenheit: %f", fahr); return 0; } 16 03_01_conversao_temp.c comentários (em todo o código) 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 e funções � que os usuários consigam utilizar: � instruções para os usuários� instruções para os usuários 17 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; } (sistemas numéricos) 18 bits vs. algarismos decimais 0 1 bit algarismo decimal 0 1 5 6 19 2 3 4 7 8 9 sistemas numéricos decimal (base 10) 9 5 0 7 9×103 + 5×102 + 0×101 + 7×100= 9000 + 500 + 0 + 7 20 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 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. EX. 01 equivalentes no sistema decimal. 21 Kroyzen 2E9 + 141 42A Briptus 1351 + 501 2052 bits & bytes 0 1 bit 22 byte 0 0 0 0 1 0 1 1 8 bits Como obter a representação binária de um número decimal? 37 2 1 18 2 0 9 2 23 1 4 2 0 2 2 0 1 37 = 32 + 4 + 1 = 25+22+20 = 00100101 tipos de dados 24 Quanto cabe num byte? 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) 03_03_tipos_de_dados.c = 127 (0x7F)0 1 1 1 1 1 1 1 último bit utilizado como sinal 25 = -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 tipos de dados char unsigned char: 0 a 255 char –128 a 127 short int short int: –32 768 a 32 767 1 byte 2 bytes letra ‘C’ = 67 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 0 0 1 0 0 0 0 1 1 26 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 4 bytes 456 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 tipos de dados (cont.) 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 27 inteiros 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áveisvariáveis 28 O que é uma variável? O nomenomenomenome que se dá a um espaço reservado na memória, onde será possível armazenar um valorvalorvalorvalor de um determinado tipotipotipotipo. Antes de ser utilizada, uma variável deve ser declaradadeclaradadeclaradadeclarada, indicando seu tipo e, opcionalmente, seu valor inicial: int contador = 0; float a, b; float media = 0.0F; 29 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; declaração de variáveis de um mesmo tipo (em uma só instrução) float tempC, tempF; int a, b; inicialização de valor (atribuição após a declaração) int a, b; a = 5; b = 10; 30 Toda variável deve ser inicializada antes de ser utilizada (ex.: exibida, incluída em uma expressão) declaração com inicialização int a = 5, b = 10; constantes valores constantes int a = 5; int b; b = a + 12; exemplos inteiros 13 –4 double 12.45 1245e-21245e-2 float 12.45F char 'a' 'A' string (cadeia de char) "Rio de Janeiro" "RJ" "a" "A" 31 Qual é o valor de a? exemplo 1 int a; a = 4; a=? EX. 02 a=? exemplo 3 int a, b=5; 32 03_05_variavel_a.c!! a=? exemplo 2 int a; a = 4.9F; a=? exemplo 4 int a, b, c=3; a = b+c; 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 */ 33 03_07_conv_tipo.c exercício Suponha que: a = 3; b = a / 2; c = b + 3.1F; EX. 03 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 34 float a, b, c; int a, b; float c; int a, b, c; 03_09_explora_tipo.c caracteres (char: 1 byte) – tabela ASCII American Standard Code for Information Interchange 35 caracteres: declaração e inicialização char a = 98; char b = 'A'; int c = b; char d; d = c + 32; 03_10_char.c Qual é o caractere armazenado em a? Qual é o valor de c? Qual é o caractere armazenado em d? 36 d = c + 32; 'b' 65 'a' 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 37 dúvidas?dúvidas? 38 operadoresoperadores 39 operadores aritméticos + – * / % (módulo) atribuição = relacionais > < <= >= == != lógicos && (and)= incremento e decremento ++ –– && (and) || (or) ! (not) 40 operadores aritméticos + – * / % (módulo) 7 / 2 � 3 (a parte fracionária é descartada) 7 / 2.02.02.02.0 � 7.07.07.07.0 / 2.0 � 3.57 / 2.02.02.02.0 � 7.07.07.07.0 / 2.0 � 3.5 7.07.07.07.0 / 2 � 7.0 / 2.02.02.02.0 � 3.5 (converte operandos para a maior precisão) 41 03_13_op_arit.c 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 14 % 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 42 Em que outras situações o % é útil? 03_13_op_arit.c 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 i /= 2 equivale a i = i / 2 ... var op= expr; equivale a var = var op (expr); x *= y+1; equivale ao quê? 43 x = x * (y+1); operadores de incremento e decremento após a variável: “utiliza” o valor original, depois incrementa x = 3; a = x++; a = x; x = x + 1; a=3; x=3+1; antes da variável primeiro incrementa, depois “utiliza” o valor resultante x = 3; a = ++x; 44 x = x + 1; a = x; x=3+1;a=4; EX. 05operadores de incremento e decremento int n = 4, x = 1; n = 5; x = n++; n x x = ++n; x = ++n * 2; x = n++ * 3; 45 03_11_op_inc_dec.c operadores de incremento e decremento int n = 4, x = 1; n = 5; /* n � 5 */ x = n++; /* x � 5; n incrementa para 6 */ EX. 05 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 */ 46 03_11_op_inc_dec.c dúvidas?dúvidas? 47 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(short); /* 2 */ a = sizeof(float); /* 4 */ a = sizeof(double); /* 8 */ 48 número de bytes ocupados por um ponteiro (endereço de memória) máquinamáquinamáquinamáquina de 32 bitsde 32 bitsde 32 bitsde 32 bits sizeof(void*): 4 máquinamáquinamáquinamáquina de 64 bitsde 64 bitsde 64 bitsde 64 bits sizeof(void*): 8 49 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 50 relembrando: ciclo de desenvolvimento desenvolvimento editor de texto correção em caso de erros de compilação correção em caso de erros de exeçucão programa em C (código fonte: arq.c) 51 testes saída programa executável (arq.exe) compiladorcompilação saída saída entrada entrada entrada pré-processamento pré- processador 52 diretivas de pré-processamento: #include #include <stdio.h> /* definições de printf, scanf, ... */ int main (void) { 53 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; } diretiva #include “arquivo” ou #include <arquivo> o pré-processador substitui o “#include” pelo corpo do arquivo especificado void testa_fatorial(int n); void testa_etc(); void testa_fatorial(int n); void testa_etc(); arquivo fc.h no subdiretório aux 54 #include "aux/fc.h" int main(void) { testa_fatorial(1); return 0; } void testa_etc(); int main(void) { testa_fatorial(1); return 0; } pré-proc. void testa_etc(); arquivo prog.c diretivas de pré-processamento: #include #include <stdio.h> /* definições de printf, scanf, ... */ int main (void) { 55 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; } 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) { 56 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; } diretiva #define constante valor o pré-processador substitui toda ocorrência da constante pelo valor especificado #define PI 3.14159F 57 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. 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) { 58 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; } diretiva #define nome macro definição com parâmetros #define MULT(a,b) ((a)*(b)) ... v = 4.5; c = MULT(v, -3.0); ... 59 ... v = 4.5; c = ((v)*(-3.0)); ... diretiva #define: cuidados macro e seus parâmetros entre parênteses exemplo #define MULT(a,b) a*b#define MULT(a,b) a*b#define MULT(a,b) a*b#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)) #define MULT(a,b) ((a)*(b)) #define MULT(a,b) ((a)*(b)) #define MULT(a,b) ((a)*(b)) int x = MULT (3+2, 4) /* ((3+2)*(4)) = (5*4) = 20, CERTO */ 60 exercício EX. 06 Escreva um programa de caixa eletrônico que lê um valor e imprime 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: Digite a quantia desejada: R$ 215 61 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 dúvidas?dúvidas? 62 Prof. Gustavo Moreira gmoreira@inf.puc-rio.br
Compartilhar