IN3R11-2 – C - Cours 2
24 pages
Français
Le téléchargement nécessite un accès à la bibliothèque YouScribe
Tout savoir sur nos offres
24 pages
Français
Le téléchargement nécessite un accès à la bibliothèque YouScribe
Tout savoir sur nos offres

Description

IN3R11-2 { CCours 2Damien MASSONmassond@esiee.fr23 novembre 2010Boucles et structures conditionnellesfor, while, do while et if, else, switchComme en Java (ou plut^ ot l’inverse).for()fg, while()fg ou dofgwhile() ?comme vous voulez !celle qui permet de rendre le code le plus lisible possiblefor(init , init , ..., init ;continuation ;incr , incr ...) : permet1 2 n 1 2de ne regarder qu’une seule ligne pour comprendre la bouclewhile(cond) : equivalent plus joli de for(;cond;)do while :permet de faire toujours un passage sans traiter le premier casa part ;peut souvent ^etre evitee en initialisant judicieusement lesvariables ;on ne lit la condition de continuation qu’a la n, pas toujourslisible...2/2466Booleens, operateurs logiquespas de type boolean en C (vous le savez deja)convention C, 0 : faux, = 0 : vraic’est l’inverse de la convention UNIX pour le retour desprocessus (0 : OK, = 0 : code d’erreur)int main(int argc , char argv[]) fprintf ("4 AND 6\t= %d\n""4 AND 0\t= %d\n" $>./a. out"4 OR 6\t= %d\n" 4 AND 6 = 1"0 OR 0\t= %d\n" 4 AND 0 = 0"NOT 17\t= %d\n" 4 OR 6 = 1"NOT 0\t= %d\n" , 0 OR 0 = 04&&6, 4&&0, NOT 17 = 04jj6 , 0jj0 , NOT 0 = 1!17 , !0) ;return 0;g3/24Evaluation paresseuseoperateurs && et jj \paresseux"evaluation de gauche a droites’arr^ete des que possible :(a=0 && b=c) / b n’ est jamais affecte /(a=1 jj b=c) / b n’ est jamais affecte /4/24Les tableauxElements contigus de m^eme ...

Informations

Publié par
Nombre de lectures 53
Langue Français

Extrait

./a. out"4 OR 6\t= %d\n" 4 AND 6 = 1"0 OR 0\t= %d\n" 4 AND 0 = 0"NOT 17\t= %d\n" 4 OR 6 = 1"NOT 0\t= %d\n" , 0 OR 0 = 04&&6, 4&&0, NOT 17 = 04jj6 , 0jj0 , NOT 0 = 1!17 , !0) ;return 0;g3/24Evaluation paresseuseoperateurs && et jj \paresseux"evaluation de gauche a droites’arr^ete des que possible :(a=0 && b=c) / b n’ est jamais affecte /(a=1 jj b=c) / b n’ est jamais affecte /4/24Les tableauxElements contigus de m^eme ..." />
IN3R11-2
Cours
2
C
Damien MASSON massond@esiee.fr
23
novembre
2010
Boucles et structures conditionnelles for, while, do while et if, else, switch
CommeenJava(ouplutoˆtlinverse).
for(){},while(){}oudo{}while()? comme vous voulez ! celle qui permet de rendre le code le plus lisible possible for(init1,init2, ...,initn;continuation ;incr1,incr2...) : permet de ne regarder qu’une seule ligne pour comprendre la boucle while(cond): equivalent plus joli defor(;cond;) do while: permet de faire toujours un passage sans traiter le premier cas a part ; ` peutsouventeˆtree´vit´eeeninitialisantjudicieusementles variables ; onnelitlaconditiondecontinuationqu`alan,pastoujours lisible...
2/24
Boole´ens,op´erateurslogiques
pas de typeboolean´djea`)enC(vouslesavez convention C, 0 : faux,6= 0 : vrai c’est l’inverse de la convention UNIX pour le retour des processus (0 : OK,6= 0 : code d’erreur)
i n tmain (i n ta r g c ,c h a ra r g v [ ] ){ p r i n t f ( AND  6\ t =  % d \ n "" 4 " 4  AND  0\ t =  % d \ n " " 4  OR  6\ t =  % d \ n " " 0  OR  0\ t =  % d \ n " " NO T  17 \ t =  % d \ n " " NO T  0\ t =  % d \ n ", 4&&6, 4&&0, 4| | 06 ,| |0 , ! 1 7 , ! 0 ) ; r e t u r n0 ; }
$> u t o./ a . 4 AND 6 = 1 4 AND 0 = 0 4 OR 6 = 1 0 OR 0 = 0 NOT 17 = 0 NOT 0 = 1
/342
´ Evaluation paresseuse
operateurs && et||“paresseux” ´
´evaluationdegauchea`droite
sarrˆetede`squepossible:
( a=0 && b=c )/ ’ e s tb n ( a=1| |b=c )/ ’ e s tb n
j a m a i s j a m a i s
a f f e c t e a f f e c t e
/ /
/424
Les tableaux ´ Ele´mentscontigusdemˆemetype
de´clarationetallocationstatique:type nom[taille]u`o;taille estconnue`alacompilation:
i n t N ] ;t [ d o u b l ec o s i n u s 3 6 0 ] ; [
avec initialisation :
c h a rv o w e l 1 [ 6 ] ={’ a ’,’ e ’,’ i ’,’ o ’,’ u ’,’ y ’}; / p t i o n n e l l el a t e v i e n t o a i l l e d/ c h a rv o w e l 2 [ ] ={’ a ’,’ e ’,’ i ’,’ o ’, y ’ ’’ u ’}; ,
re´fe´rence:pointeursurlepremiere´le´ment
i n tt [ ] ={1 , 3 1 ,}; i n tt 2 ; = t i n tt 3 [ ] = t 2 ; t 2 [ 1 ] = 2 ; p r i n t f (" % d \ n ", t 3 [ 1 ] ) ;/2/
les tableaux statiques sont sur la pile
5/24
Taille des tableaux
un tableau ne connait pas sa taille (comme en Java) trois solutions :
tailleconnuegrˆace`a une constante
v o i dp r i n t 1 (i n tt [ ] ){ i n ti ; f o r( i =0; i< i ++)N ; { p r i n t f (" % d \ n, t " [ i ] ) ; } }
taillepass´eeen param`etre
v o i dp r i n t 2 (i n tt [ ] ,i n tn ){ i n ti ; f o r( i =0; i< i ++)n ; { p r i n t f (" % d \ n ", t [ i ] ) ; } }
Aucuncontroˆledede´bordement!!!
utilisation d’un marqueur de fin
v o i dp r i n t 3 (i n tt [ ] ){ i n ti ; f o r ! = Z ;( i =0; t [ i ] i ++){ p r i n t f (" % d \ n ", t [ i ] ) ; } }
/642
Tableaux anidemnsions `
i n t 1 0 0 ] [ 1 6 t [] [ 4 5 ] ;
chaquet[i][j] est un tableau de 45 int sionpasseuntableaua`unefonction,ondoitmettretoutes lesdimensionssauflapremie`re: v o i df o o (i n t ] [ M] ) ;t [
int t[2][3] ; t[0][0] t[0][1] t[0][2] t[1][0] t[1][1] t[1][2] @+0 @+4 @+8 @+12 @+16 @+20 attention`alordredeparcours!!
dans l’ordre
f o r( i =0; i<2; i ++) f o r( j =0; j<3; j ++) . . . t [ i ] [ j ] . . .
pas dans l’ordre !
f o r( j =0; j<3; j ++) f o r( i =0; i<2; i ++) . . . t [ i ] [ j ] . . .
/742
Les pointeurs Premi`erepasse:pointeursettableaux OnpeutenCmanipulerdesadressesme´moire cesadressessestockentdansunevariable,appell´eepointeur unpointeurnestpasseulementuneadresse,ilest´egalement associ´e`auntype type * nom;d´claration d’une variablenomqui contient : e ladressem´emoiredunevariabledetypetype ca vous rappelle les tableaux ? c’est normal, un tableau n’est niplusnimoinsquunpointeursursonpremiere´l´ement
i n tt a b [ ] ={ , 31 , 2}; i n t ; a bt = t / n t s t un it e o i n t e u r: un p/ /∗ ∗ n t un i s tt e a l e u r v a : l o i n t e e p/ t =1; / l e s p o i n t e u r s ! e u ton p a i r e f e d ’ le t i q u e a r i t h m  u r s/  =( t +1)2;  =( t +2)3; p r i n t f (" % d  % d  % d \ n " t a b a b [ 0 ] ,, t t [ 1 ] , [ 2 ] ) ; a b /∗ −123/
8/24
tableaux sur la pile : et alors ?
taille importante = stack overflow dure´edevieassoci´eea`lafonction!
#i n c l u d e<s t d i o . h>
i n t ) (f u n c t i o n{ i n t [ ] =t a b{1 , 3 , 2}; r e t u r n ;t a b } i n tmain (i n ta r g c ,c h a ra r g v [ ] ){ i n tt a b ; t a b = f u n c t i o n ( ) ; p r i n t f (" % d \ n " ;, t a b [ 0 ] ) p r i n t f (" % d \ n " ;, t a b [ 1 ] ) p r i n t f (" % d \ n ", t a b [ 2 ] ) ; r e t u r n0 ; }
dm@pc4206b : $ g c c t a b s t a t f u n c . c t a b s t a t f u n c . c : I n f u n c t i o n f u n c : t a b s t a t f u n c . c : 5 : a t t e n t i o n : c e t t e f o n c t i o n r e t o u r n e l a d r e s s e d u n e v a r i a b l e l o c a l e dm@pc4206b : $ . / a . o u t 1 1075103544 1209200652
solution : allocation dynamique (voir prochain cours)
9/24
Les structures
objetsregroupantplusieursdonn´eesappel´eeschamps`ad´enirhorsdunefonction de´nition:
s t r u c tnom{ t y p e c h a m p 1 nom champ1 ; t y p e c h a m p 2 nom champ2 ; . . . };
d´eclarationdunevariable:
s t r u c t tn o m n y p e v o m ; a r
acce`sauxchamps:
n o m v a r . nom champ
toutcedontlecompilateurconnaitlataillepeuteˆtreun champs l’ordre des champs est important
012/4
Les structures
exemple
s t r u c tc o m p l e x{ d o u b l e ;r e a l d o u b l ei m a g i n a r y ; / / ; c o m p l e x cs t r u c t !i n t e r d i t/ };
s t r u c ta u t r e{ s t r u c t o m p l e x ;c o m p l e x c/ t pOK, e ’ a m b i g u i t e a s d };
i n tmain (i n ta r g c ,c h a r [a r g v ] ){ s t r u c t cc o m p l e x ; c . r e a l = 1 . 2 ; c . i m a g i n a r y = 6 . 3 ; /s t r u c t c o m p l e x c ={1 . 2 , 6 . 3}; /OK / p r i n t f (" % f +% f * i \ n ", c . r c . i m a g i n a r y ) ; e a l , r e t u r n0 ; }
/
112/4
  • Univers Univers
  • Ebooks Ebooks
  • Livres audio Livres audio
  • Presse Presse
  • Podcasts Podcasts
  • BD BD
  • Documents Documents