K&R: Capitulo 2 IAED, 2012/2013

Documentos relacionados
Elementos da Linguagem C. K&R: Capitulo 2

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

Controlo de Execução. K&R: Capitulo 3

PROGRAMAÇÃO I E N T R A DA E S A Í DA D E DA D O S

Linguagens de Programação I

Introdução à Programação em C

Hello World. Linguagem C. Tipos de Dados. Palavras Reservadas. Operadores Aritméticos. Pré e pós incremento e pré e pós decremento

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

3. Linguagem de Programação C

Linguagem de Programação I. Aula 06 Linguagem C: Tipos de Dados

Linguagem C: Variáveis e Operadores. Prof. Leonardo Barreto Campos 1

RESUMO DE CONCEITOS BÁSICOS DE C

Introdução à programação

Tipos Primitivos, estruturas de iteração e decisão.

3. Linguagem de Programação C

Linguagens de Programação PROGRAMAÇÃO DE COMPUTADORES. Linguagem C. Linguagem C Estrutura Básica. Constante (literais) Linguagem C Primeiro Programa

Algoritmos e Estruturas de Dados I IEC012. Linguagem C - Guia de bolso - Prof. César Melo

Linguagem Java - Introdução

LINGUAGEM C: VARIÁVEIS E EXPRESSÕES

PROGRAMAS BÁSICOS EM C++ Disciplina: Introdução à Ciência da Computação Prof. Modesto Antonio Chaves Universidade estadual do Sudoeste da Bahia

Linguagens de Programação

4.1- Aritméticos + soma - subtração * multiplicação / divisão % módulo (resto da divisão de inteiros ).

A linguagem C (visão histórica)

Técnicas de Programação em Engenharia Elétrica I - Engenharia de Sistemas Embarcados - Prof. Alessandro Zimmer Introdução à Linguagem C

Elementos Básicos. C# - Elementos básicos. Primeiro programa Tipos de dados Variáveis Constantes Expressões e operadores Controlo de fluxo Tabelas

Revisão Linguagem C Parte 1

Introdução à Programação em C Input / Output

Introdução à Linguagem C Variáveis e Expressões

Programação Estruturada

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas. Aula Tópico 2

Programação com Acesso a BD. Programação com OO Acesso em Java

Revisão da Linguagem C Prof. Evandro L. L. Rodrigues

Introdução à Ciência da Computação scc-120

Princípios de Desenvolvimento de Algoritmos MAC122

Linguagem de Programação C. Prof. Fabrício Olivetti de França

Introdução à Computação MAC0110

Revisão C++ - Parte 1

SCC-120 INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO

Diagramas Sintáticos

Introdução à Linguagem C

Programação científica C++

INF1007: Programação 2. 0 Revisão. 06/08/2015 (c) Dept. de Informática - PUC-Rio 1

Universidade Federal do Espírito Santo. Programação I Tipos de Dados Básicos - C Professora: Norminda Luiza

Fundamentos de Programação

Capítulo 1: Introdução à Linguagem C. Pontifícia Universidade Católica Departamento de Informática

Sintaxe da linguagem Java

Legibilidade do código fonte

Entender o problema Encontrar um algoritmo para resolvê-lo. Implementar o algoritmo numa linguagem de programação

LINGUAGEM DE PROGRAMAÇÃO C AULA 2. Professor: Rodrigo Rocha

Introdução à Linguagem C

Métodos Computacionais. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

Programação Orientada a Objetos II Java Segunda aula. Prof. Rogério Albuquerque de Almeida

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

Linguagem de Programação C. Linguagem de Programação C. Linguagem de Programação C. Linguagem de Programação C. Linguagem de Programação C

Linguagem de Programação C

Algoritmos: Conceitos Fundamentais

Linguagem C: Elementos fundamentais

Estruturas de Dados. Módulo 2 Expressões. 9/8/2005 (c) Marco A. Casanova - PUC-Rio 1

Introdução à Programação. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

Utilização da Linguagem C

Linguagem C. Introdução à Programação C. Variáveis. Identificadores. Identificadores VARIÁVEIS E TIPOS DE DADOS

Java 2 Standard Edition Tipos, literais, operadores e controle de fluxo

Estrutura do programa

Linguagem C para Microcontroladores

Introdução a JAVA. Variáveis, tipos, expressões, comandos e blocos

Linguagem C Princípios Básicos (parte 1)

Linguagem C. Brian W. Kernighan, Dennis Ritchie (K&R) Slides adaptados, inspirados, muitos copiados dos slides do professor Pedro Pereira

Objectivos. Observar os tipos fornecidos pelo C++ Explicar as regras sintácticas para nomes de identificadores Estudar variáveis e constantes

Variáveis e Operadores em C

Referências. Linguagem C. Tipos de variáveis em XC8. Tipos de variáveis. Tipos de variáveis em XC 8 Exemplo. Radicais numéricos em C

Introdução ao Java. Marco A L Barbosa malbarbo.pro.br. Departamento de Informática Universidade Estadual de Maringá

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

Parte 1. Programação (linguagem C) Introdução Geral

Introdução à Programação

Tópicos em C. Eliade F. Lima

Introdução à Linguagem C++

PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS

Tipos de Dados Simples (Continuação)

Universidade de Mogi das Cruzes Implementação Orientada a Objetos - Profª. Danielle Martin. Guia da Sintaxe do Java

Anhanguera Educacional S.A. Centro Universitário Ibero-Americano

Variáveis, Comandos de Atribuição e Comando de Entrada e Saída

Laboratório de Programação II

Cap. 2 Expressões na linguagem C

Algoritmos e Estruturas de Dados I (DCC/003) 2013/1. Estruturas Básicas. Aula Tópico 4

Conceitos básicos de programação

Programação 1. Atribuição, operadores aritméticos, entrada de dados. Técnico em Eletrônica Semestre 5 02

Introdução a JAVA. Variaveis, tipos, expressões, comandos e blocos

Computação Eletrônica. Tipos de dados, constantes, variáveis, operadores e expressões. Prof: Luciano Barbosa

1/50. Conceitos Básicos. Programa Básico

Tópicos de hoje: Cap. 2 Expressões na linguagem C. Bits, Bytes e Palavras. Variáveis e Constantes. Números inteiros num Byte

Linguagem C. IF61A/IF71A - Computação 1 Prof. Leonelo Almeida. Universidade Tecnológica Federal do Paraná

Introdução à Linguagem de Programação C: Variáveis, Constantes, Expressões, Atribuição, Tipos de dados, Entrada e Saída de Dados

Introdução à Ciência da Computação

Módulo 9 VARIÁVEIS, TIPOS DE DADOS, OPERADORES, ESTRUTURAS DE CONTROLO P S I C P T G P S I

4. Estruturas Fundamentais de Programação em C

Aula 4 - Operadores. Prof. Laura Silva de Assis. Engenharia de Computação 2 o Período

Transcrição:

Elementos da Linguagem C K&R: Capitulo 2 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

Identificadores Sequências de letras, underscore, ou dígitos Primeiro caracter é letra ou underscore Identificadores são case-sensitive int i, I; /* Duas variáveis diferentes */ Frequentemente nomes nas bibliotecas começam com underscore para minimizar possiveis conflitos Por convenção usa-se o nome de variaveis em minúsculas e CONSTANTES em maiúsculas Nomes reservados: if, else, int, float, etc 3 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 Tamanho char: 1 byte Tamanho típico int: 4 bytes Tamanho short <= tamanho int <= tamanho long long double Obter o tamanho de um tipo: sizeof() 4

Tipos de Dados (formatos de leitura & escrita) char: %c int: %d ou %i (base decimal) int: %x (base hexadecimal) short int: %hd long int: %ld unsigned short int: %hu unsigned int: %u unsigned long int: %lu float e double: %f 5 Conversão de Tipos (cast) 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 para float em f + i char é inteiro pequeno e podem-se fazer operações aritméticas com caracteres 6

Conversão de Tipos Exemplo de operações aritméticas sobre caracteres Objectivo: Função que recebe como argumento uma string composta apenas por dígitos e devolve o inteiro correspondente 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; 7 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 para double Caso contrário, se um dos operandos é float, converte outro para float Caso contrário, converte short para int e se algum dos operandos for long, converte o outro para long 8

Conversão forçada 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 para int: truncagem Conversão de double para float: truncagem ou arredondamento Nas chamadas a funções, não é necessário recorrer a uma conversão forçada de tipos (ex: double sqrt (double x);): root2=sqrt(2); é equiv. a root2=sqrt(2.0); 9 Constantes Numéricas int: 1234 long: 1234l ou 1234L ou 123456789012 (maior que o maior int) unsigned: 1234u ou 1234U unsigned long: 1234ul ou 1234UL long double: 100.0l ou 100.0L int em notação octal: 037 int em notação hexadecimal: 0x1f ou 0X1F Seguidos de L (long) ou de U (unsigned) double: 100.0 ou 1.0e2 float: 100.0f ou 100.0F 10

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[]) 11 Constantes - Tipos Enumerados Tipo enumerado definido por sequência de constantes enum resposta { NAO, SIM Tipo resposta 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 Tipo resposta: 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 Permite criar uma abstração dos valores quando se programa usando apenas os nomes do tipo enumerado 12

Constantes - Tipos Enumerados #include <stdio.h> enum meses { JAN=1, FEV, MAR, ABR, MAI, JUN, JUL, AGO, SET, OUT, NOV, DEZ ; int main () { enum meses mes; mes=fev; mes++; if (mes==mar) puts("estamos em Março"); return 0; 13 Constantes - Tipos Enumerados #include <stdio.h> enum meses { JAN=1, FEV, MAR, ABR, MAI, JUN, JUL, AGO, SET, OUT, NOV, DEZ ; int main () { enum meses mes; mes=fev; mes++; if (mes==mar) printf("estamos em Março\n"); return 0; 14

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]; 15 Declarações de Variáveis Inicialização de variáveis externas (globais) e estáticas: <tipo> <variável> = <expressão constante>; Variáveis globais são declaradas fora das funções Variáveis estáticas podem ser locais a uma função, mas mantêm o valor entre chamadas à função Caso de omissão: valor 0 Em C só as variáveis globais e estáticas são inicializadas automaticamente a 0, se o utilizador não fornecer nenhuma inicialização explícita Exemplo: int pi = 3.14159; 16

Declarações de Variáveis Inicialização de variáveis automáticas (locais): <tipo> <variável> = <expressão>; Variáveis automáticas são reinicializadas sempre que a função é invocada Caso de omissão: valor indefinido Exemplo: int i, j = f(5); 17 Declarações de Variáveis int global; int contador() { static int i = 1; return i++; int main() { int a = global + contador(); int b = contador(); int c = contador(); printf( a = %d, b = %d, c = %d\n, a, b, c); return 0; Quais os valores escritos no standard output para a, b e c? Porquê? 18

Declarações de Variáveis int global; int contador() { static int i = 1; return i++; int main() { int a = global + contador(); int b = contador(); int c = contador(); printf( a = %d, b = %d, c = %d\n, a, b, c); return 0; Quais os valores escritos no standard output para a, b e c? Porquê? a = 1, b = 2, c = 3 19 Declarações de Variáveis const pode anteceder qualquer declaração Significa que valor não vai mudar Se tentar modificar o valor, o compilador detecta como sendo um erro Compilador pode tirar partido e fazer optimizações Exemplos: const double e = 2.71828182845905; const char msg[] = "bem vindo ao C"; int strlen(const char[]); 20

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 se os argumentos são suficientes para definir valor Valor numérico de expressão lógica é 1 se expressão é verdadeira e 0 se falsa Exemplos 21 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? 22

Operações Bit a Bit Em C é possível efectuar operações sobre a representação binária 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 23 Operações Bit a Bit n = n & 15; Põe a zero todos os bits que não os 4 de ordem mais baixa n = n 10; Põe a um os bits que estão a um na representação binária do número 10 Quais os valores de z e w no seguinte exemplo? int x = 1, y = 2; int z = x & y; int w = x && y; printf( z = %d w = %d \n, z, w); 24

Operações Bit a Bit n = n & 15; Põe a zero todos os bits que não os 4 de ordem mais baixa n = n 10; Põe a um os bits que estão a um na representação binária do número 10 Quais os valores de z e 00000001 w no seguinte exemplo? int x = 1, y = 2; int z = x & y; int w = x && y; printf( z = %d w = %d \n, z, w); z = 0 w = 1 AND 00000010 00000000 x!=0 && y!=0 1 (true) 25 Operações Bit a Bit n = x ˆ y; Põe em n a um (zero) os bits que em x e y são diferentes (iguais) n = x «2; Desloca bits 2 posições esquerda. Espaço preenchido com 0 Cada bit deslocado equivale a uma multiplicação por 2 n = x» 2; Desloca bits 2 posições direita. Espaço preenchido com 0 Cada bit deslocado equivale a uma divisão por 2 26

Atribuições e Expressões i = i + 1; pode ser reescrito como i += 1; += é um operador atribuição Existem outros operadores correspondentes usando -, *, /, %, >>, <<, &, ˆ, <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; 27 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> int maior (int a, int b) { if (a > b) return a; else return b; int maior (int a, int b) { return (a > b? a : b); 28

Sequência de avaliação 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 29 Avaliação de Operadores em C Category Operator Associativity Postfix () [] ->. ++ -- Left to right Unary + -! ~ ++ -- (type)* & sizeof Right to left Multiplicative * / % Left to right Additive + - Left to right Shift << >> Left to right Relational < <= > >= Left to right Equality ==!= Left to right Bitwise AND & Left to right Bitwise XOR ^ Left to right Bitwise OR Left to right Logical AND && Left to right Logical OR Left to right Conditional?: Right to left Assignment = += -= *= /= %= >>= <<= &= ^= = Right to left Comma, Left to right Ref: Tutorialspoint (http://www.tutorialspoint.com/cprogramming/c_operators.htm) 30

Revisitando o switch + break Decisão com opções múltiplas; testa se uma expressão assume um de um conjunto de valores inteiros constantes default é opcional e é executado se a expressão é diferente de qualquer dos outros casos 31 switch (c=getchar()) { case a : break; case b : break; default: Controlo de Execução K&R: Capitulo 3

Controlo de Execução Instruções e Blocos if else-if switch Ciclos: while e for do-while break e continue goto e labels 33 Instruções e Blocos Instrução Expressão terminada por ; Caracter ; denota o fim de uma instrução Exemplo: x = 0; i++; Bloco Chavetas, {, permitem agrupar declarações e instruções instruções de uma função conjuntos de instruções em if, for, while, etc. Exemplo: { int x, i = 1; x = 0; i++; printf( %d %d\n ); 34

Execução Condicional: if Permite exprimir decisões: if (<expressao>) else <instrucao1> <instrucao2> Se <expressao> tem valor diferente de 0, então <instrucao1> é executada Se <expressao> tem valor igual a 0, então <instrucao2> é executada 35 Execução Condicional: switch Decisão com opções múltiplas; testa se uma expressão assume um de um conjunto de valores inteiros constantes switch ( <expressao> ) { case <const-expr>: case <const-expr>: default: default é opcional e é executado se a expressão é diferente de qualquer dos outros casos 36

Execução Condicional: switch Decisão com opções múltiplas; testa se uma expressão assume um de um conjunto de valores inteiros constantes switch (c=getchar()) { case a : case b : default: default é opcional e é executado se a expressão é diferente de qualquer dos outros casos 37 Execução Condicional: switch Decisão com opções múltiplas; testa se uma expressão assume um de um conjunto de valores inteiros constantes default é opcional e é executado se a expressão é diferente de qualquer dos outros casos 38 switch (c=getchar()) { case a : case b : case B : default:

Ciclos Genéricos: while while ( <expressao> ) Enquanto <expressao> fôr diferente de zero, a <instrucao> é executada Ciclo termina quando valor de <expressao> fôr zero 39 Ciclos Contados: for for ( <expr1> ; <expr2> ; <expr3> ) <expr1>; while ( <expr2> ) ; <expr3>; Expressão de inicialização: <expr1> Condição de ciclo: <expr2> Expressão de incremento: <expr3> Ciclos com inicialização e incremento simples 40

Ciclos: do-while do { while ( <expressao> ); Enquanto <expressao> for diferente de zero, as são executadas Ciclo termina quando valor de <expressao> fôr zero Note-se que são executadas sempre pelo menos uma vez /* O valor de n tem que ser superior ou igual a 2 */ int n = 0; do { scanf( %d, &n); while (n < 2); 41 Instruções break e continue A instrução break permite terminar a execução de um for, while, do-while ou switch A instrução continue desencadeia a execução da próxima iteração de um for, while ou do-while Num ciclo for, a execução continua com a expressão de incremento O que acontece aqui? E se fosse break em vez de continue? for(i = 0; i < n; i++) { if (a[i] < 0) continue; printf( %d, a[i]); 42

Revisitando o switch + break Decisão com opções múltiplas; testa se uma expressão assume um de um conjunto de valores inteiros constantes default é opcional e é executado se a expressão é diferente de qualquer dos outros casos 43 switch (c=getchar()) { case a : break; case b : break; default: