Você está na página 1de 35

Estruturas de Dados

Aula 1 Apresentao do curso e Conceitos Fundamentais


prof Adria Lyra adria.ufrrj@gmail.com

18/01/13

Objetivo do curso
Desenvolver habilidades de programao na linguagem C. Familiarizar os alunos com as principais estruturas de dados e suas correspondentes abstraes.

18/01/13

Programa do curso (1)


Parte 1: Programao na linguagem C (REVISO)
Desenvolvimento de programas Variveis, operadores e expresses Entrada/sada bsicas e controle de fluxo Funes Ponteiros e endereos de variveis Vetores e alocao dinmica Cadeia de caracteres Tipos estruturados e tipos abstratos de dados

18/01/13

Programa do curso (2)


Parte 2: Estruturas de Dados
Complexidade de Algoritmos Ordenao e busca

18/01/13

Programa do curso (3)


Parte 3: Estruturas de Dados
Listas encadeadas Pilhas Filas rvores

18/01/13

Comeando a programar...

Compilao de programas Exemplo de cdigo em C Ciclo de desenvolvimento

18/01/13

Modelo de um computador

18/01/13

Execuo de um programa em linguagem interpretada

18/01/13

Execuo de um programa em linguagem compilada

18/01/13

Linguagem de programao adotada: C


Prs e contras:
Est na base da indstria de computao No fcil

Histrico:
1969/73: desenvolvimento da linguagem no AT&T Bell Labs por Ken Thompson e Dennis Ritchie 1989: 1990: 1999: 2000:
18/01/13

padro aprovado pela ANSI (ANSI X3.159-1989 Programming Language C) padro aprovado pela ISO (ISO/IEC 9899:1990) C99 padro revisado pela ISO (ISO 9899:1999) C99 adotado pela ANSI
10

Conceitos Fundamentais
Exemplo de cdigo em C
Arquivo converte.c
/* programa para converso de temperatura de Celsius para Fahrenheit */ #include <stdio.h> /* Funo auxiliar */ float converte (float c) { float f; f = 1.8*c +32; return f; }

18/01/13

11

Conceitos Fundamentais
Arquivo: principal.c
/* Funo principal */ int main (void) { float t1; float t2; /* mostra mensagem para o usurio */ printf(Digite a temperatura em Celsius: ); /* captura valor entrado via teclado */ scanf(%f,&t1); /* converte o valor, chamando a funo auxiliar */ t2 = converte(t1); /* exibe resultado */ printf(Temperatura em Fahrenheit: %f\n, t2); return 0; }
18/01/13 12

Variveis e Constantes
Tipos bsicos na linguagem C:
Tipo char unsigned char short int (short) int (*) long int (long) unsigned long int float double Tamanho 1 byte 1 byte 2 bytes 4 bytes 4 bytes 4 bytes 4 bytes 8 bytes 0 -32.768 0 -2.147.483.648 -2.147.483.648 0 -1038 -10308 Menor valor -128 Maior valor +127 +255 +32.767 +65.535 +2.147.483.647 +2.147.483.647 +4.294.967.295 +1038 +10308

unsigned short int 2 bytes

(*) depende da mquina, sendo 4 bytes para arquiteturas de 32 bits


18/01/13 13

Variveis e Constantes
Valor Constante:
armazenado na memria possui um tipo, indicado pela sintaxe da constante
123 12.45 1245e-2 12.45F /* constante inteira do tipo int */ /* constante real do tipo double */ /* constante real do tipo double */ /* constante real do tipo float */

18/01/13

14

Variveis e Constantes
Varivel:
espao de memria para armazenar um dado no uma varivel no sentido matemtico possui um tipo e um nome
nome: identifica o espao de memria tipo: determina a natureza do dado

18/01/13

15

Variveis e Constantes
Declarao de varivel:
variveis devem ser explicitamente declaradas variveis podem ser declaradas em conjunto
int a; int b; float c; int d, e; /* declara uma varivel do tipo int */ /* declara uma varivel do tipo int */ /* declara uma varivel do tipo float */ /* declara duas variveis do tipo int */

18/01/13

16

Variveis e Constantes
Declarao de varivel:
variveis s armazenam valores do mesmo tipo com que foram declaradas
int a; a = 4.3; /* declara uma varivel do tipo int */ /* a armazenar o valor 4 */

18/01/13

17

Variveis e Constantes
Varivel com valor indefinido:
uma varivel pode receber um valor quando definida (inicializada), ou atravs de um operador de atribuio
int a = 5, b = 10; float c = 5.3; /* declara e inicializa duas variveis do tipo int */ /* declara e inicializa uma varivel do tipo float */

18/01/13

18

Variveis e Constantes
Varivel com valor indefinido:
uma varivel deve ter um valor definido quando utilizada
int a, b, c; /* declara e inicializa duas variveis do tipo int */ a = 2; c = a + b; /* ERRO: b contm lixo */

18/01/13

19

Operadores e Expresses
Operadores:
aritmticos: + , - , * , / , % atribuio: = , += , -= , *= , /= , %= incremento e decremento: ++ , - relacionais e lgicos: < , <= , == , >= , > , != outros

18/01/13

20

Operadores e Expresses
Operadores aritmticos ( + , - , * , / , % ):
operaes so feitas na preciso dos operandos
o operando com tipo de menor expressividade convertido para o tipo do operando com tipo de maior expressividade diviso entre inteiros trunca a parte fracionria
int a; double b, c; a = 3.5; /* a recebe o valor 3 */ b = a / 2.0; /* b recebe o valor 1.5 */ c = 1/3 + b; /* 1/3 retorna 0 pois a operao ser sobre inteiros */ /* c recebe o valor de b */

18/01/13

21

Operadores e Expresses
Operadores aritmticos (cont.):
o operador mdulo, %, aplica-se a inteiros precedncia dos operadores: * , / , - , +
x%2 /* o resultado ser 0, se x for par; caso contrrio, ser 1 */ equivalente a (a + ((b * c) / d))

a+b*c/d

18/01/13

22

Operadores e Expresses
Operadores de atribuio : ( = , += , -= , *= , /= , %= )
C trata uma atribuio como uma expresso
a ordem da direita para a esquerda

C oferece uma notao compacta para atribuies em que a mesma varivel aparece dos dois lados
var op= expr equivalente a var = var op (expr)

i += 2; x *= y + 1;

equivalente a i = i + 2; equivalente a x = x * (y +1);

18/01/13

23

Operadores e Expresses
Operadores de incremento e decremento ( ++ , -- ):
incrementa ou decrementa de uma unidade o valor de uma varivel
os operadores no se aplicam a expresses o incremento pode ser antes ou depois da varivel ser utilizada n++ ++n n = 5; x = n++; x = ++n; a = 3; b = a++ * 2; incrementa n de uma unidade, depois de ser usado incrementa n de uma unidade, antes de ser usado

/* x recebe 5; n incrementada para 6 */ /* n incrementada para 6; x recebe 6 */ / b termina com o valor 6 e a com o valor 4 */

18/01/13

24

Operadores e Expresses
Operadores relacionais (< , <= , == , >= , > , !=):
o resultado ser 0 ou 1 (no h valores booleanos em C)
int a, b; int c = 23; int d = c + 4; c < 20 d>c retorna 0 retorna 1

18/01/13

25

Operadores e Expresses
Operadores lgicos ( && , || , ! )
a avaliao da esquerda para a direita a avaliao pra quando o resultado pode ser conhecido
int a, b; int c = 23; int d = c + 4; a = (c < 20) || (d > c); /* retorna 1 */ /* as duas sub-expresses so avaliadas */ b = (c < 20) && (d > c); /* retorna 0 */ /* apenas a primeira sub-expresso avaliada */

18/01/13

26

Operadores e Expresses
sizeof:
retorna o nmero de bytes ocupados por um tipo

int a = sizeof(float)

/* armazena 4 em a */

18/01/13

27

Operadores e Expresses
converso de tipo:
converso de tipo automtica na avaliao de uma expresso converso de tipo pode ser requisita explicitamente

float f; float f = 3; int g, h; g = (int) 3.5; h = (int) 3.5 % 2

/* valor 3 convertido automaticamente para float */ /* ou seja, passa a valer 3.0F, antes de ser atribudo a f */ /* 3.5 convertido (e arredondado) para int */ /* antes de ser atribudo varivel g */ /* e antes de aplicar o operador mdulo % */

18/01/13

28

Entrada e Sada
Funo printf:
possibilita a sada de valores segundo um determinado formato
printf (formato, lista de constantes/variveis/expresses...); printf ("%d %g", 33, 5.3); tem como resultado a impresso da linha: 33 5.3 printf ("Inteiro = %d Real = %g", 33, 5.3); com sada: Inteiro = 33 Real = 5.3
18/01/13 29

Entrada e Sada
Especificao de formato: %c %d %u %f %e %g %s especifica um char especifica um int especifica um unsigned int especifica um double (ou float) especifica um double (ou float) no formato cientfico especifica um double (ou float) no formato mais apropriado (%f ou %e) especifica uma cadeia de caracteres

18/01/13

30

Entrada e Sada
Especificao de tamanho de campo:

%4d 4 %7.2f 5 .

3 3

3 0 2

18/01/13

31

Entrada e Sada
Impresso de texto:
printf("Curso de Estruturas de Dados\n"); exibe na tela a mensagem: Curso de Estruturas de Dados

18/01/13

32

Entrada e Sada
Funo scanf:
captura valores fornecidos via teclado
scanf (formato, lista de endereos das variveis...); int n; scanf ("%d", &n); valor inteiro digitado pelo usurio armazenado na varivel n

18/01/13

33

Entrada e Sada
Especificao de formato:
%c %d %u %f,%e,%g %lf, %le, %lg %s especifica um char especifica um int especifica um unsigned int especificam um float especificam um double especifica uma cadeia de caracteres

18/01/13

34

Entrada e Sada
Funo scanf (cont.):
caracteres diferentes dos especificadores no formato servem para cercar a entrada espao em branco dentro do formato faz com que sejam "pulados" eventuais brancos da entrada %d, %f, %e e %g automaticamente pulam os brancos que precederem os valores numricos a serem capturados
scanf ("%d:%d", &h, &m); valores (inteiros) fornecidos devem ser separados pelo caractere dois pontos (:)

18/01/13

35