Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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 */
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
/* 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-;
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
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, ¬a); 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, ¬a); 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;;>
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 ;
18/11/12
Estrutura de Dados II
0;
Constru0&es co
E e%p+o2
#a0os
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
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
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
18/11/12
Estrutura de Dados II
87
Constru0&es co
#a0os
Constru0&es co
#a0os
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
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
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
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
18/11/12
Estrutura de Dados II
92
18/11/12
Estrutura de Dados II
90
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:
18/11/12
Estrutura de Dados II
98
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
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
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
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
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
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
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
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
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:>.