Você está na página 1de 72

Estrutura de Dados

Prof. Gustavo Willam Pereira


Crditos:
Profa. Juliana Pinheiro Campos

ESTRUTURAS DE DADOS

Ementa










Introduo Linguagem C.
Recursividade.
Alocao dinmica de memria.
Conceito de tipos abstratos de dados.
Listas
Pilhas
Filas
rvores.
Implementao de tipos abstratos de dados.

CONCEITOS BSICOS

Estruturas de dados:

Forma particular de armazenamento e


organizao dos dados em um computador de
modo que possam ser recuperados e usados
posteriormente de forma eficiente.


Alguns tipos de estruturas so adequadas a


diferentes tipos de aplicao, destinando-se a
tarefas especficas.


CONCEITOS BSICOS


Estruturas de dados e algoritmos:

Algoritmo: um conjunto determinado de instrues


(aes) que quando seguidas desempenham uma tarefa
particular.


As estruturas de dados esto altamente relacionadas


aos algoritmos que as manipulam:
Algoritmos e estruturas de dados devem ser
consideradas como unidades distintas e
complementares.


A escolha de um algoritmo a ser utilizado depende da


representao e da estrutura dos dados.


CONCEITOS BSICOS


Estruturas de dados estticas e dinmicas:

Estticas: A alocao de memria para essas


estruturas realizada antes que o programa entre
em execuo. No oferece suporte adequado para
insero e remoo de elementos dinamicamente.


Homogneas: vetores e matrizes


Heterogneas: tipos estruturados (registros)

Dinmicas: A alocao de memria para essas


estruturas realizada durante a execuo do
programa, conforme a necessidade.


Listas, filas, pilhas, rvores, etc.

ESTRUTURAS DE DADOS

Linguagem C
C uma linguagem de programao compilada,
estruturada e de alto nvel.

uma das linguagens de programao mais


populares.


Oferece acesso a endereos de variveis

A histria de C



C nasceu na dcada de 70.


Seu inventor, Dennis Ritchie, implementou-o
pela primeira vez usando um DEC PDP-11
rodando o sistema operacional UNIX.
C derivado de uma outra linguagem: o B,
criado por Ken Thompson.
B, por sua vez, veio da linguagem BCPL,
inventada por Martin Richards.

A histria de C

Dados histricos:
1969 - Desenvolvimento do UNIX (num PDP 7 em
linguagem Assembly);
1969 - Desenvolvimento da linguagem BCPL, prxima do
Assembly;
1970 - Desenvolvimento da linguagem B, sucessora da
anterior (o B a 1 letra de BCPL);
1971 - Primeiro desenvolvimento da linguagem C,
sucessora da anterior (o C a 2 letra de BCPL);
1973 - O sistema operativo UNIX reescrito em
linguagem C;
1978 - Primeira edio do livro The C Programming
Language, Kernighan & Ritchie;
1983-1988 - Definio do ANSI C;
8

Histria das Linguagens de


Programao

CONCEITOS BSICOS


A linguagem C:


Linguagem convencional

Devemos reservar uma rea na memria para


armazenar cada dado.


Um programa em C constitudo de diversas


funes pequenas, independentes entre si.


Funo principal (main) automaticamente executada


aps o programa ser carregado.

Tempo de vida e visibilidade das variveis:





Variveis locais;
Variveis globais;

ESTRUTURAS DE DADOS


Ambiente de Desenvolvimento Integrado




Dev C++: Ambiente gratuito para programao


em C e C++.

http://www.bloodshed.net/devcpp.html

Microsoft Visual C++ Express Edition


http://www.microsoft.com/visualstudio/en-us/products/2010editions/visual-cpp-express

CONCEITOS BSICOS


Linguagem C x Linguagem Pascal:


Comando

Pascal

Comentrios

{ comentario}

/* comentario */

Identificadores

No case sensitive

case sensitive

Definio de tipos

type

typedef

Declarao de inteiros

integer

int

Declarao de caracter char

char

Boolean

Boolean tratado
como true ou false

No h tratado como
0 ou 1

Real

real

Float ou double

Tipos enumerados

type a = (vermelho,
verde, azul)

enum a {vermelho,
verde, azul};

CONCEITOS BSICOS


Linguagem C x Linguagem Pascal:


Comando

Pascal

Vetores

Limites definidos pelo


programador. Ex:
var a = array[1..10] of
integer;

Comea da posio 0 e
vai at n 1 (sendo n o
tamanho do vetor). Ex:
int a[10];

Strings

Tipo pr-definido
tratado internamente
como array.

O tipo string no
definido. Deve-se criar
um vetor de char.

Registros

record

struct

Atribuio

:=

CONCEITOS BSICOS


Linguagem C x Linguagem Pascal:


Operadores

Pascal

Aritmticos

+, -, *, /, div, mod

+, -, *, /, %, ++, --

Relacionais

>, <, >=, <=, =, <>

>, <, >=, <=, ==, !=

Lgicos

and , or

&& , ||

Atribuies especiais

No h

+=, -=, *=, /=, %=

CONCEITOS BSICOS


Linguagem C x Linguagem Pascal:


Estruturas de controle
Pascal

if cond then stmt else stmt

if (cond) stmt else stmt

while cond do stmt

while (cond) stmt

repeat stmt until cond

do stmt while (cond)

for id := expr to expr do stmt

for (expr; cond; expr) stmt

case expr of expr : stmt; ... expr :


stmt; else: stmt; end

switch (expr) { case expr : stmt; ...


case expr : stmt; default: stmt }

CONCEITOS BSICOS


Linguagem C x Linguagem Pascal:

Exemplo de programa que imprime Ol Mundo!


Pascal
Program ola;
Begin
writeln(Ol mundo!);
end.

C
#include <stdio.h>
int main()
{
printf(Ol mundo!);
}

CONCEITOS BSICOS


Declarao e inicializao de variveis:







Valores constantes:




int a, b;
float c;
c = 5.3;
int a = 10;

a = b + 13
a = b + 12.5;
a = b + 12.5f;

// sem sufixo, real do tipo double


// real do tipo float exige sufixo f ou F

Variveis com valores indefinidos:






int a, b, c;
a = 2;
c = a + b;

ERRO: b tem lixo!!!

CONCEITOS BSICOS


Operadores:


Aritmticos:


Atribuio:


incremento (++), decremento (--);

Relacionais:


simples (=) ,compostos (+=, -=, *=, /=, %=);

De incremento e decremento:


adio (+) , subtrao (-) , multiplicao (*) , diviso (/),


mdulo (%);

menor que (<), maior que(>), menor ou igual que (<=), maior
ou igual que (>=), igual (==), diferente (!=).

Lgicos:


e/and (&&), ou/or (||), negao/not (!)

CONCEITOS BSICOS


Exemplos de utilizao de operadores:




Quais sero os valores armazenados nas variveis a, b, c?

int a;
double b, c;
a = 3.5;
b = a / 2.0;
c = 1/3 + b;
Resposta: a = 3, b = 1.5, c = 1.5.

CONCEITOS BSICOS


Exemplos de utilizao de operadores:

x%2;

// operador % se aplica somente a operandos inteiros

a = 5;

// o valor resultante o valor atribudo

y = x = 5;
x *= y + 1;

// var op= expr  var = var op (expr)

x = n++; x = ++n;

// incrementa em uma unidade o valor de n

int c = 23, d = c + 4;
a = (c < 20) || (d > c); // armazena o valor 1 em a
b = (c < 20) && (d > c);

// armazena o valor 0 em b

Operadores
Operadores Combinados
x = x op y;  x op= y;

Expresso Normal

Expresso Simplificada

a = a + b;

a+=b;

a = a - b;

a-=b;

a = a * b;

a*=b;

a = a / b;

a/=b;

a = a % b;

a%=b;

CONCEITOS BSICOS
 Operador


sizeof

Retorna o nmero de bytes de um determinado


tipo.
Exemplo:

int x = sizeof(int);
printf("Nmero de bytes ocupado pelo inteiro tipo inteiro : %i \n", x);
...


sizeof(int) retorna 2 ou 4 dependendo do inteiro natural da


mquina

CONCEITOS BSICOS

Converso de tipos


Operador cast: operador de molde de tipo


Exemplo

int a;
a = (int) 3.5;
printf("a = %i", a);

 O valor impresso de a 3 porque o valor 3.5 foi convertido


para inteiro

Operador de Modelagem
Exemplo de operador de modelagem
/* Exemplo utilizando moldagem (cast) */
#include <stdio.h>
void main(void)
{
int dividendo=10, divisor=3;
float quociente=0.0;
quociente = (float)dividendo / divisor;
printf("%d/%d = %.2f\n", dividendo, divisor, quociente);
getchar();
}

CONCEITOS BSICOS


Entradas e sadas bsicas




As operaes de entrada e sada em C so feitas


com o uso de funes.
Para utilizar essas funes necessrio incluir o
prottipo das funes no cdigo. Para isso, devese incluir a biblioteca:


#include <stdio.h>

CONCEITOS BSICOS


Entradas e sadas bsicas




Funo printf:




Possibilita a sada de valores em um formato especfico.


printf(formato, lista de constantes/variveis/expresses);
Deve existir um especificador de formato
correspondente (Ex: %c, %d, %f, %s,)
Ex: printf(Inteiro: %d, real: %f, 5, 3.4);

Funo scanf:





Permite capturar valores fornecidos via teclado pelo


usurio do programa e armazen-los em variveis.
scanf(formato, lista de endereos das variveis);
Ex: int n;
scanf(%d, &n);

OUTROS COMANDOS DE ENTRADA

A tabela a seguir exibe outras funes que podem


ser utilizadas para entrada de dados, ou seja funes
de leitura:


Funo

Operao

getchar ( )

l um caractere; espera por <enter>

getche(),getch()

l um caractere ; no espera por <enter>

gets ( )

l uma string via teclado

puts ( )

Imprime uma string na tela

27

scanf e printf
Tabela contendo cdigos de formatao para printf e
scanf:


Cdigo

printf

scanf

%d

imprime um inteiro
decimal

l um inteiro decimal

%f

ponto decimal flutuante

l um numero com ponto


flutuante

%s

string de caracteres

l uma string de caracteres

%c

um nico caractere

l um nico caractere

%p

imprime um ponteiro

l um ponteiro

%%

imprime % na tela

28

CONCEITOS BSICOS


Linguagem C
Exemplo de programa que l e Mostra Idade
C
#include <sdtio.h>
#include <conio.h>
void main()
{
clrscr();
int idade;
char nome[30];
printf(Digite sua Idade: );
scanf(%d,&idade);
printf(Seu Nome: );
scanf(%s,nome); /* Strings no utilizar & na leitura */
printf(%s sua idade e %d anos. \n, nome, idade);
}

O tamanho e preciso do campo


O tamanho do campo indica quantas posies da sada
sero utilizados para exibir o valor correspondente um
especificador de formato.
O tamanho do campo determinado colocando-se um
nmero entre o % e o caracter indicador do formato.
Por exemplo, %5d indica que o valor a ser impresso vai
ocupa 5 posies na tela.

Por padro, as posies em excesso so preenchidas com


brancos e o valor alinhado direita do campo.

30

O tamanho e preciso do campo


Se o tamanho do campo for precedido por um
smbolo - (menos), ento o valor ser alinhado
esquerda do campo.
Se o tamanho do campo for precedido com o
smbolo 0 (zero), ento as posies excedentes so
preenchidas com zeros.
Sempre que o tamanho do campo for insuficiente
para exibir o valor solicitado, este tamanho
ignorado. Desta forma um valor nunca truncado.

31

O tamanho e preciso do campo

Para valores em ponto-flutuante, pode-se definir o nmero de


casas decimais a serem impressas, colocando-se o um ponto
(.) e outro nmero depois do tamanho do campo.

Por exemplo, o formato %10.2f, exibe o valor em pontoflutuante com duas casas decimais, dentro de um campo de
tamanho 10.

Se esta mesma lgica for utilizada com strings (formato %s), o


valor antes do ponto continua indicando a tamanho do campo,
porm a segunda parte limitar o nmero mximo de
caracteres da string a serem impressos.

32

CONCEITOS BSICOS


Controle de fluxo: C prov as construes

fundamentais de controle de fluxo necessrias para


programas bem estruturados.


Tomadas de deciso:
if(expr) {

if (expr){

OU

bloco de comandos 1

bloco de comandos 2
...
ou
}

...
}
else {

bloco de comandos 1

Operador condicional:


condicao ? expressao1 : expressao2;

CONCEITOS BSICOS


Controle de fluxo:


Construes com laos:

while (expr)
{
bloco de comandos

}
for (expr_inicial; expr_booleana; expr_de_incremento)
ou
{
bloco de comandos

CONCEITOS BSICOS


Controle de fluxo:


Construes com laos:

do
{

bloco de comandos

} while (expr_booleana);
ou

OBS: O bloco de comandos ser executado pelo


menos uma vez.

CONCEITOS BSICOS


Controle de fluxo:


Interrupes com break:




Quando utilizado dentro de um lao, interrompe e


termina a execuo do mesmo.

Interrupes com continue:




Quando utilizado dentro de um lao, interrompe a


execuo e passa para a prxima iterao.
ou

CONCEITOS BSICOS


Controle de fluxo:


Seleo:

switch(expr){
case op1:

Inteiro ou uma constante caractere

break;
case op2:

Se break for omitido, a execuo do caso


continua com os comandos do caso seguinte.

break;
default:

break;
}

ou
Executado quando expr for diferente de todos
os casos enumerados.

CONCEITOS BSICOS


Exerccios:


1) Implemente um programa que faz a converso


de um valor de temperatura na escala Celsius
para a Fahrenheit formula: F = C 1,8 + 32.
2) Faa um programa para calcular o ndice de
Massa Corporal (IMC) e, com base no resultado,
informar a categoria qual o indivduo pertence,
de acordo com a tabela mostrada abaixo. O IMC
definido como a relao entre o peso e a
altura ao quadrado. A altura deve ser dada em
metros e o peso em kg. O IMC calculado de
acordo com a frmula dada a seguir e as
categorias so definidas pelos limites abaixo:

CONCEITOS BSICOS


Exerccios:

3) Escreva um programa que faa uma contagem


regressiva usando while a partir do nmero digitado
pelo usurio. O programa deve fazer isso enquanto o
valor digitado for positivo.

CONCEITOS BSICOS

Exerccios:
4) Escreva um algoritmo em C que determine o
conceito da nota do estudante de acordo com
seu valor


Nota maior ou igual a 90 => A


Nota no intervalo de 80 a 89 => B
Nota no intervalo de 70 a 79 => C
Nota no intervalo de 60 a 69 => D
Para as demais notas R

CONCEITOS BSICOS


Funes


Funes o mecanismo adequado para codificar


tarefas especficas.
Vantagens:


Facilita a codificao: codificar diversas funes


pequenas mais fcil que codificar uma nica maior.
Funes especficas podem ser facilmente reutilizadas
em outros cdigos.

Tipo geral
tipo_retornado nome_da_funo (lista de parmetros...)

{
corpo da funo
}

CONCEITOS BSICOS


Funes
tipo_retornado nome_da_funo (lista de parmetros...)

{
}

corpo da funo

tipo_retornado = void
indica o no retorno de um valor
tipo_retornado = int, char, float,
retorna um valor do tipo
definido
tipo_retornado = int*, char*,
retorna um ponteiro para int, char,
OBS: Funes retornam um nico valor!

CONCEITOS BSICOS


Funes
tipo_retornado nome_da_funo (lista de parmetros...)

{
corpo da funo
}
nome_da_funo: identificador da funo no programa.
lista de parmetros: declaraes de variveis que sero usadas na
funo.

corpo da funo: instrues que sero executadas quando a


funo for chamada.

CONCEITOS BSICOS

Exemplos de funes

void imprimeMensagem() {
printf(Ola Mundo!);
}
float calculaMedia(float a, float b) {
float media = 0;
media = (a + b)/2;
return media;
}

CONCEITOS BSICOS


Funes


C exige que se coloque o prottipo da funo


antes de ela ser chamada.
Prottipo: consiste na repetio da linha de sua
definio seguida do caractere ;. No h
necessidade de indicar o nome dos parmetros,
s os tipos.
A transferncia de dados entre funes feita
com o uso de parmetros e do valor de retorno da
funo chamada.

CONCEITOS BSICOS

Chamada funo (tipo geral)

identificador(listaDeArgumentos);
ATENO: tipo_retornado definido!

ESTRUTURAS DE DADOS
 Chamada funo (exemplos)

imprimeMensagem();

float a = 10.5;
float b = 13.5;
float c;
c = calculaMedia(a,b);

printf("Media = %f", calculaMedia(10.5, 13.5));

ESTRUTURAS DE DADOS
 Passagem
Exemplo:

de parmetros por valor

int main(){
float a = 10.5;
float b = 3.5;
float m = calculaMedia(a,b);
...
}

Escopo: funo main

float calculaMedia(float c, float d){


float media = 0;
media = (c + d)/2;
return media;
}

10.5

E0

3.5

E4

7
Retorna mdia
calculada

Escopo: funo mdia

c=a
d=b

10.5

E250

3.5

E254

mdia 7

ESTRUTURAS DE DADOS


Exemplo: Clculo do fatorial


#include <stdio.h>

int main(void) {

int fat(int n){

int n = 5;

int f = 1, i;

int r;

for(i = n; n!=0; n-- )

r = fat(n);

f*=n;

printf("Fatorial de %d = %d \n", n, r);

return f;

system("pause");

return 0;
}

No final da funo fat, o parmetro n tem valor igual a zero. No entanto, a sada
do programa ser: Fatorial de 5 = 120. O valor da varivel n no mudou no
programa principal porque o valor de n passado atribudo ao parmetro da funo
chamada.

ESTRUTURAS DE DADOS


Passagem de parmetros por valor




Uma funo pode retornar um tipo de valor para a


funo que chama.
Muitas vezes, necessrio transferir mais do que
um valor para a funo que chama, e isso no
pode ser feito com o retorno explcito de valores.


Ex: funo que calcula a soma e o produto de dois


nmeros.

ESTRUTURAS DE DADOS


Ponteiros


Ponteiros so variveis que armazenam


valores de endereos de memria.
Declarao de varivel do tipo ponteiro :
tipo *nome;
tipo: tipo do valor armazenado no endereo de memria
nome: identificador do ponteiro

Ex:

int a;
int *p;

Varivel de nome a que pode armazenar valores


inteiros. Automaticamente, reserva-se um espao na
memria suficiente para armazenar valores inteiros.
Varivel de nome p que pode armazenar endereos
de memria em que existe um valor inteiro
armazenado.

ESTRUTURAS DE DADOS


Ponteiros


Operador unrio * (contedo de)


Acessa o contedo do endereo de
memria armazenado pela varivel
ponteiro.

Operador unrio & (endereo de)


Resulta no endereo da posio da
memria reservada para a varivel.

ESTRUTURAS DE DADOS


Ponteiros


Exemplos

int a; // varivel simples


int *p; // ponteiro para inteiro

Pilha de execuo

108
104

ESTRUTURAS DE DADOS


Ponteiros


Exemplos

int a; // varivel simples


int *p; // ponteiro para inteiro
a = 5;
p = &a;
*p = 6;

Pilha de execuo

Dizemos que p aponta para a, por isso


o nome ponteiro.
p
a

104
6
-5

108
104

ESTRUTURAS DE DADOS


Ponteiros


Exemplos

Outra representao:
Podemos desenhar setas,
sinalizando que uma varivel
do tipo ponteiro aponta para
uma determinada rea de
memria, em vez de criar
valores fictcios para os
endereos de memria.

Pilha de execuo

p
a

ESTRUTURAS DE DADOS


Ponteiros

int main(){
int a, b, *p;
a = 2;
Erro: Varivel p no inicializada!
*p = 3;
b = a + (*p);
printf(%d, b);
return 0;
}
S podemos preencher o contedo de um ponteiro se ele tiver
sido devidamente inicializado (apontar para um espao de
memria para o qual j se prev o armazenamento de
valores do tipo em questo).

ESTRUTURAS DE DADOS
#include <stdio.h>
int main()
{
int a;
// a um inteiro
int *aPtr; // aPtr um apontador p/ um inteiro
a = 7;
aPtr = &a;

// aPtr aponta para o endereo de a

printf("O endereo de a : %p \n" , &a );


printf("O endereo de a : %p \n" , aPtr );
printf("O endereo de aPtr : %p \n" , &aPtr);

printf("O valor de a : %d \n" , a) ;


printf("O valor de a : %d \n" , *aPtr) ;
system("pause");
return 0;

ESTRUTURAS DE DADOS


Passagem de parmetros por referncia




quando passado o endereo de uma varivel


como parmetro.

Se vai passar o endereo de uma varivel, deve existir uma


varivel do tipo ponteiro para receb-la.

Ex: 5) Funo para calcular a soma e o produto de


dois nmeros.
Toda vez que desejarmos alterar um valor de uma
varivel da funo que chama dentro da funo
chamada, devemos passar o endereo da varivel.

ESTRUTURAS DE DADOS


Passagem de parmetros por referncia




Exerccio: 6) Implemente uma funo para trocar


os valores entre duas variveis dadas.

Para que os valores das variveis da funo


principal sejam alterados dentro da funo
auxiliar que faz a troca, precisamos passar
para a funo os endereos das variveis.

A relao entre ponteiros e arrays


Em C++ arrays e ponteiros esto intimamente relacionados e podem
ser usados de maneira quase intercambivel.
Um nome de array pode ser encarado como um ponteiro constante.
Os ponteiros podem ser usados para fazer qualquer operao
envolvendo indexao de arrays.
Ex: int b[ 5 ];
int *bPtr;
bPtr = b; ou bPtr = &b[ 0 ]; // bPtr aponta para b[ 0 ]

Expresses com ponteiros e aritmtica de


ponteiros
Ponteiros so operandos vlidos em expresses
aritmticas
Porm nem todos os operadores usados nestas
expresses so vlidos com variveis do tipo ponteiro
Um conjunto limitado de operaes pode ser executado
com ponteiros
Um ponteiro pode ser incrementado (++)
Um ponteiro pode ser decrementado (--)
Um inteiro pode ser somando a um ponteiro (+ ou +=)
Um inteiro pode ser subtrado de um ponteiro (- ou - =)
Um ponteiro pode ser subtrado de outro

Expresses com ponteiros e aritmtica


de ponteiros

Varivel ponteiro vPtr podendo ser inicializada como vPtr = v; ou


vPtr = &v [0];
Na aritmtica convencional teramos : 3000 + 2 = 3002
Na aritmtica de ponteiros teremos vPtr = vPtr + 2;
//aqui o ponteiro incrementado pelo tamanho do objeto inteiro al
qual o ponteiro se refere.
O nmero de bytes depende do tipo de dado do objeto
O resultado de vPtr = vPtr + 2; // produziria 3008 (3000 + 2 * 4)

Expresses com ponteiros e aritmtica de


ponteiros
Se um ponteiro esta sendo incrementado ou decrementado por um,
podem ser usados os operadores de incremento (++) e
decremento (- -);
Ex: ++vPtr ou vPtr++ // incrementa o ponteiro para apontar para
// a prxima posio do array.
Ex: --vPtr ou vPtr-- // decrementa o ponteiro para apontar para o
// elemento precedente do array.

Variveis ponteiros que apontam para o mesmo array podem ser


subtradas umas das outras.
Ex: vPtr aponta para a posio 3000 e v2Ptr aponta para a posio
3008, o comando
X = v2Ptr vPtr; //atribuiria a x o nmero de elementos de array de
//vPtr at v2Ptr, neste caso 2.

#include <stdio.h>
void bubbleSort( int *array, const int size );
void swap( int* element1Ptr, int* element2Ptr);
int main()
{
const int arraySize = 10;
int a[] = {2,6,4,8,10,12,89,68,45,37};
int i;
bubbleSort( a, arraySize );

// sort the array

printf("\nData items in ascending order\n");


for ( i = 0; i < arraySize; i++ )
printf("%5d", a[i]);
system("pause");
}

return 0;

void bubbleSort( int *array, const int size )


{
int pass, j;
for(pass = 0; pass < size - 1; pass++)
for (j = 0; j < size - 1; j++ )
if ( array[ j ] > array[ j + 1 ] )
swap( &array[ j ], &array[ j + 1 ] );
}

void swap(int* element1Ptr,


int* element2Ptr)
{
int aux;
aux = *element1Ptr;
*element1Ptr = *element2Ptr;
*element2Ptr = aux;
}

ESTRUTURAS DE DADOS


Variveis globais


Uma varivel global declarada fora do corpo


das funes e visvel a todas as funes
subseqntes.
As variveis globais no so armazenadas na
pilha de execuo e existem enquanto o
programa estiver sendo executado.
O uso de variveis globais deve ser feito com
critrio, pois podemos criar um alto grau de
interdependncia entre as funes.

ESTRUTURAS DE DADOS


Variveis estticas
As variveis estticas so armazenadas na rea
de memria esttica.
 As variveis estticas continuam existindo
mesmo antes ou depois de a funo ser
executada. Porm, uma varivel esttica
declarada dentro de uma funo s visvel
dentro dessa funo.


Uma utilizao interessante quando se necessita


recuperar o valor de uma varivel atribuda na ltima
vez em que a funo foi executada.

ESTRUTURAS DE DADOS


Variveis estticas

Ex: Funo para imprimir nmeros reais. Ela


imprime um nmero por vez, separando-os por
espao em branco e coloca, no mximo, 5
nmeros por linha.


void imprime (float a)


{
static int n = 1;
printf( %f , a);
if((n%5) == 0)
printf(\n);
}

n++;

ESTRUTURAS DE DADOS


Variveis estticas

Variveis globais tambm podem ser declaradas


como estticas. Nesse caso, no podem ser
acessadas por funes definidas em outros
arquivos.


Funes tambm podem ser declaradas como


estticas, no podendo ser acessadas por funes
definidas em outros arquivos.


Exercicios

1) Implemente uma funo que retorne a soma dos n primeiros


nmeros naturais mpares. Essa
funo deve obedecer ao prottipo:
int soma_impares (int n);
Ex: Para n = 2 soma = 1 + 3 = 4.
Para n = 3 soma = 1 + 3 + 5 = 9, etc.
2) Implemente uma funo que retorne uma aproximao do valor
de pi de acordo com a frmula de Leibniz:

A funo deve obedecer ao seguinte prottipo, em que n indica o


nmero de termos que devem ser usados para avaliar o valor de
pi:
double pi(int n);

Exercicios
3) Escreva uma funo potencia (base, expoente) que,
quando chamada, retorna base^expoente.
Por exemplo, potencia (3, 4) = 3 * 3 * 3 * 3.
Assuma que expoente um inteiro maior ou igual a 1.
4) Escreva um programa que l 10 notas digitadas pelo
usurio, armazena estas notas em um arranjo de
tamanho 10. Imprime a soma, e a mdia das notas, a
maior e a menor nota. Depois seu programa deve
exibir as notas dos alunos em ordem crescente.

Exercicios
4 Para cada um dos seguintes itens, escreva um
nico comando para executar a tarefa indicada.
Assuma que as variveis de ponto flutuante number1
e number2, foram declaradas e que number1 foi
inicializado com 7,3.
Declare a varivel fPtr como um ponteiro para um
objeto do tipo double.
Atribua o endereo da varivel number1 a varivel
ponteiro fPtr
Imprima o valor do objeto apontado por fPtr
Atribua o valor do objeto apontado por fPtr a varivel number2
Imprima o valor de number2
Imprima o endereo de number1
Imprima o endereo armazenado em fPtr.
O valor impresso o mesmo que o endereo de number1 (sim/no)

Exercicios
5 - Escreva um programa completo em C, que
declara um registro Aluno com os seguintes
dados (Matricula, Nome, Curso).
Implemente o construtor da classe para inicializar os
dados.
Implemente um mtodo (funo) para entrada
de dados e um mtodo para impresso de dados.
No programa principal declare um vetor para
armazenar 10 alunos, implemente um menu com as
seguintes opes:
1 Cadastrar Aluno
2 Imprimir listagem de todos os alunos
3 Sair