Memo : syntaxe de programmation en C Elments requis pour le cours dalgorithmique UP! et "# Structure de programme $% &'le ( %$ $% )uteurs ( %$ $% Partie dclarations %$ #include <stdio.h> $% dclaration des *i*lioth+ques %$ #include ,mylib.h, $% dclarations de *i*lioth+que personnelles %$ typedef nomdetype definition ; $% dclarations de t-pe %$ #define constante valeur $% dclaration de constante %$ $% .aria*les glo*ales %$ $% Procdures %$ $% Programme principal%$ int main(void) $% un seul programme principal %$ { $% partie dclaration de .aria*les locales %$ $% partie instructions du programme principal unique dans un pro/et%$ return 0; } Types de donnes prdfinis Catgorie "-pe dclar 0ormat de con.ersion a.ec scan0 et print0 Numriues ( entiers signs short int 1i ou 1d ou 1o 2octal3 ou 14 2he4a3 int 1i ou 1d ou 1o 2octal3 ou 14 2he4a3 long int 1li ou 1ld ou 1lo ou 1l4 entiers non signs unsigned int 1ui rels 0loat 10 ou 1e dou*le prcision dou*le 1l0 ou 1le !aract"re char 1c !ha#ne de caract"res char nom5taille6 7 1s $oolens utiliser le t-pe int a.ec 8 pour 0au4 et autre .aleur pour .rai %claration de varia&le &'le( identi0ier et rser.er de la place en mmoire pour stoc9er une .aleur :-nta4e de dclaration de .aria*les ;type_variable< ;nom_variable<';autre_variable< ; E4emples de dclaration de .aria*les numriques int annee 7 0loat 4!= 4# 7 a.ec initialisation de .aleur int /our>?= mois>!! 7 0loat t.a>!@.A 7 (ointeur ( &'le ( permet de grer des adresses de .aria*les Bclaration ( ;type_variable_pointe< %;nom_variable< 7 E4emples 0loat %ptr; int )pti; *) pointeur sur rel= sur entier %$ char %str+,; *% pointeur sur ta*leau de caract+res %$ Utilisation )00ecter une adresse ptr>C4 7 pti> Ci 7 )00ecter une .aleur D une .aria*le pointe %ptr>!.? 7 %pti># 7 l nest pas 0acile da00icher la .aleur dun pointeur La .aria*le relle pointe par ptr est s-m*olise par 2%ptr3 -ranstypa.e 2casting3 &'le ( lire le contenu de la mmoire comme si ctait un t-pe di00rent 2mais compati*le3 que celui dclar initialement pour cette .aleur )utomatique *ien sou.ent car C nest pas un langage 0ortement t-p Eolontaire s-nta4e ( ;var_type1< > (<nom_type1>) ;var_type2< 7 E4emple ( long int li 7 int i 7 $% dclarations %$ li > 2longint3 i 7 $% instructions %$ MemoC.doc .ersion du F8$!!$#88G page !$G J. M.L UHP Memo langage C Type de donnes complexes l ne peut - a.oir da00ectation glo*ale pour ce t-pe de donnes ( il 0aut traiter sparment chaque composant -a&leau &'le( utiliser pour une liste de taille 0inie et connue de .aria*les toutes de mHme t-pe l 0aut connaItre ( le nom*re dlments= le t-pe de llment 7 Bclaration ( ;type_elem< ;nom_tab<+;nb_elem<, 7 E4emples ( char mot5!86 7 0loat ta*le5?6 7 )cc+s D un lement du ta*leau ( par son indice qui commence D 8 E4emples ( mot5F6>a 7 ou ta*le5G6>!.? 7 )dresse du premier lment du ta*leau ( C;nom_tab<586 E4emple ( Cmot586 ou Cta*le586 /tructure &'le ( regrouper plusieurs in0ormations de t-pes di00rent au sein dune mHme structure de donne Bclarations (typedef struct { ;type_champs< ;nom_champs<} ;type_struct< ; E4emples ( typedef struct Jchar nom5?86 7 0loat note K etudiant 7 etudiant et 7 $% dclaration de .aria*le de t-pe etudiant %$ etudiant %ptr 7 $% pointeur sur structure de t-pe etudiant %$ )cc+s au4 champs dune structure :-nta4e ( ;nom_variable<.;nom_champs< ou ();ptrLsurLstruct<).;champs< ou ;ptr_sur_struct<0>;champs< E4emples strcp-2et.nom= ,Bupond,37 et.note>!#.? 7 strcp-22%ptr3.nom= ,Burand,37 ptrM<note>!G.? 7 Dclaration de type de donnes Utiliser les t-pes pour d0inir des catgories din0ormations utilisa*les dans lensem*le des programmes :-nta4e typedef ;type> <nom_de_type> ; E4emples typedef char string ; *) d0init le t-pe chaIne de caract+res %$ typedef int tab[3]; /* type tableau de 3 entiers tab */ typedef tab *ptrTab; /* pointeur sur tableau de 3 entiers ptrTab*/ Utillisation ta* t!=t# 7 $% dclaration de deu4 .aria*les de t-pe ta*%$ Rgles de nommage pour les identificateurs B0inition ( squence de lettres 2Na..O3 ou 2N)..P3 et de chi00res 2N8..Q3 :ans espace ni caract+re de ponctuation sau0 NL Be longueur quelconque 2;F!3 Commencer par un caract+re Bi00renciation entre ma/uscules et minuscules Oprateurs pour les expressions 1ffectation s-nta4e ;lvar<2 ;expression< 7 e4emple /our >F! 7 )00ectation couple a.ec oprateur ( 32 02 )2 *2 E4emple ( R S> P 7 qui.aut D R > RSP 7 4naires M ncrmentation s-nta4e ;lvar<33 e5emple 6 i 33 qui.aut D i>iS! 7 dcrmentation s-nta4e ;lvar< 00 e5emple 700 qui.aut D />/M! 7 Tpration sur *its Bcalage D droite << D gauche ;; Et *it D *it C Tu *it D *it U )dresse 8 e4emple ( Ca signi0ie adresse de a ndirection ) e4emple ( %p signi0ie .aria*le pointe par p Eri0ier siOeo00 VVV $inaires E4pression numriques ( plus 3 moins M produit ) di.ision * reste de di.ision enti+re 9 Comparateurs ( gal 22 di00rent :2 in0rieur < in0rieur ou gal <2 suprieur > suprieur ou gal >2 2attention ( pas despace entre les deu4 caract+res des comparateurs3 E4emple ( a>>F est une e4pression conditionnelle qui se lit Wa estMil gal D F VX )lors que a> F 7 est une instruction da00ectation qui se lit W/a00ecte F D aX Tprateurs logiques ( non : et 88 ou ;; MemoC.doc .ersion du F8$!!$#88G page #$G J. M.L UHP Memo langage C Principales instructions !ommentaire *) <texte_du_commentaire< )* <trations Avec compteur for (;expr_initc_ptr< ; ;expr_cond.repet_cptr< ; ;expr_cptr<) JblocK on utilise un compteur= interdit de modi0ier le compteur dans le *loc pas de e4it goto ou *ranchement quelconque E4emple ( a00icher tous les caract+res minuscules for 2i>a 7 i;>O 7 iSS3 print02,1c ,= i3 7 print02,Yn,3 7 $% a00icher toutes les lettres de lalpha*et %$ Avec condition darrt E4primer la condition darrHt ( puis la traduire en condition pour continuer en respectant les lois de Be Morgan :-nta4e ( =hile (;condition<) J;bloc <K attention ( au4 initialisations a.ant litration= D *ien modi0ier la .aleur de la condition dans le *loc dinstruction sous peine da.oir une itration in0inie E4emple i> Na 7 =hile 2i;>O3 J print02,1c ,= i37 iSS 7K print02,Yn,3 7 :-nta4e ( do J;bloc< K =hile ( ;condition< ) ; !onditionnelles :imple if (;condition<) ;instr< 7 Compl+te if (;condition<) ;instr1< 7 else ;instr2< 7 ).ec des *locs dinstructions if (;condition<) J;bloc1<K else J;bloc2<K 1i.uilla.e s=itch (;var_int< ) { case ;valeur1< ( ;instr1< 7 ;instr2< 7&rea> 7 case ;valeur2< ( Z 7 default ( ;instr< 7 } Entres- sorties :aisie de .aria*le ( scanf(?<format_de_saisie<?' 8<var<) ; )00ichage ( printf(?<messae<Yn ?) ou printf(?<messae format>Yn?' ;variable>) ; :aisie de caract+re ( .etc2 ;caractere<3 7 )00ichage de caract+re putc 2 ;caractere<3 7 :aisie de chaIne de caract+res ( .ets2;chaine<3 7 )00ichage de chaInes de caract+res ( puts2;cha!ne<3 7 Principales fonctions et librairies ;stdio.h< gestion des entres sorties 2scan0= print0= getc= putc= gets= putsZ3 ;math.h< 0onctions mathmatiques 2po[= sqrt= 0a*s= mod= log= sinZ3 ;string.h< traitement des chaInes de caract+res 2strcp-= strlen= strcmpZ3 ;stdli*.h< utilitaires 2rand= malloc= 0reeZ3 ;ct-pe.h< tests de classes des caract+res 2isspace= isupper= alphaZ3 ;limits.h< et ;0loat.h< les limites d0inies par limplmentation MemoC.doc .ersion du F8$!!$#88G page F$G J. M.L UHP Memo langage C Mots cls rservs auto F dou*le ! int ! struct ! *rea9 # else # long ! s[itch # case # enum ! register F t-pede0 F char ! e4tern F return # union ! const 0loat ! short ! unsigned ! continue # 0or # signed ! .oid ! de0ault # goto # siOeo0 # .olatile do # i0 # static F [hile # ! "-page # nstruction F ndicateurs de classe de mmorisation Procdures @onction :-nta4e de pro0il $% role de la procdure ( Z %$ $% donnes ( liste des param+tres a.ec leur t-pe %$ $% rsultat ( t-pe du rsultat %$ ;type_result< ;nomLfonction< 2 ;typeLparam< ;nomLparamLformel<3 J $% .aria*les locales %$ $% instructions %$ return ;var_de_type_result< 7 K a.ec t-peLresult de t-pe simple (rocdure :-nta4e de pro0il $% role de la procdure ( Z %$ $% donnes ( liste des param+tres a.ec leur t-pe %$ $% rsultat .ia ( pointeur sur le t-pe du rsultat %$ void ;nom_procedure< ( ;type_param< ;nom_param_formel< ) J $% .aria*les locales %$ $% instructions %$ K Compilation Pour compiler le programme source essai.c en l\o*/et e4cuta*le= taper dans une 0enHtre console ( gcc -o essai essai.c si le programme contient des 0onctions mathmatiques= taper ( gcc -lm -o essai essai.c pour garantir une *onne porta*ilit de .otre code= taper ( gcc -ansi -Wall -o essai essai.c et s\assurer qu\il n\- a plus aucun de message d\erreur ou de pr.ention. MemoC.doc .ersion du F8$!!$#88G page G$G