You are on page 1of 90

TCC0216 Estrutura de Dados II

Reviso - Conceitos Bsicos


Prof. Jos Viterbo

Tpicos Principais
Variveis e Constantes Operadores e E press!es Entrada e "a#da $o%ada de De&is'o Constru(!es &o% )a(os Defini('o de *un(!es Pi+,a de E e&u('o *un(!es -e&ursivas Varives .+obais / Variveis Estti&as

18/11/12

Estrutura de Dados II

Variveis e Constantes
$ipos bsi&os na +in1ua1e% C2
Tipo char unsigned char short int (short) Ta an!o 1 b3te 1 b3te 2 b3tes 7 402.698 7 42.1:6.:80.9:8 42.1:6.:80.9:8 7 41708 417078 "enor va#or 4128 "aior va#or 5126 5288 502.696 598.808 52.1:6.:80.9:6 52.1:6.:80.9:6 5:.2;:.;96.2;8 51708 517078

unsigned short int 2 b3tes int (*) : b3tes long int (long) unsigned long int float double : b3tes : b3tes : b3tes 8 b3tes

<=> depende da %?uina@ sendo : b3tes para ar?uiteturas de 02 bits

18/11/12

Estrutura de Dados II

Variveis e Constantes
Va+or Constante2
A ar%aBenado na %e%Cria A possui u% tipo@ indi&ado pe+a sinta e da &onstante
123 12.45 1245e-2 12.45F /* constante /* constante /* constante /* constante inteira real do real do real do do tipo int */ tipo double */ tipo double */ tipo float */

18/11/12

Estrutura de Dados II

Variveis e Constantes
Varive+2
A espa(o de %e%Cria para ar%aBenar u% dado A n'o u%a varive+ no sentido %ate%ti&o A possui u% tipo e u% no%e
no%e2 identifi&a o espa(o de %e%Cria tipo2 deter%ina a natureBa do dado

18/11/12

Estrutura de Dados II

Variveis e Constantes
De&+ara('o de varive+2
A variveis deve% ser e p+i&ita%ente de&+aradas A variveis pode% ser de&+aradas e% &onDunto
int a; int b; float c; int d! e; /* declara uma vari vel do tipo int */ /* declara uma vari vel do tipo int */ /* declara uma vari vel do tipo float */ /* declara duas vari veis do tipo int */

18/11/12

Estrutura de Dados II

Variveis e Constantes
De&+ara('o de varive+2
A variveis sC ar%aBena% va+ores do %es%o tipo &o% ?ue fora% de&+aradas
int a; a " 4.3; /* declara uma vari vel do tipo int */ /* a arma#enar o valor 4 */

18/11/12

Estrutura de Dados II

Variveis e Constantes
Varive+ &o% va+or indefinido2
A u%a varive+ pode re&eber u% va+or ?uando definida <ini&ia+iBada>@ ou atravs de u% operador de atribui('o
int a " 5! b " 1$; /* de&+ara e ini&ia+iBa duas variveis do tipo int */

float c " 5.3; /* de&+ara e ini&ia+iBa u%a varive+ do tipo f+oat */

18/11/12

Estrutura de Dados II

Variveis e Constantes
Varive+ &o% va+or indefinido2
A u%a varive+ deve ter u% va+or definido ?uando uti+iBada
int a! b! c; /* de&+ara e ini&ia+iBa duas variveis do tipo int */ a " 2; c " a % b; /* E--O2 b &ont% E+i oF */

18/11/12

Estrutura de Dados II

$peradores e E%press&es
Operadores2
A arit%ti&os2 + , - , * , / , % A atribui('o2 = , += , -= , *= , /= , %= A in&re%ento e de&re%ento2 ++ , -A re+a&ionais e +C1i&os2 ' ( ') ( )) ( *) ( * ( +) A outros

18/11/12

Estrutura de Dados II

17

$peradores e E%press&es
Operadores arit%ti&os < + , - , * , / , % >2
A opera(!es s'o feitas na pre&is'o dos operandos
o operando &o% tipo de %enor e pressividade &onvertido para o tipo do operando &o% tipo de %aior e pressividade divis'o entre inteiros trun&a a parte fra&ionria
int a double b! c; a " 3.5; /* a recebe o valor 3 */ b " a / 2.$; /* b recebe o valor 1.5 */ c " 1/3 % b; /* 1/3 retorna $ pois a opera&'o ser /* c recebe o valor de b */

sobre inteiros */

18/11/12

Estrutura de Dados II

11

$peradores e E%press&es
Operadores arit%ti&os <&ont.>2
A o operador %Cdu+o@ EGF@ ap+i&a4se a inteiros A pre&edHn&ia dos operadores2 = @ / @ 4 @ 5
( ) 2 /* o resultado ser $! se ( for par; caso contr rio! ser 1 */ * e+uivalente a ,a % ,,b * c- / d--

a % b * c / d

18/11/12

Estrutura de Dados II

12

$peradores e E%press&es
Operadores de atribui('o 2 ( = , += , -= , *= , /= , %= )
A C trata u%a atribui('o &o%o u%a e press'o
a orde% da direita para a es?uerda

A C ofere&e u%a nota('o &o%pa&ta para atribui(!es e% ?ue a %es%a varive+ apare&e dos dois +ados

var opI e pr e?uiva+ente a var I var op ,e pri %" 2; ( *" . % 1; * e+uivalente a * e+uivalente a i " i % 2; ( " ( * ,. %1-;

18/11/12

Estrutura de Dados II

10

$peradores e E%press&es
Operadores de in&re%ento e de&re%ento ( ++ , -- ):
A in&re%enta ou de&re%enta de u%a unidade o va+or de u%a varive+
os operadores n'o se ap+i&a% a e press!es o in&re%ento pode ser antes ou depois da varive+ ser uti+iBada n55 55n n ( ( a b " " " " " in&re%enta n de u%a unidade@ depois de ser usado in&re%enta n de u%a unidade@ antes de ser usado 5; n%%; %%n; 3; a%% * 2;

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

18/11/12

Estrutura de Dados II

1:

$peradores e E%press&es
Operadores re+a&ionais ,' ( ') ( )) ( *) ( * ( +)-2
A o resu+tado ser 7 ou 1 <n'o , va+ores boo+eanos e% C>
int a! b; int c " 23; int d " c % 4; c 0 2$ d 1 c retorna $ retorna 1

18/11/12

Estrutura de Dados II

18

$peradores e E%press&es
Operadores +C1i&os < && , || , ! >
A a ava+ia('o da es?uerda para a direita A a ava+ia('o pra ?uando o resu+tado pode ser &on,e&ido
int a, b; int c = !; int d = c + "; a = (c # $) || (d % c); /* retorna & */ /* as duas sub-e'(ress)es s*o a+aliadas */ b = (c # $) && (d % c); /* retorna $ */ /* a(enas a (ri,eira sub-e'(ress*o - a+aliada */

18/11/12

Estrutura de Dados II

19

$peradores e E%press&es
sizeof:
A retorna o nJ%ero de b3tes o&upados por u% tipo

int a " si#eof,float-

/* arma#ena 4 em a */

18/11/12

Estrutura de Dados II

16

$peradores e E%press&es
&onvers'o de tipo2
A &onvers'o de tipo auto%ti&a na ava+ia('o de u%a e press'o A &onvers'o de tipo pode ser re?uisita e p+i&ita%ente

float f; float f " 3; int 2! 3; 2 " ,int- 3.5; 3 " ,int- 3.5 ) 2

/= va+or 0 &onvertido auto%ati&a%ente para Ef+oatF =/ /= ou seDa@ passa a va+er 0.7*@ antes de ser atribu#do a f =/ /= 0.8 &onvertido <e arredondado> para EintF =/ /= antes de ser atribu#do K varive+ 1 =/ /= e antes de ap+i&ar o operador %Cdu+o EGF =/

18/11/12

Estrutura de Dados II

18

Entrada e .a/da
*un('o EprintfF2
A possibi+ita a sa#da de va+ores se1undo u% deter%inado for%ato
printf ,formato! lista de constantes/vari veis/e(press6es...-; printf ,4)d )24! 33! 5.3-; tem como resultado a impress'o da lin3a5 33 5.3 printf ,47nteiro " )d com sa9da5 7nteiro " 33 8eal " )24! 33! 5.3-;

8eal " 5.3

18/11/12

Estrutura de Dados II

1;

Entrada e .a/da
Espe&ifi&a('o de for%ato2 )c )d )u )f )e )2 )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/11/12

Estrutura de Dados II

27

Entrada e .a/da
Espe&ifi&a('o de ta%an,o de &a%po2

18/11/12

Estrutura de Dados II

21

Entrada e .a/da
I%press'o de te to2
printf,4:urso de ;struturas de <ados=n4-; e(ibe na tela a mensa2em5 :urso de ;struturas de <ados

18/11/12

Estrutura de Dados II

22

Entrada e .a/da
*un('o Es&anfF2
A &aptura va+ores forne&idos via te&+ado
scanf ,formato! lista de endere&os das vari veis...-; int n; scanf ,4)d4! >n-; valor inteiro di2itado pelo usu rio * arma#enado na vari vel n

18/11/12

Estrutura de Dados II

20

Entrada e .a/da
Espe&ifi&a('o de for%ato2
%c %d %u %f,%e,%g especifica um char especifica um int especifica um unsigned int especificam um float especificam um double

%lf, %le, %lg %s

especifica uma cadeia de caracteres

18/11/12

Estrutura de Dados II

2:

Entrada e .a/da
*un('o Es&anfF <&ont.>2
A &ara&teres diferentes dos espe&ifi&adores no for%ato serve% para &er&ar a entrada A espa(o e% bran&o dentro do for%ato faB &o% ?ue seDa% Lpu+adosL eventuais bran&os da entrada A Gd@ Gf@ Ge e G1 auto%ati&a%ente pu+a% os bran&os ?ue pre&edere% os va+ores nu%ri&os a sere% &apturados
scanf ,4)d5)d4! >3! >m-; valores ,inteiros- fornecidos devem ser separados pelo caractere dois pontos?,5-

18/11/12

Estrutura de Dados II

28

To ada de Deciso
Co%ando EifF2
A &o%ando bsi&o para &odifi&ar to%ada de de&is'o
se e pr for verdadeira < 7>@ e e&uta o b+o&o de &o%andos 1 se e pr for fa+sa <I 7>@ e e&uta o b+o&o de &o%andos 2
if ( expr ) . bloco de comandos 1 / else . bloco de comandos 2 / ou if ( expr ) . bloco de comandos /

18/11/12

Estrutura de Dados II

29

E%e p#o
/* nota */ 0include #stdio1h% int ,ain (+oid) . float nota ; (rintf(23igite sua nota: 2); scanf(2%f2, &nota); if (nota %= 4 ). (rintf(2 5oa nota, (arabens! 6n2); / else . (rintf(2 7oce (recisa ,elhorar1 6n2); / return $; /

18/11/12

Estrutura de Dados II

26

E%e p#o
/* nota */ 0include #stdio1h% int ,ain (+oid) . float nota ; (rintf(23igite sua nota: 2); scanf(2%f2, &nota); if (nota %= 4 ) (rintf(2 5oa nota, (arabens! 6n2); else (rintf(2 7oce (recisa ,elhorar1 6n2); return $; /

18/11/12

Estrutura de Dados II

28

B#oco de co andos
@ comando1; comando2; ... A ou comando;

18/11/12

Estrutura de Dados II

2;

To ada de Deciso
E e%p+o2
A fun('o para ?ua+ifi&ar a te%peratura2

se a te%peratura for %enor do ?ue 27oC@ ent'o est frio se a te%peratura estiver entre 27oC e 07oC@ ent'o est a1radve+ se a te%peratura for %aior do ?ue 07oC@ ent'o est ?uente

18/11/12

Estrutura de Dados II

07

To ada de Deciso
/* te,(eratura (+ersao & - incorreta) */ 0include #stdio1h% int ,ain (+oid) . int te,(; (rintf(23igite a te,(eratura: 2); scanf(2%d2, &te,(); if (te,( # !$) if (te,( % $) (rintf(2 8e,(eratura agrad9+el 6n2); else (rintf(2 8e,(eratura :uente 6n2); return $; /

E% C@ u% else est asso&iado ao J+ti%o if ?ue . 18/11/12 Estrutura de Dados II n'o tiver seu prCprio else 01

To ada de Deciso
/* te,(eratura (+ersao & - incorreta) */ 0include #stdio1h% int ,ain (+oid) . int te,(; (rintf(23igite a te,(eratura: 2); scanf(2%d2, &te,(); if (te,( # !$) if (te,( % $) (rintf(2 8e,(eratura agrad9+el 6n2); else (rintf(2 8e,(eratura :uente 6n2); return $; /

18/11/12

Estrutura de Dados II

02

To ada de Deciso
/* te,(eratura (+ersao 0include #stdio1h% ) */

int ,ain (+oid) . int te,(; (rintf ( 23igite a te,(eratura: 2 ); scanf ( 2%d2, &te,( ); if ( te,( # !$ ) . if ( te,( % $ ) (rintf ( 2 8e,(eratura agrad9+el 6n2 ); / else (rintf ( 2 8e,(eratura :uente 6n2 ); return $; /

18/11/12

Estrutura de Dados II

00

/* te,(eratura (+ersao !) */ 0include #stdio1h% int ,ain (+oid) . int te,(; (rintf(23igite a te,(eratura: 2); scanf(2%d2, &te,(); if (te,( # &$) (rintf(28e,(eratura ,uito fria 6n2); else if (te,( # $) (rintf(2 8e,(eratura fria 6n2); else if (te,( # !$) (rintf(28e,(eratura agrad9+el 6n2); else (rintf(28e,(eratura :uente 6n2); return $; /

18/11/12

Estrutura de Dados II

0:

/* te,(eratura (+ersao !) */ 0include #stdio1h% int ,ain (+oid) . int te,(; (rintf(23igite a te,(eratura: 2); scanf(2%d2, &te,(); if (te,( # &$) (rintf(28e,(eratura ,uito fria 6n2); else if (te,( # $) (rintf(2 8e,(eratura fria 6n2); else if (te,( # !$) (rintf(28e,(eratura agrad9+el 6n2); else (rintf(28e,(eratura :uente 6n2); return $; /

18/11/12

Estrutura de Dados II

08

/* te,(eratura (+ersao !) */ 0include #stdio1h% int ,ain (+oid) . int te,(; (rintf(23igite a te,(eratura: 2); scanf(2%d2, &te,(); if (te,( # &$) (rintf(28e,(eratura ,uito fria 6n2); else if (te,( # $) (rintf(2 8e,(eratura fria 6n2); else if (te,( # !$) (rintf(28e,(eratura agrad9+el 6n2); else (rintf(28e,(eratura :uente 6n2); return $; /

18/11/12

Estrutura de Dados II

09

/* te,(eratura (+ersao !) */ 0include #stdio1h% int ,ain (+oid) . int te,(; (rintf(23igite a te,(eratura: 2); scanf(2%d2, &te,(); if (te,( # &$) (rintf(28e,(eratura ,uito fria 6n2); else if (te,( # $) (rintf(2 8e,(eratura fria 6n2); else if (te,( # !$) (rintf(28e,(eratura agrad9+el 6n2); else (rintf(28e,(eratura :uente 6n2); return $; /

18/11/12

Estrutura de Dados II

06

To ada de Deciso
Estrutura de b+o&o2
A de&+ara('o de variveis2
sC pode% o&orrer no in#&io do &orpo da fun('o ou de u% b+o&o <esta restri('o n'o e iste no C;;>

A es&opo de u%a varive+2


u%a varive+ de&+arada dentro de u% b+o&o v+ida no b+o&o apCs o tr%ino do b+o&o@ a varive+ dei a de e istir
if ( n % $ ) . int i; 111

111 / /* a +ari9+el i n*o e'iste neste (onto do (rogra,a */

18/11/12

Estrutura de Dados II

08

To ada de Deciso
Operador &ondi&iona+2
A for%ato 1era+2
se a &ondi('o for verdadeira@ a e press'o1 ava+iadaM &aso &ontrrio@ a e press'o2 ava+iada
condi<*o ; e'(ress*o& : e'(ress*o ;

A e e%p+o2
&o%ando
,a'i,o = a % b ; a : b ;

&o%ando EifF e?uiva+ente


if ( a % b ) ,a'i,o = a; else ,a'i,o = b;

18/11/12

Estrutura de Dados II

0;

Constru0&es co
E e%p+o2

#a0os

A fatoria+ de u% nJ%ero inteiro n'o ne1ativo2

n ! = n ( n1 )( n 2 ) ...3 21 onde : 0 != 1

18/11/12

Estrutura de Dados II

:7

Constru0&es co
E e%p+o2

#a0os

A defini('o re&ursiva da fun('o fatorial: fatorial(0) = 1 fatorial(n) = n x fatorial(n-1) A &+&u+o n'o re&ursivo de fatorial(n)
B co,ece co,:
k = 1 fatorial = 1

B fa<a en:uanto k n
fatorial = fatorial * k incremente k

18/11/12

Estrutura de Dados II

:1

Constru0&es co
Co%ando EN,i+eF2

#a0os

A en?uanto expr for verdadeira@ o b+o&o de &o%andos e e&utado A ?uando expr for fa+sa@ o &o%ando ter%ina
=hile ( expr ) . bloco de comandos /

18/11/12

Estrutura de Dados II

:2

/* >atorial */ 0include #stdio1h% int ,ain (+oid) . int i; int n; long int f = &; (rintf(23igite u, nu,ero inteiro nao negati+o:2); scanf(2%d2, &n); /* calcula fatorial */ i = &; =hile (i #= n) . f = f * i; /* e:ui+alente a ?f *= i@ */ i = i + &; /* e:ui+alente a ?i++@ */ / (rintf(2 >atorial = %d 6n2, f); return $; /

18/11/12

Estrutura de Dados II

:0

Constru0&es co
Co%ando EforF2
A for%a &o%pa&ta para e pri%ir +a(os

#a0os

for (expresso_inicial; expresso_booleana; expresso_de_incremento) . bloco de comandos /

A e?uiva+ente a2
expresso_inicial; =hile ( expresso_booleana ) . bloco de comandos ... expresso_de_incremento /

18/11/12

Estrutura de Dados II

::

/* >atorial (+ersao 0include #stdio1h% int ,ain (+oid) . int i; int n; int f = &;

) */

(rintf(23igite u, nu,ero inteiro nao negati+o:2); scanf(2%d2, &n); /* calcula fatorial */ for (i = &; i #= n; i=i+&) . f = f * i; / (rintf(2 >atorial = %d 6n2, f); return $; /

18/11/12

Estrutura de Dados II

:8

12 3atoria# ,versao 2- 21 4inc#ude 'stdio5!* int ain ,void6 int i7 int n7 int 8 ) 17 print8,9Di:ite u nu ero inteiro nao ne:ativo;9-7 scan8,9<d9( =n-7 12 ca#cu#a 8atoria# 21 8or ,i ) 17 i ') n7 i>1- 612 o ?ue acontece co 8 ) 8 2 i7 A print8,9 3atoria# ) <d Bn9( 8-7 return 07 A

este pro:ra a@

21

18/11/12

Estrutura de Dados II

:9

Constru0&es co
Co%ando Edo4N,i+eF2

#a0os

A teste de en&erra%ento ava+iado no fina+


do 6 bloco de comandos A C!i#e ,expr-7

18/11/12

Estrutura de Dados II

:6

/* >atorial (+ersao !) */ 0include #stdio1h% int ,ain (+oid) . int i; int n; int f = &; /* re:uisita +alor at- u, nA,ero n*o negati+o ser infor,ado */ do . (rintf(23igite u, +alor inteiro nao negati+o:2); scanf (2%d2, &n); / =hile (n#$); /* calcula fatorial */ for (i = &; i #= n; i++) f *= i; (rintf(2 >atorial = %d6n2, f); return $; /

18/11/12

Estrutura de Dados II

:8

/* >atorial (+ersao ") */ 0include #stdio1h% int ,ain (+oid) . int i; int n; int f = &; /* B :ue faC este (rogra,a; */ do . (rintf(23igite u, +alor inteiro nao negati+o:2); scanf (2%d2, &n); /* calcula fatorial */ for (i = &; i #= n; i++) f *= i; (rintf(2 >atorial = %d6n2, f); / =hile (n%=$); return $; /

18/11/12

Estrutura de Dados II

:;

Constru0&es co

#a0os

Interrup('o de +a(os 4 Co%ando EbreaOF2


A ter%ina a e e&u('o do &o%ando de +a(o
Cinclude 0stdio.31 int main ,void@ int i; for ,i " $; i 0 1$; i%%- @ if ,i "" 5breaD; printf,4)d 4! i-; A printf,4fim=n4-; return $; A E sa9da deste pro2rama! se e(ecutado! ser 5 $ 1 2 3 4 fim

18/11/12

Estrutura de Dados II

87

Constru0&es co

#a0os

Interrup('o de +a(os 4 Co%ando E&ontinueF2


A ter%ina a itera('o &orrente e passa para a prC i%a
0include #stdio1h% int ,ain (+oid) . int i; for (i = $; i # &$; i++ ) . if (i == D) continue; (rintf(2%d 2, i); / (rintf(2fi,6n2); return $; /

:era a sa/da; 0 1 2 D E / F 6 G H I 8i 18/11/12 Estrutura de Dados II 81

Constru0&es co

#a0os

Interrup('o de +a(os 4 Co%ando E&ontinueF2


A deve4se ter &uidado para &riar u%a Eitera('o eternoF
/* EFGBHHI8B */ 0include #stdio1h% int ,ain (+oid) . int i = $; =hile (i # &$) . if (i == D) continue; (rintf(2%d 2, i); i++; / (rintf(2fi,6n2); return $; /

cria Jitera0o eternaK pois i no ser 18/11/12

ais incre entado ?uando c!e:ar a F 82

Estrutura de Dados II

Constru0&es co
Co%ando EsNit&,F2
A se+e&iona u%a entre vrios &asos <EopOF deve ser u% inteiro ou &ara&tere>

#a0os

s=itch ( e'(r ) . case o(&: bloco de comandos 1; breaJ; case o( : bloco de comandos 2; breaJ; 111 default: bloco de comandos default; breaJ; /

18/11/12

Estrutura de Dados II

80

/* calculadora de :uatro o(era<)es */ 0include #stdio1h% int ,ain (+oid) . float nu,&, nu, ; char o(; (rintf(23igite: nu,ero o( nu,ero6n2); scanf (2%f %c %f2, &nu,&, &o(, &nu, ); s=itch (o() . case K+K: (rintf(2 = %f6n2, nu,&+nu, ); breaJ; case K-K: (rintf(2 = %f6n2, nu,&-nu, ); breaJ; case K*K: (rintf(2 = %f6n2, nu,&*nu, ); breaJ; case K/K: (rintf(2 = %f6n2, nu,&/nu, ); breaJ; default: (rintf(2B(erador in+alido!6n2); breaJ; / return $; /

18/11/12

Estrutura de Dados II

8:

De8ini0o de 3un0&es
Co%ando para defini('o de fun('o2
tipoFretornado no,eLdaLfun<*o @ corpo da fun&'o A , lista de parGmetros... -

18/11/12

Estrutura de Dados II

88

/* pro2rama +ue lH um nImero e imprime seu fatorial */ Cinclude 0stdio.31 EprotCtipoF da fun('o2 int fat ,int n-; deve ser in&+u#do antes int main ,voidda fun('o ser &,a%ada @ int n! r; printf,<i2ite um nImero nao ne2ativo5-; &,a%ada da fun('o scanf,4)d4! >n-; E%ainF retorna u% inteiro2 fat,n-; 7 2 e e&u('o OP return $; 7 2 e e&u('o OP A de&+ara('o da fun('o2 /* fun&'o para calcular o valor do fatorial */ indi&a o tipo da sa#da e int fat ,int no tipo e no%e das entradas @ int i; int f " 1; for ,i " 1; i 0" n; i%%f *" i; printf,Fatorial " )f! f-; A

18/11/12

Estrutura de Dados II

89

void fat <int n>M /= obs2 e iste M no protCtipo =/

void fat<int n> Q R

/= obs2 n'o e iste M na de&+ara('o =/

18/11/12

Estrutura de Dados II

86

/* pro2rama +ue lH um nImero e imprime seu fatorial ,vers'o 2- */ Cinclude 0stdio.31 EprotCtipoF da fun('o2 int fat ,int n-; deve ser in&+u#do antes int main ,voidda fun('o ser &,a%ada @ int n! r; printf,<i2ite um nImero nao ne2ativo5-; &,a%ada da fun('o scanf,4)d4! >n-; r " fat,n-; E%ainF retorna u% inteiro2 printf,4Fatorial " )d=n4! r-; 7 2 e e&u('o OP return $; 7 2 e e&u('o OP A /* fun&'o para calcular o valor do fatorial */ de&+ara('o da fun('o2 int fat ,int nindi&a o tipo da sa#da e o tipo e no%e das entradas @ int i; int f " 1; for ,i " 1; i 0" n; i%%f *" i; return f; retorna o va+or da fun('o A

18/11/12

Estrutura de Dados II

88

Pi#!a de E%ecu0o
Co%uni&a('o entre fun(!es2
A fun(!es s'o independentes entre si A transferHn&ia de dados entre fun(!es2
atravs dos parS%etros e do va+or de retorno da fun('o &,a%ada passa1e% de parS%etros feita por valor

A variveis +o&ais a u%a fun('o2


definidas dentro do &orpo da fun('o <in&+uindo os parS%etros> n'o e iste% fora da fun('o s'o &riadas &ada veB ?ue a fun('o e e&utada dei a% de e istir ?uando a e e&u('o da fun('o ter%inar 18/11/12 Estrutura de Dados II 8;

Pi#!a de E%ecu0o
Co%uni&a('o entre fun(!es <&ont.>2
Pergunta: Como implementar a comunicao entre funes? esposta: !tra"#s $e uma pil%a

& b a

T T :0.8 6

112 4 varive+ & no endere(o 112 &o% va+or i1ua+ a T T 178 4 varive+ b no endere(o 178 &o% va+or i1ua+ a :0.8 17: 4 varive+ a no endere(o 17: &o% va+or i1ua+ a 6

18/11/12

Estrutura de Dados II

97

E%e p#o; 3atoria# iterativo


/* pro2rama +ue lH um numero e imprime seu fatorial ,vers'o 3- */ Cinclude 0stdio.31 int fat ,int n-; int main ,voidde&+ara('o das variveis n e @ int n " 5; r@ +o&ais K fun('o main int r; r " fat , n -; printf,4Fatorial de )d " )d =n4! n! r-; return $; A int fat ,int nde&+ara('o das variveis n e @ int f " 1; f@ +o&ais K fun('o fat J3ile ,n K" $- @ f *" n; a+tera('o no va+or de n e% fat n--; n'o a+tera o va+or de n e% A main return f; A

si%u+a('o da &,a%ada fat,5-5 a varive+ n possui va+or 7 ao fina+ da e e&u('o de fat@ %as o va+or 18/11/12 Estrutura de Dados II de n no pro1ra%a prin&ipa+ ainda ser 8

91

E%e p#o; In/cio do pro:ra a


/* pro2rama +ue lH um numero e imprime seu fatorial ,vers'o 3- */ Cinclude 0stdio.31 int fat ,int n-; int main ,void@ int n " 5; int r; r " fat , n -; printf,4Fatorial de )d " )d =n4! n! r-; return $; A int fat ,int n@ int f " 1; J3ile ,n K" $- @ f *" n; n--; A return f; A

18/11/12

Estrutura de Dados II

92

E%e p#o; Dec#ara0o de n e r na ,ain()


/* pro2rama +ue lH um numero e imprime seu fatorial ,vers'o 3- */ Cinclude 0stdio.31 int fat ,int n-; int main ,void@ int n " 5; int r; r " fat , n -; printf,4Fatorial de )d " )d =n4! n! r-; return $; A int fat ,int n@ int f " 1; J3ile ,n K" $- @ f *" n; n--; A return f; A

18/11/12

Estrutura de Dados II

90

E%e p#o; Dec#ara0o de

n na fat(int n)

/* pro2rama +ue lH um numero e imprime seu fatorial ,vers'o 3- */ Cinclude 0stdio.31 int fat ,int n-; int main ,void@ int n " 5; int r; r " fat , n -; printf,4Fatorial de )d " )d =n4! n! r-; return $; A int fat ,int n@ int f " 1; J3ile ,n K" $- @ f *" n; n--; A return f; A

18/11/12

Estrutura de Dados II

9:

E%e p#o; Dec#ara0o de n e f na fat(int n)


/* pro2rama +ue lH um numero e imprime seu fatorial ,vers'o 3- */ Cinclude 0stdio.31 int fat ,int n-; int main ,void@ int n " 5; int r; r " fat , n -; printf,4Fatorial de )d " )d =n4! n! r-; return $; A int fat ,int n@ int f " 1; J3ile ,n K" $- @ f *" n; n--; A return f; A

18/11/12

Estrutura de Dados II

98

E%e p#o; no 8ina# do #a0o


/* pro2rama +ue lH um numero e imprime seu fatorial ,vers'o 3- */ Cinclude 0stdio.31 int fat ,int n-; int main ,void@ int n " 5; int r; r " fat , n -; printf,4Fatorial de )d " )d =n4! n! r-; return $; A int fat ,int n@ int f " 1; J3ile ,n K" $- @ f *" n; n--; A return f; A

18/11/12

Estrutura de Dados II

99

E e%p+o2 no retorno
/* pro2rama +ue lH um numero e imprime seu fatorial ,vers'o 3- */ Cinclude 0stdio.31 int fat ,int n-; int main ,void@ int n " 5; int r; r " fat , n -; printf,4Fatorial de )d " )d =n4! n! r-; return $; A int fat ,int n@ int f " 1; J3ile ,n K" $- @ f *" n; n--; A return f; A

18/11/12

Estrutura de Dados II

96

3un0&es Recursivas
$ipos de re&urs'o2
A direta2
u%a fun('o U &,a%a a e+a prCpria

A indireta2
u%a fun('o U &,a%a u%a fun('o V ?ue@ por sua veB@ &,a%a U

Co%porta%ento2
A ?uando u%a fun('o &,a%ada re&ursiva%ente@ &ria4se u% a%biente +o&a+ para &ada &,a%ada A as variveis +o&ais de &,a%adas re&ursivas s'o independentes entre si@ &o%o se estivsse%os &,a%ando fun(!es diferentes
18/11/12 Estrutura de Dados II 98

3un0&es Recursivas
E e%p+o2 defini('o re&ursiva de fatoria+

1, se n =0 n != n ( n 1 ) !, se n > 0
/* Fun&'o recursiva para c lculo do fatorial */ int fat ,int n@ if ,n""$return 1; else return n*fat,n-1-; A

18/11/12

Estrutura de Dados II

9;

3un0&es Recursivas
Cinclude 0stdio.31 int fat ,int n-; int main ,void@ int n " 5; int r; r " fat , n -; printf,4Fatorial de )d " )d =n4! n! r-; return $; A /* Fun&'o recursiva para c lculo do fatorial */ int fat ,int n@ int f; if ,n""$f"1; else f" n*fat,n-1-; return f; Estrutura de Dados II A 18/11/12

f fat,5- n r main n 67

4 8 4 8

3un0&es Recursivas
Cinclude 0stdio.31 int fat ,int n-; int main ,void@ int n " 5; int r; r " fat , n -; printf,4Fatorial de )d " )d =n4! n! r-; return $; A /* Fun&'o recursiva para c lculo do fatorial */ int fat ,int n@ int f; if ,n""$f"1; else f" n*fat,n-1-; return f; Estrutura de Dados II A 18/11/12 f fat,4- n f fat,5- n r main n

4 : 4 8 4
61 8

3un0&es Recursivas
Cinclude 0stdio.31 int fat ,int n-; int main ,void@ int n " 5; int r; r " fat , n -; printf,4Fatorial de )d " )d =n4! n! r-; return $; A /* Fun&'o recursiva para c lculo do fatorial */ int fat ,int n@ int f; if ,n""$f"1; else f" n*fat,n-1-; return f; Estrutura de Dados II A 18/11/12

f fat,$- n f fat,1- n f fat,2- n f fat,3- n f fat,4- n f fat,5- n r main n 62

1 7 4 1 4 2 4 0 4 : 4 8 4 8

3un0&es Recursivas
Cinclude 0stdio.31 int fat ,int n-; int main ,void@ int n " 5; int r; r " fat , n -; printf,4Fatorial de )d " )d =n4! n! r-; return $; A /* Fun&'o recursiva para c lculo do fatorial */ int fat ,int n@ int f; if ,n""$f"1; else f" n*fat,n-1-; return f; Estrutura de Dados II A 18/11/12 f fat,1- n f fat,2- n f fat,3- n f fat,4- n f fat,5- n r main n 60

1 1 4 2 4 0 4 : 4 8 4 8

3un0&es Recursivas
Cinclude 0stdio.31 int fat ,int n-; int main ,void@ int n " 5; int r; r " fat , n -; printf,4Fatorial de )d " )d =n4! n! r-; return $; A /* Fun&'o recursiva para c lculo do fatorial */ int fat ,int n@ int f; if ,n""$f"1; else f" n*fat,n-1-; return f; Estrutura de Dados II A 18/11/12

f fat,2- n f fat,3- n f fat,4- n f fat,5- n r main n 6:

2 2 4 0 4 : 4 8 4 8

3un0&es Recursivas
Cinclude 0stdio.31 int fat ,int n-; int main ,void@ int n " 5; int r; r " fat , n -; printf,4Fatorial de )d " )d =n4! n! r-; return $; A /* Fun&'o recursiva para c lculo do fatorial */ int fat ,int n@ int f; if ,n""$f"1; else f" n*fat,n-1-; return f; Estrutura de Dados II A 18/11/12

f fat,3- n f fat,4- n f fat,5- n r main n

9 0 4 : 4 8 4
68 8

3un0&es Recursivas
Cinclude 0stdio.31 int fat ,int n-; int main ,void@ int n " 5; int r; r " fat , n -; printf,4Fatorial de )d " )d =n4! n! r-; return $; A /* Fun&'o recursiva para c lculo do fatorial */ int fat ,int n@ int f; if ,n""$f"1; else f" n*fat,n-1-; return f; Estrutura de Dados II A 18/11/12 f fat,4- n f fat,5- n r main n

2: : 4 8 4
69 8

3un0&es Recursivas
Cinclude 0stdio.31 int fat ,int n-; int main ,void@ int n " 5; int r; r " fat , n -; printf,4Fatorial de )d " )d =n4! n! r-; return $; A /* Fun&'o recursiva para c lculo do fatorial */ int fat ,int n@ int f; if ,n""$f"1; else f" n*fat,n-1-; return f; Estrutura de Dados II A 18/11/12

f fat,5- n r main n 66

127 8 4 8

3un0&es Recursivas
Cinclude 0stdio.31 int fat ,int n-; int main ,void@ int n " 5; int r; r " fat , n -; printf,4Fatorial de )d " )d =n4! n! r-; return $; A /* Fun&'o recursiva para c lculo do fatorial */ int fat ,int n@ int f; if ,n""$f"1; else f" n*fat,n-1-; return f; Estrutura de Dados II A 18/11/12

r main n 68

127 8

Variveis L#oMais
Varive+ 1+oba+2
A de&+arada fora do &orpo das fun(!es2
vis#ve+ por todas as fun(!es subse?Wentes

A n'o ar%aBenada na pi+,a de e e&u('o2


n'o dei a de e istir ?uando a e e&u('o de u%a fun('o ter%ina e iste en?uanto o pro1ra%a estiver sendo e e&utado

A uti+iBa('o de variveis 1+obais2


deve ser feito &o% &ritrio pode4se &riar u% a+to 1rau de interdependHn&ia entre as fun(!es difi&u+ta o entendi%ento e o reuso do &Cdi1o 18/11/12 Estrutura de Dados II 6;

Variveis L#oMais
Cinclude 0stdio.31 int s! p; /* vari veis 2lobais */

void somaprod ,int a! int b@ s " a % b; p " a * b; A int main ,void@ int (! .; scanf,4)d )d4! >(! >.-; somaprod,(!.-; printf,4Loma " )d produto " )d=n4! s! p-; return $; A

18/11/12

Estrutura de Dados II

87

Variveis Estticas
Varive+ estti&a2
A de&+arada no &orpo de u%a fun('o2
vis#ve+ apenas dentro da fun('o e% ?ue foi de&+arada

A n'o ar%aBenada na pi+,a de e e&u('o2


ar%aBenada e% u%a rea de %e%Cria estti&a &ontinua e istindo antes ou depois de a fun('o ser e e&utada

A uti+iBa('o de variveis estti&as2


?uando for ne&essrio re&uperar o va+or de u%a varive+ atribu#da na J+ti%a veB ?ue a fun('o foi e e&utada

18/11/12

Estrutura de Dados II

81

Variveis Estticas
E e%p+o2
void imprime , float a @ static int n " 1; printf,4 )f 4! a-; if ,,n ) 5- "" $- printf,4 =n 4-; n%%; A Afun('o para i%pri%ir nJ%eros reais2
i%pri%e u% nJ%ero por veB@ separando4os por espa(os e% bran&o e &o+o&ando@ no % i%o@ &in&o nJ%eros por +in,a

18/11/12

Estrutura de Dados II

82

Variveis Estticas N L#oMais


variveis estti&as e variveis 1+obais2
A s'o ini&ia+iBadas &o% Bero@ se n'o fore% e p+i&ita%ente ini&ia+iBadas

variveis 1+obais estti&as2


A s'o vis#veis para todas as fun(!es subse?Wentes A n'o pode% ser a&essadas por fun(!es definidas e% outros ar?uivos

fun(!es estti&as2
A n'o pode% ser &,a%adas por fun(!es definidas e% outros ar?uivos
18/11/12 Estrutura de Dados II 80

E%erc/cios
*a(a u% pro1ra%a ?ue re&ebe &o%o entrada as notas de trHs provas de u% a+uno e &a+&u+a e e ibe a %dia deste a+uno@ se e+e estiver aprovado@ ou infor%a a ne&essidade de u%a prova fina+@ se e+e n'o tiver satisfeito o se1uinte &ritrio2
A $odas as notas %aiores ou i1uais a 0M e A Xdia arit%ti&a %aior ou i1ua+ a 8

Co+o?ue o &+&u+o da %dia e% u%a fun('o separada

18/11/12

Estrutura de Dados II

8:

E%erc/cios
Cinclude 0stdio.31 float calculaMedia,float 21! float 22! float 23-; int main,void- @ float 21! 22! 23! media; printf,<i2ite os 2raus N1! N2 e N35 -; scanf,)f )f )f! >21! >22! >23-; media " calculaMedia,21! 22! 23-; if ,media 1" 5.$ >> 21 1" 3.$ >> 22 1" 3.$ >> 23 1" 3.$- @ printf,LF " EO8PQE<P! MF " )f=n! media-; A else @ printf,ERSTP ;M O8PQE F7TER.=n-; A A float calculaMedia,float 21! float 22! float 23- @ float media; media " ,21 % 22 % 23- / 3; return media; A

18/11/12

Estrutura de Dados II

88

E%erc/cios
I%p+e%ente u%a fun('o ?ue retorne u%a apro i%a('o do va+or de PI@ de a&ordo &o% a *Cr%u+a de )eibniB2

1 1 1 1 1 =4( 1 + + + . .. ) 3 5 7 9 11
Ou seDa2

( 1 ) =4
n 1 i =0

2i + 1

U fun('o deve obede&er ao protCtipo2


A f+oat pi<int n>M 18/11/12 Estrutura de Dados II 89

Cinclude 0stdio.31 float pi,int n-; int main,void- @ int n; float p;

E%erc/cios

printf,4<i2ite o numero de termos5 4-; scanf,4)d4! >n-; if ,n 0 1- @ printf,4;rroK P numero de termos deve ser maior +ue #ero.=n4-; A else @ p " pi,n-; printf,4O7 " )f=n4! p-; A return $; A float pi,int n- @ float soma; int i; soma " 1; for ,i " 1; i 0 n; i%%- @ if ,i ) 2- @ soma " soma - ,1.$ / ,,2 * i- % 1--; A else @ soma " soma % ,1.$ / ,,2 * i- % 1--; A A return 4*soma; A

18/11/12

Estrutura de Dados II

86

Cinclude 0stdio.31 Cinclude 0mat3.31 float pi,int n-; int main,void- @ int n; float p;

E%erc/cios

printf,4<i2ite o numero de termos5 4-; scanf,4)d4! >n-; if ,n 0 1- @ printf,4;rroK P numero de termos deve ser maior +ue #ero.=n4-; A else @ p " pi,n-; printf,4O7 " )f=n4! p-; A return $; A float pi,int n- @ float soma; int i; soma " for ,i soma A return A 1; " 1; i 0 n; i%%- @ " soma % ,poJ,-1!i- / ,,2 * i- % 1--; 4*soma;

18/11/12

Estrutura de Dados II

88

Re8erOncias
Ya+de%ar Ce+es@ -enato Cer?ueira@ Jos )u&as -an1e+@ &ntro$uo a 'struturas $e (a$os@ Editora Ca%pus <277:> Cap#tu+o 1 A Ci&+o de Desenvo+vi%ento Cap#tu+o 2 A E press!es e E/" Cap#tu+o 0 A Contro+e de *+u o Cap#tu+o : A *un(!es

18/11/12

Estrutura de Dados II

8;

Z Xateria+ adaptado por Jos Viterbo *i+,o a partir dos s+ides e+aborados por Xar&o Untonio Casanova e Xar&e+o .attass para o &urso de Estrutura de Dados para En1en,aria@ da P[C4-io. Co% base no +ivro &ntro$uo a 'struturas $e (a$os@ de Ya+de%ar Ce+es@ -enato Cer?ueira e Jos )u&as -an1e+@ Editora Ca%pus <277:>.

You might also like