Elementos da Linguagem C K&R: Capitulo 2 IAED Tagus, 2009/2010
Elementos da Linguagem C Identificadores Tipos Constantes Declarações Operadores aritméticos, lógicos e relacionais Conversões de tipos Operadores de incremento e decremento Operações bit a bit Operações de atribuição e expressões Expressões condicionais Precedência e ordem de avaliação 2 IAED Tagus, 2009/2010
Identificadores Sequências de letras, underscore, ou dígitos Primeiro caracter é letra ou underscore Frequentemente nomes nas bibliotecas começam com underscore identificador diferente de Identificador variaveis em minúsculas e CONSTANTES em maiúsculas Variáveis internas: primeiros 31 caracteres significativos Variáveis externas e funções: 6 primeiros caracteres significativos sem distinção de maiúsculas/minúsculas Nomes reservados: if, else, int, float, etc 3 IAED Tagus, 2009/2010
Tipos de Dados char, int, float, double short int (short), long int (long) signed/unsigned char, short, int, long unsigned obedece aritmética módulo 2 n (n=número bits) signed char entre -128 e 127 Tamanhochar: 1 byte Tamanho típico int: 4 bytes Tamanhoshort tamanhoint tamanholong long double Obter o tamanho de um tipo: sizeof() 4 IAED Tagus, 2009/2010
Constantes Numéricas int: 1234 long: 1234l ou1234l ou123456789012 (maior que o maiorint) unsigned: 1234u ou1234u unsigned long: 1234ul ou1234ul long float: 100.0l ou100.0l int em notação octal: 037 int em notação hexadecimal: 0x1f ou0x1f Seguidos de L (long) ou de U (unsigned) double: 100.0 ou1.0e2 float: 100.0f ou100.0f 5 IAED Tagus, 2009/2010
Constantes com Caracteres char são inteiros 0 representa 48 (entrada 48 tabela ASCII é 0 ) Caracteres de escape: caracteres especiais (ex:\n,\t,etc) "Uma string" Representação interna U m a s t r i n g \0 Diferença entre"x" e x? Comprimento de uma string: int strlen(char s[]) 6 IAED Tagus, 2009/2010
Constantes - Tipos Enumerados Tipo enumerado definido por sequência de constantes enum resposta { NAO, SIM } Tiporesposta tem duas constants: NAO e SIM Constantes de tipo enumerado têm valor inteiro (int): a primeira constante vale 0, a segunda vale 1, etc Tiporesposta: NAO vale 0 e SIM vale 1 Pode-se especificar valores para as constantes ou não enum meses { JAN=1, FEV=2, MAR, ABR, MAI, JUN, JUL, AGO, SET, OUT, NOV, DEZ } Compilador verifica valores guardados 7 IAED Tagus, 2009/2010
Declarações de Variáveis Precedem utilização e especificam tipo e lista das variáveis Sequência de declarações: int superior, inferior, passo; char c, linha[1000]; Alternativa: int superior; int inferior; int passo; char c; char linha[1000]; 8 IAED Tagus, 2009/2010
Declarações de Variáveis Inicialização de variáveis externas e estáticas: <tipo> <variável> = <expressão constante>; Caso de omissão: valor 0 Exemplo: int pi = 3.14159; Inicialização de variáveis automáticas: <tipo> <variável> = <expressão>; Caso de omissão: valor indefinido Exemplo: int i = 0; 9 IAED Tagus, 2009/2010
Declarações de Variáveis Constantes const pode anteceder qualquer declaração Significa que valor não vai mudar Compilador pode tirar partido Exemplos: const double e = 2.71828182845905; const char msg[] = "bem vindo ao C"; int strlen(const char[]); 10 IAED Tagus, 2009/2010
Operadores Operadores Aritméticos: +, -, *, / e % Situação de overflow e underflow: reacção não definida Operadores Relacionais: >, >=, <, e <= (precedências iguais), == e!= (precedências inferiores) Operadores Lógicos:!, && e. Precedências: aritméticos, relacionais, && e && e avaliam argumentos da esquerda para direita e param quando argumentos são suficientes para definir valor Valor numérico de expressão lógica é1se expressão é verdadeira e 0 se falsa 11 IAED Tagus, 2009/2010
Conversão de Tipos Argumentos de operadores de diferentes tipos provocam transformação de tipos dos argumentos Algumas conversões automáticas: de representações estreitas para representações mais largas. Exemplo: conversão de int parafloat emf + i char é inteiro pequeno e podem-se fazer contas int atoi(char s[]) { int i,n; n = 0; for (i=0; s[i]>= 0 && s[i]<= 9 ; ++i) n = 10 * n + (s[i] - 0 ); return n; } 12 IAED Tagus, 2009/2010
Conversão de Tipos Quando operador binário (+, *, etc) tem operandos de tipos diferentes, tipos dos operandos convertidos Quando não há argumentos unsigned: Se algum dos operandos élong double, converte outro para long double Caso contrário, se um dos operandos édouble, converte outro paradouble Caso contrário, se um dos operandos éfloat, converte outro parafloat Caso contrário, converteshort paraint e se algum dos operandos for long, converte o outro paralong 13 IAED Tagus, 2009/2010
Conversão de Tipos Conversão forçada de tipos: utilização de operador cast (<tipo>) <expressão> Valor <expressão> convertido para tipo<tipo> como se tratasse de atribuição Exemplo: int i = (int) 2.34; Conversão de float paraint: truncagem Conversão de double parafloat: truncagem ou arredondamento Nas chamadas a funções, há conversão de tipos 14 IAED Tagus, 2009/2010
Operadores de Incremento e Decremento Operador incrementar variável (++) e decrementar variável (--) e retorna valor variável Operadores prefixos (++<var>, --<var>) primeiro incrementa/decrementa e depois retorna valores Operadores posfixos (<var>++, <var>--) primeiro retorna valor e depois incrementa/decrementa Se n é5, qual é o valor de x depois de x=n++? Se n é5, qual é o valor de x depois de x=++n? 15 IAED Tagus, 2009/2010
Operações bit a bit Manipular bits em inteiros (char, short, int, long): & AND bit a bit OR bit a bit ˆ XOR (OR exclusivo) bit a bit << shift left >> shift right complemento de 1 Ex: n = n & 0177; Põe a zero todos os bits que não os 7 de ordem mais baixa n = n SET_ON; Põe a um os bits que estão a um emset_on Se x = 1; y = 2;, valor de x & y? E x && y? 16 IAED Tagus, 2009/2010
Operações bit a bit n = x ˆ y; Põe emna um (zero) os bits que emxe y são diferentes (iguais) x «2 Desloca bits 2 posições esquerda. Espaço preenchido com 0 x» 2 Desloca bits 2 posições direita. Espaço preenchido com 0 17 IAED Tagus, 2009/2010
Atribuições e Expressões i = i + 1; pode ser reescrito comoi += 1; += é um operador atribuição Outros operadores correspondentes a -, *, /, %, >>, <<, &, ˆ, <expr1> <op> = <expr2> equivale a <expr1> = (<expr1>) <op> (<expr2>) Vantagens operadores atribuição: mais próximo maneira de pensar de humanos; Ex: i += 2; simplifica leitura de expressões complicadas; Ex: yyval[yypv[p3+p4]+yypv[p1+p2]] += 2; 18 IAED Tagus, 2009/2010
Expressões Condicionais Expressão condicional: expressão cujo valor depende de uma outra expressão <expr1>? <expr2> : <expr3> Se <expr1> for verdadeiro, valor da expressão é<expr2> Se <expr1> for falso, valor da expressão é<expr3> Exemplo: z = (a > b)? a : b; if (a > b) z = a; else z = b; 19 IAED Tagus, 2009/2010
Tabela de Precedência e Ordem de Avaliação () [] ->. ED! ++ -- + - * & (tipo) sizeof DE * / % ED + - ED << >> ED < <= > >= ED ==!= ED & ED ˆ ED ED && ED ED?: DE = += -= *= /= %= &= ˆ= = <<= >>= DE, ED 20 IAED Tagus, 2009/2010
IBM PC 5150: o primeiro PC 21 IAED Tagus, 2009/2010