conhecendo ou relembrando c

50

Upload: vinicius-hax

Post on 09-Jun-2015

295 views

Category:

Technology


2 download

DESCRIPTION

Apresentação para o Hack Thursday (http://hackthursday.com/) sobre a linguagem C. Pode servir como uma introdução para a linguagem. O material é inspirado nesse curso aqui: http://www.cs.cf.ac.uk/Dave/C/ Para quem não participou da apresentação pode ser mais didático olhar o link.

TRANSCRIPT

Page 1: Conhecendo ou relembrando C

Conhecendo ou relembrando CVinícius Alves Hax

Baseado no material de Dave MarshallHack Thursday

Novembro de 2012

Page 2: Conhecendo ou relembrando C

I Engenheiro de Computação (FURG), Especialista emAplicações para Web (FURG)

I Cursando Mestrado em Eng. de ComputaçãoI Analista de TI no C3/FURGI Empreendedor www.zeta�ops.com.br

Page 3: Conhecendo ou relembrando C

Quem usa C?

Page 4: Conhecendo ou relembrando C

I Sistemas OperacionaisI Computação de Alto DesempenhoI Microcontroladores, ArduinoI JogosI CUDA e OpenCL (programação placas grá�cas)

Page 5: Conhecendo ou relembrando C

BCPL (Basic Combined Programming Language) (66)

GET "LIBHDR"

LET START( ) = VALOF $ (FOR I = 1 TO 5 DO

WRITEF("%N! = %I4 ∗N" , I , FACT( I ) )RESULTIS 0

) $

AND FACT(N) = N = 0 −> 1 , N ∗ FACT(N − 1)

Page 6: Conhecendo ou relembrando C

B: Ken Thompson e Dennis Ritchie (1969)B = BCPL sem frescuras (precisava caber na memória)

Page 7: Conhecendo ou relembrando C

C (1972): Melhorias em B, principalmente:

I StructsI Endereçamento por byte

Page 8: Conhecendo ou relembrando C
Page 9: Conhecendo ou relembrando C

O que levou a ser popular:

I PequenaI Tipagem fracaI Linguagem estruturadaI Operações bit-a-bitI Implementação de ponteiros

Page 10: Conhecendo ou relembrando C

C se tornou uma linguagem pro�ssional por diversas razões:

I Construções de alto nívelI Suporta operações de baixo nívelI Produz programas e�cientesI Pode ser compilada em muitos tipos de arquiteturas

Page 11: Conhecendo ou relembrando C

https://gist.github.com/4171628

#i n c l u d e <s t d i o . h>

main ( t ,_, a )cha r ∗a ;{ r e t u r n !0< t ? t<3?main (−79 ,−13 ,a+main(−87,1−_,main (−86 , 0 , a+1 )+a ) ) : 1 , t<_?main ( t+1, _, a ) : 3 , main ( −94, −27+t , a)&&t == 2 ?_<13 ?main ( 2 , _+1, "%s %d %d\n" ) : 9 : 1 6 : t <0?t<−72?main (_,t , "@n '+ ,# '/∗{}w+/w#cdnr /+,{} r /∗de}+,/∗{∗+,/w{%+,/w#q#n+,/#{ l ,+ ,/n{n+\,/+#n+,/#;#q#n+,/+k#;∗+,/ ' r : ' d∗ '3 ,}{w+K w 'K: '+} e# '; dq#' l q#'+d 'K#!/\+k#;q#' r }eKK#}w ' r }eKK{ n l ] '/#;#q#n '){)#}w ' ){ ){ n l ]'/+#n ' ; d}rw ' i ;# ){n\l ] ! / n{n# '; r{#w ' r nc{ n l ] '/#{ l ,+ 'K {rw ' iK { ; [ { n l ] ' /w#q#\n 'wk nw ' iwk{KK{ n l ] ! /w{%' l##w#' i ; : { n l ] ' /∗{ q#' l d ; r '}{ nlwb !/∗ de } ' c \; ; { n l '−{}rw]'/+,}##'∗}#nc , ' ,#nw] '/+kd '+e}+;\#' rdq#w! nr '/ ' ) }+}{ r l #'{n ' ')# } '+}##(!!/" ): t<−50?_==∗a ? putcha r ( a [ 3 1 ] ) : main (−65 ,_, a+1):main ((∗ a == ' / ' )+t ,_, a\+1 ):0< t ?main ( 2 , 2 , "%s " ) :∗ a==' / ' | | main (0 , main (−61 ,∗a , " ! ek ; dc \i@bK ' ( q)−[w]∗%n+r3#l , { } : \ nuwloca−O;m . vpbks , f x n t dCegh i r y " ) , a+1);}

Page 12: Conhecendo ou relembrando C

Obfuscated C Code Contesthttp://reality.sgi.com/csp/iocc

Page 13: Conhecendo ou relembrando C

Hello World!https://gist.github.com/4171614

Page 14: Conhecendo ou relembrando C

Tipos de dados em C:

Page 15: Conhecendo ou relembrando C

Variáveis:

var_type l i s t v a r i a b l e s ;

i n t i , j , k ;f l o a t x , y , z ;cha r ch ;

Page 16: Conhecendo ou relembrando C

Saída formatada:

p r i n t f ( "%c %f %d" , ch , r e a l_va l , i n t_va l ) ;

Page 17: Conhecendo ou relembrando C

Variáveis:Globáis: De�nidas fora de funções

Estáticas: Mantém seu valor entre múltiplas chamadas

v o i d s t a t ( ) ; /∗ p r o t o t yp e fn ∗/

main ( ){ i n t i ;

f o r ( i =0; i <5;++ i )s t a t ( ) ;

}

s t a t ( ) {i n t auto_var = 0 ;s t a t i c i n t s t a t i c_v a r = 0 ;p r i n t f ( " auto = %d , s t a t i c = %d \n" , auto_var , s t a t i c_v a r ) ;++auto_var ;++s t a t i c_v a r ;}

Page 18: Conhecendo ou relembrando C

Operações de incremento:

x++;−−y ;

Page 19: Conhecendo ou relembrando C

i=i+2;i+=2;

Page 20: Conhecendo ou relembrando C

Igualdade: ==Diferença: !=

if (i=j)é válido. Cuidado!

Page 21: Conhecendo ou relembrando C

Operadores lógicos:&& (AND)|| (OR)

Page 22: Conhecendo ou relembrando C

if (a > b)....else....

Page 23: Conhecendo ou relembrando C

Operador ternárioc=(a>b)?a:b;

Page 24: Conhecendo ou relembrando C

sw i t c h ( l e t t e r ){ca s e 'A ' :ca s e 'E ' :ca s e ' I ' :ca s e 'O ' :ca s e 'U ' :

numbero fvowe l s++;b r eak ;

ca s e ' ' :numbero f spaces++;b r eak ;

d e f a u l t :numbe ro f cons tan t s++;b r eak ;

}

Page 25: Conhecendo ou relembrando C

for (expressao1; expressao2; expressao3)comando;

ou bloco de comandos

Page 26: Conhecendo ou relembrando C

f o r ( x=3;x>0;x−){p r i n t f ( "x=%d\n" , x ) ;}

Page 27: Conhecendo ou relembrando C

f o r ( ; ; );

Page 28: Conhecendo ou relembrando C

f o r ( x=0,y=4, z=4000; z ; z /=10)

Page 29: Conhecendo ou relembrando C

i n t x=3;

main ( ){wh i l e ( x>0)

{ p r i n t f ( "x=%d\n" , x ) ;x−;

}}

Page 30: Conhecendo ou relembrando C

do {p r i n t f ( "x=%d\n" , x−);}

wh i l e ( x >0);

Page 31: Conhecendo ou relembrando C

break � sai de um laçocontinue � pula uma iteração de um laço

Page 32: Conhecendo ou relembrando C

int tableofnumbers[50][50];// Vetores começam em zero!

Page 33: Conhecendo ou relembrando C

cha r f i r s t n ame [ 5 0 ] , l a s tname [ 5 0 ] , f u l l n ame [ 1 0 0 ] ;

f i r s t n ame= "Arno ld " ; /∗ I l l e g a l ∗/l a s tname= "Schwarznegger " ; /∗ I l l e g a l ∗/f u l l n ame= "Mr"+f i r s t n ame

+las tname ; /∗ I l l e g a l ∗/

Page 34: Conhecendo ou relembrando C

Como é armazenada uma string?

Page 35: Conhecendo ou relembrando C

f l o a t f i n d a v e r a g e ( f l o a t a , f l o a t b ){ f l o a t ave rage ;ave rage=(a+b )/2 ;r e t u r n ( ave r age ) ;

}

main ( ){f l o a t a=5,b=15, r e s u l t ;

r e s u l t=f i n d a v e r a g e ( a , b ) ;p r i n t f ( " ave rage=%f \n" , r e s u l t ) ;

}

Page 36: Conhecendo ou relembrando C

Exercício 1: Descobrir quantas letras A, B ou C existem emuma string.

Page 37: Conhecendo ou relembrando C

s t r u c t gun{cha r name [ 5 0 ] ;i n t magaz i n e s i z e ;f l o a t c a l i b r e ;} ;

s t r u c t gun a r n i e s ;

s t r u c t gun a r n i e s={"Uzi " , 30 , 7} ;

Page 38: Conhecendo ou relembrando C

t y p e d e f s t r u c t gun{cha r name [ 5 0 ] ;i n t magaz i n e s i z e ;f l o a t c a l i b r e ;} agun ;

agun a r n i e s={"Uzi " , 30 , 7} ;

a r n i e s g u n s [ 5 0 ] . c a l i b r e =100;

Page 39: Conhecendo ou relembrando C

Casting

i n t i n t ege rnumbe r ;

f l o a t f l o a tnumbe r =9.87;

i n t ege rnumbe r=( i n t ) f l o a tnumbe r ;

Page 40: Conhecendo ou relembrando C

Ponteiros são uma parte fundamental do C. Usar C semponteiros é perder boa parte do poder e �exibilidade que alinguagem permite. O segredo de usar C é usar ponteiros.

Page 41: Conhecendo ou relembrando C

Por que ponteiros são importantes?

I É a única maneira de expressar certas computaçõesI Produz código compacto e e�cienteI Provê uma ferramenta poderosa

C usa ponteiros com:

I ArraysI EstruturasI Funções

Page 42: Conhecendo ou relembrando C

& - Retorna o endereço de uma variável* - Retorna o conteúdo de um objeto apontado por um

ponteiroint *pointer;

Page 43: Conhecendo ou relembrando C

Ponteiros:

Page 44: Conhecendo ou relembrando C
Page 45: Conhecendo ou relembrando C

i n t ∗ i p ;i n t x ;

i p = &x ;∗ i p = 100 ;

f l o a t ∗ f l p , ∗ f l q ;

∗ f l p = ∗ f l p + 10 ;

++∗ f l p ;

(∗ f l p )++;

f l q = f l p ;

Page 46: Conhecendo ou relembrando C

i n t a [ 1 0 ] , x ;i n t ∗pa ;

pa = &a [ 0 ] ; /∗ pa p o i n t e r to add r e s s o f a [ 0 ] ∗/

x = ∗pa ;/∗ x = con t en t s o f pa ( a [ 0 ] i n t h i s ca s e ) ∗/

Page 47: Conhecendo ou relembrando C

i n t ∗ i p ;i p = ( i n t ∗) ma l l o c (100∗ s i z e o f ( i n t ) ) ;

Page 48: Conhecendo ou relembrando C

Exercício 2: De�nir o tipo de dados número complexo. Fazeruma função que dado dois números complexos, retorne um

número complexo com a soma de ambos.

Page 49: Conhecendo ou relembrando C

Referências:

I http://www.cs.cf.ac.uk/Dave/C/

I http://en.wikipedia.org/wiki/BCPL

I http://en.wikipedia.org/wiki/B_

%28programming_language%29

I http://en.wikipedia.org/wiki/C_

%28programming_language%29

Page 50: Conhecendo ou relembrando C

Powered by:Latex

https://gist.github.com/4071299