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.
1. Conhecendo ou relembrando C
Vinícius Alves Hax
Baseado no material de Dave Marshall
Hack Thursday
Novembro de 2012
2. Engenheiro de Computação (FURG), Especialista em
Aplicações para Web (FURG)
Cursando Mestrado em Eng. de Computação
Analista de TI no C3/FURG
Empreendedor www.zetaops.com.br
5. BCPL (Basic Combined Programming Language) (66)
GET LIBHDR
LET 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. B: Ken Thompson e Dennis Ritchie (1969)
B = BCPL sem frescuras (precisava caber na memória)
9. O que levou a ser popular:
Pequena
Tipagem fraca
Linguagem estruturada
Operações bit-a-bit
Implementação de ponteiros
10. 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
11. https://gist.github.com/4171628
#i n c l u d e s t d i o . h
main ( 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);}
16. 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 ) ;
17. Variáveis:
Globáis: Denidas fora de funções
Estáticas: Mantém seu valor entre múltiplas chamadas
void 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 ;
}
24. switch ( letter )
{
case'A ' :
case'E ' :
case'I ':
case'O ' :
case'U ' :
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 ;
}
33. 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 ∗ /
35. 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 ) ;
}
37. 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 } ;
38. 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;
39. Casting
i 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 ;
40. Ponteiros são uma parte fundamental do C. Usar C sem
ponteiros é perder boa parte do poder e exibilidade que a
linguagem permite. O segredo de usar C é usar ponteiros.
41. Por que ponteiros são importantes?
É a única maneira de expressar certas computações
Produz código compacto e eciente
Provê uma ferramenta poderosa
C usa ponteiros com:
Arrays
Estruturas
Funções
42. - Retorna o endereço de uma variável
* - Retorna o conteúdo de um objeto apontado por um
ponteiro
int *pointer;
45. 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 ;
46. 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 ) ∗/
47. int ∗ip ;
ip = ( int ∗ ) m a l l o c (100 ∗ sizeof ( int ));
48. 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.