Your SlideShare is downloading. ×
0
Conhecendo ou relembrando C         Vinícius Alves HaxBaseado no material de Dave Marshall          Hack Thursday         ...
Engenheiro de Computação (FURG), Especialista emAplicações para Web (FURG)Cursando Mestrado em Eng. de ComputaçãoAnalista ...
Quem usa C?
Sistemas OperacionaisComputação de Alto DesempenhoMicrocontroladores, ArduinoJogosCUDA e OpenCL (programação placas grácas)
BCPL (Basic Combined Programming Language) (66)GET LIBHDRLET START( ) = VALOF $ (        FOR I = 1 TO 5 DO                ...
B: Ken Thompson e Dennis Ritchie (1969)B = BCPL sem frescuras (precisava caber na memória)
C (1972): Melhorias em B, principalmente:StructsEndereçamento por byte
O que levou a ser popular:PequenaTipagem fracaLinguagem estruturadaOperações bit-a-bitImplementação de ponteiros
C se tornou uma linguagem prossional por diversas razões:   Construções de alto nível   Suporta operações de baixo nível  ...
https://gist.github.com/4171628#i n c l u d e    s t d i o . hmain ( t , _, a )char       ∗a ;{return       !0 t ? t 3?mai...
Obfuscated C Code Contesthttp://reality.sgi.com/csp/iocc
Hello World!https://gist.github.com/4171614
Tipos de dados em C:
Variáveis:var_type l i s t   variables ;int i , j ,k;float x ,y ,z;char ch ;
Saída formatada:p r i n t f ( %c %f %d , ch , r e a l _ v a l , i n t _ v a l ) ;
Variáveis:                  Globáis: Denidas fora de funções       Estáticas: Mantém seu valor entre múltiplas chamadasvoi...
Operações de incremento:x++;− y; −
i=i+2;i+=2;
Igualdade: ==   Diferença: !=      if (i=j)é válido. Cuidado!
Operadores lógicos:    (AND)     || (OR)
if (a  b)    ....    else    ....
Operador ternário c=(ab)?a:b;
switch   ( letter )           {              caseA  :              caseE  :              caseI :              caseO  :    ...
for (expressao1; expressao2; expressao3)               comando;         ou bloco de comandos
for   ( x =3; x 0; x −)            {              p r i n t f (  x=%dn , x ) ;              }
for (;;)           ;
for   ( x =0, y =4, z =4000; z ; z /=10)
int   x =3;main ( ) { while     ( x 0)               { p r i n t f (  x=%dn , x ) ;                                       ...
do   {              p r i n t f (  x=%dn , x − );              }while    ( x 0);
break  sai de um laçocontinue  pula uma iteração de um laço
int tableofnumbers[50][50];// Vetores começam em zero!
char    firstname [ 5 0 ] , lastname [ 5 0 ] , fullname [ 1 0 0 ] ;f i r s t n a m e=  A r n o l d  ; / ∗ I l l e g a l ∗ ...
Como é armazenada uma string?
float   findaverage (          float a,         float     b)          {     float     average ;            a v e r a g e =...
Exercício 1: Descobrir quantas letras A, B ou C existem em                        uma string.
struct   gun          {          char name [ 5 0 ] ;          int magazinesize ;          float calibre ;          };struc...
typedef s t r u c t gun        {        char name [ 5 0 ] ;        int magazinesize ;        float calibre ;              ...
Castingi n t integernumber ;f l o a t floatnumber =9.87;i n t e g e r n u m b e r =( i n t ) f l o a t n u m b e r ;
Ponteiros são uma parte fundamental do C. Usar C semponteiros é perder boa parte do poder e exibilidade que alinguagem per...
Por que ponteiros são importantes?É a única maneira de expressar certas computaçõesProduz código compacto e ecienteProvê u...
- Retorna o endereço de uma variável* - Retorna o conteúdo de um objeto apontado por um                       ponteiro    ...
Ponteiros:
int   ∗ip ;int   x;i p = x ;∗ ip = 100;float      ∗flp , ∗ flq ;∗ f l p = ∗ f l p + 10;++∗ f l p ;( ∗ f l p )++;flq = flp ;
int   a [10] , x ;int   ∗ pa ;pa = a [ 0 ] ;      / ∗ pa   pointer        to    address    of   a [0]   ∗/x = ∗ pa ;/∗ x =...
int ∗ip ;ip = ( int   ∗ ) m a l l o c (100 ∗   sizeof ( int ));
Exercício 2: Denir o tipo de dados número complexo. Fazer uma função que dado dois números complexos, retorne um          ...
Referências:http://www.cs.cf.ac.uk/Dave/C/http://en.wikipedia.org/wiki/BCPLhttp://en.wikipedia.org/wiki/B_%28programming_l...
Powered by:            Latexhttps://gist.github.com/4071299
Conhecendo ou relembrando C
Conhecendo ou relembrando C
Upcoming SlideShare
Loading in...5
×

Conhecendo ou relembrando C

298

Published on

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.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
298
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Conhecendo ou relembrando C"

  1. 1. Conhecendo ou relembrando C Vinícius Alves HaxBaseado no material de Dave Marshall Hack Thursday Novembro de 2012
  2. 2. Engenheiro de Computação (FURG), Especialista emAplicações para Web (FURG)Cursando Mestrado em Eng. de ComputaçãoAnalista de TI no C3/FURGEmpreendedor www.zetaops.com.br
  3. 3. Quem usa C?
  4. 4. Sistemas OperacionaisComputação de Alto DesempenhoMicrocontroladores, ArduinoJogosCUDA e OpenCL (programação placas grácas)
  5. 5. BCPL (Basic Combined Programming Language) (66)GET LIBHDRLET START( ) = VALOF $ ( FOR I = 1 TO 5 DO WRITEF(%N! = %I 4 ∗N , I , FACT( I ) ) RESULTIS 0)$AND FACT(N) = N = 0 − 1 , N ∗ FACT(N − 1 )
  6. 6. B: Ken Thompson e Dennis Ritchie (1969)B = BCPL sem frescuras (precisava caber na memória)
  7. 7. C (1972): Melhorias em B, principalmente:StructsEndereçamento por byte
  8. 8. O que levou a ser popular:PequenaTipagem fracaLinguagem estruturadaOperações bit-a-bitImplementação de ponteiros
  9. 9. C se tornou uma linguagem prossional por diversas razões: Construções de alto nível Suporta operações de baixo nível Produz programas ecientes Pode ser compilada em muitos tipos de arquiteturas
  10. 10. https://gist.github.com/4171628#i n c l u d e s t d i o . hmain ( t , _, a )char ∗a ;{return !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 %dn ) : 9 : 1 6 : t 0?t −72?main (_,t , @n + ,# / ∗ {}w+/w#c d n r /+ ,{} 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 }+;# r d q#w ! n r / ) }+}{ r l #{n )# } +}##(!!/ ) : t −50?_==∗a ? p u t c h a 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+r 3#l , { } : nuwloca −O;m . vpbks , f x n t d C e g h i r y ) , a +1);}
  11. 11. Obfuscated C Code Contesthttp://reality.sgi.com/csp/iocc
  12. 12. Hello World!https://gist.github.com/4171614
  13. 13. Tipos de dados em C:
  14. 14. Variáveis:var_type l i s t variables ;int i , j ,k;float x ,y ,z;char ch ;
  15. 15. Saída formatada:p r i n t f ( %c %f %d , ch , r e a l _ v a l , i n t _ v a l ) ;
  16. 16. Variáveis: Globáis: Denidas fora de funções Estáticas: Mantém seu valor entre múltiplas chamadasvoid stat (); /∗ prototype fn ∗/main ( ){ int i;f o r ( i =0; i 5;++ i ) stat ();}stat () {int auto_var = 0 ;static int static_var = 0;p r i n t f ( a u t o = %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 ;}
  17. 17. Operações de incremento:x++;− y; −
  18. 18. i=i+2;i+=2;
  19. 19. Igualdade: == Diferença: != if (i=j)é válido. Cuidado!
  20. 20. Operadores lógicos: (AND) || (OR)
  21. 21. if (a b) .... else ....
  22. 22. Operador ternário c=(ab)?a:b;
  23. 23. switch ( letter ) { caseA : caseE : caseI : caseO : caseU : n u m b e r o f v o w e l s ++; break ; case : n u m b e r o f s p a c e s ++; break ; default : n u m b e r o f c o n s t a n t s ++; break ; }
  24. 24. for (expressao1; expressao2; expressao3) comando; ou bloco de comandos
  25. 25. for ( x =3; x 0; x −) { p r i n t f ( x=%dn , x ) ; }
  26. 26. for (;;) ;
  27. 27. for ( x =0, y =4, z =4000; z ; z /=10)
  28. 28. int x =3;main ( ) { while ( x 0) { p r i n t f ( x=%dn , x ) ; x −; } }
  29. 29. do { p r i n t f ( x=%dn , x − ); }while ( x 0);
  30. 30. break sai de um laçocontinue pula uma iteração de um laço
  31. 31. int tableofnumbers[50][50];// Vetores começam em zero!
  32. 32. char firstname [ 5 0 ] , lastname [ 5 0 ] , fullname [ 1 0 0 ] ;f i r s t n a m e= A r n o l d ; / ∗ I l l e g a l ∗ /l a s t n a m e= S c h w a r z n e g g e r ; / ∗ I l l e g a l ∗ /f u l l n a m e= Mr+f i r s t n a m e +l a s t n a m e ; / ∗ I l l e g a l ∗ /
  33. 33. Como é armazenada uma string?
  34. 34. float findaverage ( float a, float b) { float average ; a v e r a g e =(a+b ) / 2 ; return ( average ) ; }main ( ) { float 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 ( a v e r a g e=%f n , r e s u l t ) ; }
  35. 35. Exercício 1: Descobrir quantas letras A, B ou C existem em uma string.
  36. 36. struct gun { char name [ 5 0 ] ; int magazinesize ; float calibre ; };struct gun a r n i e s ;struct gun a r n i e s ={ U z i , 3 0 , 7 } ;
  37. 37. typedef s t r u c t gun { char name [ 5 0 ] ; int magazinesize ; float calibre ; } agun ;agun a r n i e s ={ U z i , 3 0 , 7 } ;a r n i e s g u n s [ 5 0 ] . c a l i b r e =100;
  38. 38. Castingi n t integernumber ;f l o a t floatnumber =9.87;i n t e g e r n u m b e r =( i n t ) f l o a t n u m b e r ;
  39. 39. 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.
  40. 40. Por que ponteiros são importantes?É a única maneira de expressar certas computaçõesProduz código compacto e ecienteProvê uma ferramenta poderosa C usa ponteiros com:ArraysEstruturasFunções
  41. 41. - Retorna o endereço de uma variável* - Retorna o conteúdo de um objeto apontado por um ponteiro int *pointer;
  42. 42. Ponteiros:
  43. 43. int ∗ip ;int x;i p = x ;∗ ip = 100;float ∗flp , ∗ flq ;∗ f l p = ∗ f l p + 10;++∗ f l p ;( ∗ f l p )++;flq = flp ;
  44. 44. int a [10] , x ;int ∗ pa ;pa = a [ 0 ] ; / ∗ pa pointer to address of a [0] ∗/x = ∗ pa ;/∗ x = c o n t e n t s of pa ( a [ 0 ] in this c a s e ) ∗/
  45. 45. int ∗ip ;ip = ( int ∗ ) m a l l o c (100 ∗ sizeof ( int ));
  46. 46. Exercício 2: Denir o tipo de dados número complexo. Fazer uma função que dado dois números complexos, retorne um número complexo com a soma de ambos.
  47. 47. Referências:http://www.cs.cf.ac.uk/Dave/C/http://en.wikipedia.org/wiki/BCPLhttp://en.wikipedia.org/wiki/B_%28programming_language%29http://en.wikipedia.org/wiki/C_%28programming_language%29
  48. 48. Powered by: Latexhttps://gist.github.com/4071299
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×