Home

Le langage C - André CLARINVAL

image

Contents

1. f_existe c include lt stdio h gt int f existe char nom fichier E 7 teste l existence d un fichier FILE ptr fichier fopen nom fichier rb ouvrir pr lire return fcelose ptr fichier fermer fopen r ussi fclose r ussi gt 0 f existe gt VRAI fopen manqu fclose manqu gt lt 0 f existe gt FAUX 2 4 Les flots standards Au d marrage du programme trois flots de textes sont automatiquement ouverts Ces flots ont pour r le d as surer la communication avec l utilisateur responsable du programme 66 A chacun de ces flots standards est associ un pointeur de fichier constant de nom conventionnel stdin f tandard d entr e stdout f tandard de sortie stderr fx f tandard des messages d erreur Le programmeur ne doit pas r diger ces d clarations elles sont implicites et ont une port e globale La gestion des flots standards stdin et stdout se fait au moyen de fonctions sp cifiques d crites au chapitre 3 La gestion du flot stderr doit utiliser les fonctions g n rales d acc s un flot de texte quelconque 3 Traitement des exceptions Lorsqu une fonction agissant sur un fichier est incapable d effectuer l op ration qui lui est demand e il se pro duit une condition d exception Deux sortes d exceptions sont distingu es e fin de fichier en lecture la position courante le fichie
2. A CLARINVAL Le langage C 1 16 Variante non r cursive de la fonction pgcd Le texte fait moins transpara tre le raisonnement r cursif qui a conduit la solution int pgcd int a int b while a b op rateur non gal if a lt D b o a ee A else SINON if b lt a a a b l o I S return a 5 3 Le concept de module Un module est un texte s par source ou objet dans lequel sont regroup es une partie des fonctions d un programme Par exemple chacun des fichiers pgcdppcm c et test c r dig s plus haut contient un module source Les regroupements en modules ne sont videmment pas al atoires Les fonctions rassembl es dans un m me module ont entre elles divers liens de parent similitude ou compl mentarit et d usage Exemple Les deux fonctions pgcd et ppem rassembl es dans le module pgcdppcm sont compl mentaires elles manipulent les m mes donn es et l une ppcm a besoin de l autre pgcd Elles ont des appli cations dans les m mes domaines de l activit humaine et sont mises la disposition de tous les pro grammeurs Le module test contient des fonctions utiles provisoirement au seul programmeur occup la mise au point du module pgcdppcm A CLARINVAL Le langage C 1 17 6 Suppl ment Note sur la documentation des fonctions Lorsqu un programmeur cr e des fonctions qu il d sire mettre la disposition d autre
3. struct tm int tm sec secondes 0 59 tm min minutes 0 59 tm hour heures 0 23 tm mday jour du mois 1 31 tm mon mois de l ann e 0 11 tm year ann e du si cle 0 99 y tm wday jour de semaine dimanche 0 tm yday jour de l ann e 0 365 7 tm isdst heure d t 1 oui 0 non _ 1 info manquante b Fonctions de calcul time t time time t ptr donne en secondes la date et l heure actuelles normalement le param tre est le pointeur NULL ou 0 double difftime time t t2 time t t1 donne en secondes la diff rence t2 t1 c Fonctions de conversion struct tm localtime const time t ptr convertit un temps time ten tm ATTENTION L adresse re ue en retour est celle d une variable interne de la fonction localtime dont la valeur est mise jour chaque appel il peut donc tre n cessaire d en prendre une copie time t mktime struct tm ptr make time convertit un temps tmentime t d Fonctions d affichage Les fonctions d affichage des date et heure renvoient l adresse d une cha ne de caract res imprimable car ter min e par n new line ayant la forme anglo saxonne Sun Jan 3 15 14 13 1988 n 0 Cette cha ne de caract res est interne aux fonctions d affichage et son contenu est modifi chaque appel g que app char ctime time t ptr convert time temps donn sous le format time t char
4. include calc h VARIABLES GLOBALES POUR L ANALYSE LEXICALE PRIVATE char expr 80 1 texte de l expression p_expr position suivante examiner PRIVATE Symbole symb descr du symbole courant PPE en EEE N E E S EEEE E EE E E AE AE EAE EN E EEEN A E mn nn char lire expr void fe LIE t pr parer un xpr if p expr puts EXPR ou lt ctr1Z gt gets expr convertir en minuscules for p expr p expr p expr tolower p expr p_expr amp expr se replacer au d but passer outre des espacements while isspace p expr p expr return p expr indiquer la l re position utilis e PENER ENE T PEE E ELEN EES PE E E AREEN S EE E AE EN ES ESA E EA EN R ENE E E ERER EEA PEE E EE A EN E ES E T E L AN E E Symbole symb sv void extrair t d crire le symbole suivant retourner l adr de la descr du symbole N B sscanf n donne le nombre de caract res lus while isspace p_expr p expr passer outre des espacements if p_expr 0 fin de l expression d crire un symbole fictif conventionnel symb categ NUL symb longueur 0 symb texte oper 0 else if isdigit p_expr symb commen ant par un chiffre extraire un nombre symb categ NBRE sscanf p expr f n amp symb texte nb
5. les deux marquent le double niveau d indirection while argv boucle arr t e par le pointeur NULL printf s argv La fonction alloc ci dessous est une fonction unique effectuant toutes les op rations d allocation de m moire Un bloc de m moire est d crit par deux variables un pointeur ptr contenant son adresse et un entier longl indiquant sa longueur La fonction alloc re oit en param tres ces va riables d crivant l tat actuel d un bloc de m moire ainsi qu un entier long2 indiquant la nouvelle longueur demand e pour le bloc La combinaison de ces param tres d termine le comportement de la fonction voir les commentaires dans le texte du programme La fonction doit refl ter le r sultat de son intervention en modifiant les variables descriptives ptr et longl A CLARINVAL Le langage C 11 5 alloc c include lt stdlib h gt malloc realloc free NULL define GENERIC void qualificatif de pointeur GENERIC alloc GENERIC ptr unsigned int longl unsigned int long2 fonction g n ralis e pour l allocation dynamique de m moire Xptr adresse du pointeur longl adresse de l indicateur de longueur long2 longueur demand e Le if long2 longl si longueur demand e longueur actuelle modifier l allocation Fe if long2 gt 0 si
6. struct descr bloc GENERIC adr unsigned int dimens descripteur de bloc GENERIC alloc struct descr bloc p bloc unsigned int long2 fonction g n ralis e pour l allocation dynamique de m moire pour que la fonction puisse modifier le contenu du descripteur elle re oit un pointeur p bloc vers le descripteur p_ bloc gt adr adresse du bloc dimens longueur du bloc long longueur demand e 7 if long2 p bloc gt dimens si longueur demand e longueur actuelle modifier l allocation EZ if long2 gt 0 si longueur demand e gt 0 ajuster r allouer si longueur actuelle 0 allouer si longueur actuelle 0 modifier l indicateur de longueur EJ p_bloc gt adr p bloc gt dimens realloc p bloc gt adr long2 malloc long2 p_bloc gt dimens long2 else si longueur demand e 0 lib rer d sallouer et annuler le pointeur free p bloc gt adr p bloc gt adr NULL p_ bloc gt dimens 0 retourner l adresse actuelle du bloc allou return p bloc gt adr A CLARINVAL Le langage C 11 7 demo c include alloc c void main void static struct descr bloc bloc 0 0 gt bloc allou IR tat initial 0 0 rien n est allou X alloc amp bloc sizeof l re ligne FE tat gt 11
7. A CLARINVAL Le langage C 4 8 Si les deux op randes de la division x y sont d un type entier le r sultat est un entier sinon le quotient est un nombre r el Dans la division enti re le quotient est le quotient par d faut il n est jamais arrondi l unit sup rieure Si l un au moins des op randes de x y est n gatif le signe ou du r sultat n est pas d termin par la norme du langage Exemples 8 5 gt 1 8 2 4 8 0 5 1 6 8 2 4 8 5 gt 3 8 2 gt 4 re 4 4 2 Comparaisons Op rateurs Groupes d op rateurs relationnels sup rieur sup rieur ou gal inf rieur inf rieur ou gal d galit gal X diff rent x y Exemples a ATTENTION L op rateur du test d galit c i 0 est form de deux signes i j 1 lt gt i j 1 c i c i 1 deux fois le m me caract cons cutivement i lt 2 j 1 370 pgcd a b 1 i lt posit debut longueur 1 lt i lt posit_debut longueur 1 Op randes et r sultat Les op randes sont d un type entier ou r el Il subissent la promotion enti re et la conversion arithm tique Le r sultat d une comparaison est de type int et vaut 0 si la comparaison est fausse e 1 sila comparaison est vraie Puisque le r sultat d une comparaison est un nombre entier on peut comparer les r sultats de deux compa raisons On pourrait m me faire sur eux des op rations arithm tiqu
8. Et 12 8 2 12 12 8 2 valuation valuation 12 8 20 8 2 gt 4 20 2 10 12 4 gt 16 2 2 Priorit et associativit des op rateurs En l absence de parenth ses le compilateur d termine l ordre d valuation des op rations en appliquant les r gles de priorit et d associativit d finies par le langage Priorit Les op rateurs sont class s suivant des niveaux de priorit L valuation d une expression ou d une sous expression entre parenth ses commence par les op rations ayant la plus haute priorit et finit par celles qui ont la priorit la plus basse Exemple parce que l op rateur de division est davantage prioritaire que l op rateur d addition 12 8 2 amp 12 8 2 16 Associativit Lorsque se succ dent plusieurs op rateurs de m me priorit l valuation proc de le plus souvent de gauche droite dans quelques cas elle proc de de droite gauche Cette direction est ce qu on appelle l associativit des op rateurs Exemple addition et soustraction de m me priorit s associent de gauche droite p p g posit debut longueur 1 lt amp posit_debut longueur 1 On verra que pour plusieurs op rateurs la direction de l associativit n est pas sans importance A CLARINVAL Le langage C 4 3 Tableau g n ral des op rateurs Priorit Groupes d op rateurs Op rations Notation Associativit suffix
9. concat nation ne subit plus aucune transformation Ce proc d se r p te jusqu ce que plus aucun appel de macro d finition non traduit ne se rencontre dans le texte labor Exemple define DIM 32 define PERMUTER a b a b a b PERMUTER n 0 i c DIM 1 i la premi re transformation donne na 0 i n DIM 1 i n 0 i n DIM 1 i le texte livr par le pr processeur au compilateur devient nt0 1 Ssa paad SS n 0 i S n 32 1 i1 A CLARINVAL Le langage C 6 5 Cependant si dans le texte substitu l appel d une macro d finition M se retrouve ce m me nom M il n est pas traduit une seconde fois Gr ce cela il est possible de red finir l identificateur M Exemple Un programme con u dans un environnement unilingue s lectionne des messages num rot s et les affiche en appelant une fonction msg num Ce programme est revu pour servir dans un environnement polyglotte et une nouvelle fonction msg est cr e qui utilise un deuxi me param tre un code identifiant la langue dans laquelle doit tre affich le message Gr ce la macro d finition ci dessous les anciens appels indiquant un seul param tre sont automatiquement adapt s pour pas ser deux param tres define msg num Un appel msg 13 sera chang en 3 4 Compilation conditionnelle Soit un texte de la forme i macro ex
10. A CLARINVAL Le langage C 9 6 Soustraction de deux pointeurs ou adresses On peut effectuer une soustraction entre deux pointeurs ou constantes adresses rep rant deux l ments d un m me tableau Exemple dimension 1 ptr fin ptr debut Le r sultat est une valeur enti re sign e gale la diff rence des adresses de d part divis e par la taille du type d l ment rep r Autrement dit le r sultat est gal la diff rence des indices correspondants Remarque Soit trois pointeurs sur trois l ments d un tableau debut fin milieu On peut calculer milieu debut fin debut 2 il est interdit d crire milieu debut fin 2 car l addition de deux pointeurs debut fin ne donnerait pas une adresse pointant sur un objet connu du programme Comparaison de deux pointeurs ou adresses Toutes les comparaisons sont possibles entre deux pointeurs ou adresses rep rant deux l ments d un m me tableau Le r sultat est le m me que si l on comparait les indices correspondants Exemple ptr debut lt ptr fin Illustration short int Et 6 p q sizeof short int 2 Dre E c p amp t 0 q p 5 lt q amp t 5 p lt q q p s val adr d sign d sign d sign ATTENTION L op rateur d indirection est davantage prioritaire que les op rateurs d addition et soustrac tion En cons quence 3 3 Les tableaux comme param tres de fonctions p 1l amp p 1 augmente de 1
11. Il est pr f rable de cacher ou enfermer encapsulate en anglais les d tails du fonctionnement et de proposer au programme utilisateur une fonction unique int affiche majusc int caract return putchar toupper caract signal affiche majusc c 7 2 Crit res de d composition en fonctions Un programme C est une composition de fonctions dont certaines pr existent et d autres sont inventer Pour concevoir et structurer son programme le programmeur applique donc une double d marche Par une m thode ascendante bottom up il cherche cr er des op rateurs fonctions plus adapt s la r solu tion de son probl me que ceux dont il dispose a priori il cr e ainsi en quelque sorte une machine abstraite Par une m thode descendante top down il cherche d composer le probl me en probl mes moins complexes plus ais s programmer sur sa machine abstraite A CLARINVAL Le langage C 5 20 In top down design we say this problem is too complex for me I shall dissect it into a number of smaller problems and those into smaller problems still until I have a set of problems simple enough to solve In bottom up design we say instead this machine is not well suited to my problem be cause the elementary operations are too elementary I shall therefore use the elementary operations to create a more powerful machine and the operations of that machine to create one still more pow erful until I h
12. Port e locale ou globale d un identificateur On peut consid rer que le texte d un programme C est hi rarchis de la mani re suivante niveau 0 programme niveau 1 module peut contenir la d claration de variables globales et de fonctions niveau 2 fonction peut contenir la d claration de variables param tres formels niveau 3 bloc peut contenir la d claration de variables locales niveau 4 bloc inclus peut contenir la d claration de variables locales Une variable locale est d clar e l int rieur d un bloc donc aussi d une fonction elle ne peut tre r f renc e que par les op rations elles m mes situ es apr s sa d claration l int rieur de ce bloc on dit qu elle n est visible que dans ce bloc Dans un bloc les d clarations doivent pr c der les instructions 30 Le pr sent chapitre compl te le chapitre 2 A CLARINVAL Le langage C 7 1 Un param tre formel est local la fonction o il est d clar il n est visible que pour les op rations pro gramm es dans cette fonction e Une variable globale est d finie dans un module en dehors de toute fonction elle peut tre utilis e par n importe quelle fonction d finie apr s elle dans le m me module Une variable globale est visible depuis le point o elle est d clar e jusqu la fin du texte source EnC une fonction est toujours globale Elle ne peut pas tre d finie l int rieur d une autre fonctio
13. param K7 PRIVATE Logique anal param2 void if anal virg KO xx T xy if anal param err param tre non reconnu 1x param OK r gle param expr f PRIVATE Logique anal param void return anal expr LEE epr rry symbole PR PRIVATE Logique anal virg void if pt symb gt categ OPER amp amp pt symb gt texte oper KO symb OK symbole LE PRIVATE Logique anal pard void if pt symb gt categ OPER amp amp pt symb gt texte oper KO symb OK calc_sem c ROUTIN ES S EMANTIQU include TRAIT PRIVATE include lt string h gt calc h EM ENT D ES ERR EURS Logique err actio defin rr 1 ex 17 i 0 if return int fo VARIABLI texte m ES GLOBALES t chercher renvoie le indice de la descr fonct i nom 0 strcmp 1 liste des fonctions tern Fonction fonct l char pt nom pt_nom A CLARINVAL Le langage C n sg texte POUR x table des descr i fonct i nom ES ROUTIN strcmp de indicateur d erreur global err action VRAI ES S EMANTIQU validation d un nom de f de fonction test de f termin e par
14. tant qu intervalle non vide 1 proc der la recherche int milieu indice milieu gauche droite 2 if x t milieu return milieu gt trouv if x lt t milieu droite milieu 1 moiti gauche if x gt t milieu gauche milieu 1 moiti droite return 1 intervalle vide gt non trouv 7 Programmation par fonctions 7 1 M thodes de composition de fonctions Un programme C est un ensemble de fonctions une composition de fonctions Comment se combinent ces fonctions Supposons que l on veuille afficher au moyen de la fonction putchar le caract re c converti en majuscule s il s agit d une lettre minuscule par la fonction toupper Rappel le r sultat de la fonction putchar est un signal confirmant ou infirmant la bonne ex cution de l affichage Le graphe ci dessous repr sente les affectations de param tres et r sultats le flux des donn es dans ce pro bl me putenaro L iouppero Ce Deux observations sont faire la chronologie d ex cution des op rations doit suivre le sens de droite gauche du flux des donn es la seule chose qui int resse le programme est le r sultat final figur par la fl che la plus gauche et il peut ignorer comment ce r sultat est obtenu c est dire tout ce qui est repr sent droite de cette fl che Il existe trois m thodes de composition de fonctions q
15. l entr e dans la boucle l indice doit tre 0 la fin de la boucle l indice doit tre d l entr e de chaque pas de la boucle l indice doit tre compris entre 0 et d 1 l issue de chaque pas de la boucle l l ment courant du tableau doit tre z ro include lt assert h gt int total par mois 12 int mois mois 1 12 mois 1 assert mois 1 while mois lt 12 assert mois gt 1 amp amp mois lt 12 total par mois mois 1 0 assert total par mois mois 1 0 mois A CLARINVAL Le langage C 6 8 assert mois 12 1 il est vident que dans cet exemple ces tests ne sont gu re utiles mais dans un programme plus r aliste Lorsque le programme test est au point il n est pas n cessaire d enlever du texte les appels assert leur effet est annul en d finissant le macro identificateur NDEBUG avant d inclure le fichier lt assert h gt define NDEBUG annule l effet de assert include lt assert h gt assert est une macro d finition conditionnelle dont voici une version simplifi e if defined NDEBUG si le macro identificateur NDEBUG n est gt d finition effective du test asser define assert p if p 4 printf Assertion fausse n exit 1 la fonction exit 1 termine l ex cution du programme pas d fini else si le macro identificateur NDEBUG est d
16. moire centrale La taille d un registre est un multiple de celle d un octet et elle est suffisante pour contenir le nombre qui repr sente l adresse d un mot de m moire quelconque Dans la plupart des ordinateurs actuels la taille d un registre est de 32 bits 4 octets ou 16 bits 2 octets Un registre de 32 bits permet d adresser 23 mots de m moire un registre de 16 bits permet d adresser 216 mots de m moire La taille d un registre d adressage est la longueur de mot privil gi e par le langage C 1 3 Interpr tation des repr sentations binaires Selon le contexte o elle est utilis e une m me repr sentation binaire peut faire l objet de diff rentes inter pr tations e nombre entier non sign positif tous les bits du mot sont interpr t s comme tant les chiffres du nombre e nombre entier sign le bit de poids le plus fort est interpr t comme le signe du nombre et la valeur du nombre est cod e dans les bits de droite CCCCCCCCCCCCCCC si le bit de signe est 0 le nombre est positif et sa valeur est cod e sur les autres bits la mani re d un entier non sign sur n bits sans compter le signe la plus grande valeur repr sentable est 2 1 si le bit de signe est 1 le nombre est n gatif et sa valeur est cod e sur les autres bits comme le compl ment 2 de sa valeur absolue sur n bits sans compter le signe la plus petite valeur repr sentable est 2 A CLARINVAL
17. pour un arbre de A noeuds le nombre maximum de noeuds tra vers s est de l ordre de log A Op rations Supposons constitu l arbre ci dessus e Lister alphab tiquement l arbre de racine plaisirs comporte trois phases dans l ordre lister alphab tiquement le sous arbre gauche de racine ne imprimer le contenu de la racine plaisirs lister alphab tiquement le sous arbre droit de racine tentez Cet algorithme est r cursif et s exprime plus g n ralement en ces termes e Lister alphab tiquement un sous arbre de racine N lister alphab tiquement son sous arbre gauche s il existe imprimer le contenu de sa racine lister alphab tiquement son sous arbre droit s il existe A CLARINVAL Le langage C 12 2 Montrer la structure arborescente est un autre algorithme r cursif Montrer la structure d un sous arbre de racine N imprimer le contenu de sa racine imprimer montrer la structure du sous arbre gauche s il existe imprimer montrer la structure du sous arbre droit s il existe imprimer r sultat pour l exemple ci dessus plaisirs ne coeur boudeur et tentez plus sombre un e Ins rer le mot M dans un arbre de racine N est un algorithme r cursif siM N le noeud N contient d j le mot M siM lt N si un sous arbre gauche existe pour N ins rer M dans ce sous arbre sinon cr er M comme
18. symbole e o PRIVATE Logique anal fin void void exec fin void pt if pt symb gt categ NUL KO exec_fin 0 cl turer le traitement s mantique OK symbole nbre xf PRIVATE Logique anal_ nbre void void exec nbre float pt_nbre if pt symb gt categ NBRE KO exec nbre amp pt symb gt texte nbre traiter le nombre symb OK r gle fonct nom params y PRIVATE Logique anal_fonct void void exec_fonct void pt if anal nom KO Arx nom Ery if anal parg err parenth se gauche manquante if anal _ params amp amp err syntaxe X X params 447 err liste de param tres invalide if anal_pard err parenth se droite manquante exec_fonct 0 traiter la fonction OK symbole nom be PRIVATE Logique anal nom void void exec nom char pt nom if pt symb gt categ NOM KO exec nom amp pt symb gt texte nom traiter le nom de symb OK symbole Fes PRIVATE Logique anal parg void if pt symb gt categ OPER amp amp pt symb gt texte oper KO symb OK r gle params param param 2 xf PRIVATE Logique anal params void if anal param KO param xx while anal param2 param2 OK A CLARINVAL Le langage C 12 15 r gle param2
19. On peut ne traiter qu une partie de l intervalle en s arr tant d s la rencontre d un l ment servant de d limiteur dont la position n est pas connue a priori La position occup e par le d limiteur n appar tient pas au sous ensemble trait Cas fr quent en C traiter toutes les positions d une cha ne de ca ract res jusqu au terminateur non compris A CLARINVAL Le langage C 5 9 Exemple La fonction standard strlen string length indique la longueur du texte d une cha ne de caract res terminateur 0 exclu Le bloc d instructions r p t es dans la construction for est vide cette construction est utilis e seule fin de faire varier l indice int strlen char chainel tableau de longueur quelconque int i for i 0 chainel i i lt gt chainel i 0 7 traitement vide return i i nombre de caract avant 0 La fonction strlen ne v rifie pas qu elle ne d passe pas les limites du tableau de caract res elle suppose que le terminateur 0 est certainement pr sent Une telle programmation est hasardeuse Les expressions de contr le de la boucle for devraient plut t prendre une des formes suivantes o l ordre des tests dans l expression de la condition tient compte du fait qu aucun d limiteur pourrait ne se rencontrer dans l intervalle explor for i m i lt n amp amp elemen for i n i gt m amp amp elemen i limite i i k
20. REMARQUE Il existe une diff rence importante entre les tiquettes de types construits et les identificateurs de types d cla r s par typedef alors qu une tiquette de type n est jamais employ e seule mais est toujours pr c d e du nom de la m thode de construction du type un identificateur de type est employ seul Exemple dans la d claration de type combin e ci dessous typedef struct date short int jour mois annee Date date est une tiquette et Date est un identificateur les deux d clarations de variables qui suivent sont synonymes struct date date echeance Date date echeance Cet exemple montre l utilit principale des identificateurs synonymes de types la simplification d criture et la lisibilit Une certaine tradition veut que pour les distinguer des identificateurs de variables ou fonctions habituelle ment crits en minuscules et des identificateurs de constantes souvent crits en majuscules les identifica teurs de types soient crits en minuscules avec initiale majuscule voir les exemples ci dessus 50 50 Noter qu il est licite d crire ce qui suit typedef struct date short int jour mois annee date struct date date echeance ou date date echeance A CLARINVAL Le langage C 8 16 Exercices struct enum Impression d tiquettes d adresses D finir le tableau des fiches signal tiques des tudiants d une classe Chaque fiche contient les informations suivant
21. on finira donc par tomber sur une des deux issues non r cursives Elimination de la r cursivit On peut toujours liminer la r cursivit d un programme en le transformant L ex cution de la version non r cursive est plus performante car elle vite la r p tition des op rations assez complexes d appel et de retour de fonctions Mais elle est habituellement bien plus difficile concevoir et bien moins compr hensible Cependant lorsque comme dans l exemple ci dessus l appel r cursif est la derni re op ration ex cut e dans le corps de la fonction l ex cution de cet appel n est suivie que de return la trans formation du programme est ais e Il s agit de substituer la r p tition des appels r cursifs un trai tement en boucle Le programme transform pouse le sch ma suivant A CLARINVAL Le langage C 5 18 TANT QUE NON issue non r cursive EXECUTER simulation de l appel r cursif FIN TANT traitement final d issue non r cursive La simulation d un appel r cursif consiste simplement donner de nouvelles valeurs aux param tres de la fonction chercher c version it rative int chercher int x int t int gauche int droite recherche dichotomique dans un intervalle ordonn param tres x nombre recherch t tableau gauche droite indices d limitant l intervalle retour indice de l l ment trouv ou 1 en cas d chec while gauche gt droite
22. tableau de 10 1 caract res alloc amp bloc sizeof ligne suivante FE tat gt 15 tableau de 14 1 caract res alloc amp bloc 0 IE tat 0 0 plus rien n est allou K 2 2 Listes cha n es Une structure peut contenir un pointeur rep rant un autre objet qui est une structure de m me type Ceci per met de relier ou cha ner entre elles deux structures On cr e ainsi ce qu on appelle une liste cha n e Ce m canisme ouvre d normes possibilit s pour la repr sentation en m moire centrale de toutes sortes d ensem bles de donn es Nous en donnons ci dessous deux exemples Liste cha n e selon une structure de file Un fichier de relev s des ventes indique pour chaque vendeur son chiffre de vente pour la p riode concern e on souhaite conna tre le pourcentage des ventes totales que repr sente le chiffre de vente personnel de chaque vendeur L algorithme mettre en oeuvre est sch matiquement le sui vant phase 1 lire les relev s pour chaque relev cumuler son montant dans le montant total m moriser le relev phase 2 relire les relev s m moris s pour chaque relev calculer le pourcentage publier le r sultat Comment m moriser temporairement les relev s La premi re id e serait de les ranger dans un ta bleau en m moire centrale mais le nombre de relev s tant inconnu a priori il est en toute ri gueur impossible de d
23. void void j d finition pr alable d un type de fonction typedef int comparaison void a void b void trier void item int nbre items comparaison comparer Syntaxes d appel d une fonction Soit les d clarations suivantes constantes fonctions int strcmp char a char b extrait de lt string h gt int intcmp int a int b pointeur de fonction int comp void a void b intcmp tableau de pointeurs int cpr 2 void a void b strcemp intcmp Les appels suivants sont tous quivalents appels par constantes intcmp amp x amp y amp intcmp amp x amp y appels par pointeurs comp amp x amp y comp amp x amp y cpri1 8x 8y cpri1 amp x 8y L op rateur d appel de fonction tant davantage prioritaire que les op rateurs d adressage et amp les pa renth ses sont n cessaires autour des d signateurs amp intcmp comp cpr 1 Fonctions standards de traitement d un tableau ordonn qsort bsearch Le fichier d en t te lt stdlib h gt fournit entre autres fonctions deux algorithmes g n riques de tri rapide quick sort et de recherche dichotomique binary search dans un tableau dont les l ments sont de type quelconque Un des param tres de ces fonctions est un pointeur vers la fonction de comparaison employer A CLARINVAL Le langage C 11 14 void q
24. asctime struct tm ptr ASCII time temps donn sous le format tm e Exemple La fonction date _du_jour fournit la date du jour dans une structure de la forme jj mm 1 9aa include lt time h gt truct date short int jour mois annee truct date date_du jour void time_t maintenant time 0 obtenir date et heure struct tm date heure localtime amp maintenant convertir struct date aujourdhui pr parer la r ponse aujourdhui jour date heure gt tm mday PEL sl K aujourdhui mois date heure gt tm mon 1 PR ls is T2 aujourdhui annee 1900 date heure gt tm year 19aa return aujourdhui r pondre A CLARINVAL Le langage C 9 27 Exercices Pointeurs et structures 1 Modifier l exercice d impression d tiquettes d adresses propos au chapitre 8 de mani re telle que les fonctions n changent plus des structures mais des adresses de structures Pointeurs et tableaux 2 Programmer certaines des fonctions standards de manipulation de cha nes de caract res d finies dans le fichier lt string h gt par exemple strcat strchr strstr Les programmes peuvent appeler les autres fonctions de la biblioth que lt string h gt Pour viter tout probl me lors des tests de programme donner ces fonctions un nom en majus cules STRCAT STRCHR STRSTR Tester ces fonctions 3 Modifier les deux versions r cursive et it r
25. cran ou imprim es sur papier il peut encore s agir de donn es circulant sur un r seau de communication La biblioth que standard stdio h standard input output d finit un certain nombre de fonctions par lesquelles un programme C peut acc der aux fichiers Les principales sont d crites ci apr s Une fonction transf rant des donn es du fichier au programme est une fonction de lecture une fonction ef fectuant le transfert inverse est une fonction d criture Classification des fichiers d apr s la nature de leur support e Supports adressables Disques et disquettes magn tiques sont des supports adressables la surface de ces supports est d coup e en secteurs num rot s dont l adresse c est dire le num ro peut tre calcul e par l ordinateur et directement at teinte par l organe p riph rique de lecture criture A tout moment il est donc possible d acc der se posi tionner une partie quelconque du fichier Il s ensuit notamment que le programme peut r acc der toute partie qu il a d j trait e Autre propri t des supports adressables sur ces supports un programme peut faire de la mise jour on entend par l un m lange d op rations de lecture et d op rations d criture e Supports d filants ou s quentiels Sur les appareils qui les manipulent le papier imprim la bande magn tique ont un sens de d filement et tout moment il n est possible d acc der qu la partie d
26. crire un enregistrement PARAM ETR ES v rifier l existence d un enreg int taille totale sizeof num taille_enreg const static int prefixe EOF signal d emplacement vide int nbre enreg nombre d enregistrements pr sents d terminer le nombre d enregistrements pr sents xy for fseek pt fichier 0 SEEK END gt fin de fichier nbre enreg ftell pt fichier taille totale nbre enreg lt num nbre enreg tant que n cessaire cr er des enregistrements vides 7 if fwrit amp prefixe sizeof prefixe 1 pt fichier lt 1 return EOF en cas d insucc s ef fseek pt fichier taille enreg SEEK CUR se positionner sur le pr fixe de l enregistrement A fseek pt fichier taille totale long num SEEK SET crire le num ro et le texte de l enregistrement LE if fwrite amp num sizeof prefixe 1 pt fichier lt 1 fwrite pt enreg taille enreg 1 pt fichier lt 1 return EOF en cas d insucc s A return num rendre le num ro de l enreg crit devient celle du pr fixe d enreg l adresse pt enreg n est pas consid r e peut tre NULL long int posit position de l enreg dans le fichier int prefixe r ception du num ro lu dans le fichier
27. le nom du fichier source primaire le nom du fichier d velopp la d signation du r per toire standard Exemple MS DOS developC essai c essai lis c turboc Le module incl c ci dessous contient les l ments n cessaires l identification des fichiers inclus la fonction init design enregistre dans une variable globale la d signation du r pertoire standard la fonction incl analyse une ligne de texte si celle ci est form e d une directive include la fonction renvoie l adresse de la d signation de fichier prendre en consid ration Ecrire un fichier d en t te incl h permettant d utiliser ces fonctions incl c DEFINITIONS GLOBALES define SEPAR AS pour r pertoires MS DOS define PRIVATE static PRIVATI har design_fichier 81 nom fichier design fichier la d sign sera construite selon ce sch ma repert fichier design_f nom f aA include lt string h gt strcpy strlen void init design char repert enregistr du r pert standard if repert return si ptr NULL voir d clar globales m moriser la d signation du r pertoire standard strcpy design fichier repert d terminer la position du nom de fichier nom fichier design fichier strlen design fichier si le s parateur final manque l ins rer if f nom fichier 1 SEPAR nom fichier SEPAR include lt stdio
28. ou 1 la 1 re lettr MM i return fonction non reprise dans la liste 12 16 2 piles define MAX VAL 32 hauteur maximum de la pile PRIVATE float val MAX VAL pile des valeurs op randes PRIVATE int v niveau suivant define MAX OPER 16 hauteur maximum de la pile PRIVATE struct int i fonct i param oper MAX OPER op rateurs i fonct indice de la descr de la fonction ex cuter i param niveau de base dans la pile val des op randes PRIVATE int o niveau suivant ROUTINES toutes les routines ont la m me signature void exec_ ptr vers symbole Af action lt d but gt initialiser un calcul void exec_debut void pt void exec nom char pt nom err action FAUX v 0 vider la pile val o 0 vider la pile oper exec_nom AFFICHER empiler l appel de la f afficher action O afficher le r sultat du calcul y void exec_fin void pt void exec_fonct void pt exec fonct 0 ex cuter la fonction AFFICHER action nbre empiler la valeur de l op rand GSA void exec_nbre float pt_nbre if err action return if v lt MAX VAL valfv pt nbre 1s rr d bordement de la pile des op randes action nom empiler l
29. sizeof enregistrement i si la num rotation n est pas continue l emplacement des enregistrements manquants doit cependant tre r serv dans le fichier on doit donc tablir une convention pour signaler qu un emplacement est ou n est pas occup Nous adopterons pour notre part la convention suivante dans le fichier tout enregistrement est pr fix par son num ro de 0 n 1 le num ro d un emplacement inoccup sera forc la valeur n gative EOF Le fichier rel_io c d finit les fonctions de base pour la gestion d un tel fichier A l exception des fonctions ouvrir rel et fermer rel ces fonctions re oivent en param tres le nu m ro de l enregistrement traiter l adresse de cet enregistrement en m moire centrale la faille de l enregistrement le pointeur du fichier Certaines fonctions ne prennent pas en consid ration l adresse de l enregistrement dans ce cas on peut passer l adresse NULL Toutes les fonctions ren voient le num ro de l enregistrement trait ou EOF en cas d insucc s Le langage C page 10 11 rel_io c defin PARAM defin ETRE int chercher rel la position courant include lt stdio h gt ouvrir rel fdefine fermer rel fopen fclose int ecrire rel PARAME mode int num void pt enreg unsigned int taille enreg FIL m pE fichier EO ou
30. unsigned int amp f1 0 1 Programme quivalent utilisant le format p d affichage d un pointeur include lt stdio h gt void main void float f1 4 p sur fl pointe sur f1 0 taille de l l ment sur lequel on pointe printf n n sizeof float d sizeof p sur fl p affiche le contenu d un pointeur rintf n p sur fl vaut p p sur fl rintf n p sur fl 1 vaut p p sur fl t tE rini n amp fl vaut p amp f1 0 rint n amp fl 1 vaut p amp fl1 0 1 Les calculs d adresses n ont de sens qu entre des pointeurs ou adresses rep rant des l ments d un m me tableau Par d finition tous les l ments d un tableau ont le m me type le d placement unitaire est donc d fini Il est permis d englober dans ces calculs la position suivant imm diatement le dernier l ment du ta bleau Cette tol rance a pour but de rendre possibles les tests de d tection de la fin du tableau Dans les limites ainsi fix es les op rations suivantes sont possibles D placement On peut modifier la valeur d une constante adresse ou d un pointeur rep rant un l ment d un tableau en ajou tant ou soustrayant une expression enti re Exemples p 1 t dimension 2 La valeur de l expression enti re est automatiquement multipli e par la taille de l l ment rep r de mani re donner un d placement d adresse
31. A CLARINVAL Le langage C 12 26 Table des mati res CHAPITRE 1 SURVOL INTRODUCTIE no inter manie me rite nm nn ne ere nee rene ie Rene 1 D finitions de d part 2 Etape l laboration de l algorithme analyse 2 1 Etape 1 1 d finir la classe de probl mes ss 2 2 Etape 1 2 d finir la m thode de r solution 2 3 Etape 1 3 optimiser l algorithme 3 Le concept de langage de programmation Pr sentation du langage CL 1 6 Histoire du langage Cire ai AEn aK M eee en A er entend Ne EEA E te IV re ele tes test 4 Etape 2 r alisation du programme siennes 4 1 Etape 2 1 transformer l algorithme en fonction programm e R gles et habitudes syntaxiques g n rales ss Korman ondes MOIS RTE AA Ur ee M dd Liste des Mots r serv s aiiora eine lee ne RRE AN OE E rene eee nes ed tin RE 42 Variante rennes nn tn nn tirer et ee 4 3 Etape 2 2 ajouter des op rations d change d information Un programme C est un ensemble de fonctions ssssnseneneennennsernrnre Pr sentation des fonctions standards de dialogue avec l op rateur 1 10 Appel de fonction et passation des param tres iii 1 11 44 Etape 2 3 organiser les biblioth ques de programmes 1 12 R partition du texte en un ou plusieurs fichiers sise 1 12 Cr ation du programme ex cutable iii 1 14 5 Un autre exemple sed nr ne A la ee in net a die dE Re SRE Re ete ete 5 1 Algorithmes 5 2 Programme 5 3 Le concept de module 6 Suppl ment
32. EFINE SYS SINPUT nom fichier entr e EFINE SYS SOUTPUT nom fichier sortie UN nom programme Dans les syst mes UNIX et MS DOS le flux stdout d un premier programme peut servir d entr e stdin un second programme le flux stdout du deuxi me programme peut servir d entr e stdin un troisi me pro gramme et ainsi de suite Ce m canisme s appelle un tube pipe en anglais Pour cela on crit programi program2 programs 3 2 D viation programm e fonction freopen Supposons un programme qui se d roule en trois phases 1 introduction de donn es par dialogue au terminal cran clavier 2 calculs sur ces donn es 3 cr ation d une liste imprim e des r sultats Supposons que la liste des r sultats doive tre conserv e on l crit donc dans un fichier qui pourra tre r imprim tout moment La fonction print est utilis e la phase 1 pour produire des affichages l cran et la phase 3 pour crire dans le fichier des r sultats Entre ces deux phases le flot de sortie standard stdout doit tre d vi vers le fichier la fonction freopen file re open est utilis e dans ce but A CLARINVAL Le langage C d viation des sorties standards freopen d signation du fichier w stdout d viation des entr es standards freopen d signation du fichier r stdin Exemple include lt stdio h gt int main void phas
33. Exemples float puiss racine exposant float racine register int exposant sde ss int pgcd a b int a b e liste des param tres la liste num re les identificateurs des param tres formels s par s par des virgules les parenth ses sont obligatoires m me si la fonction ne re oit aucun param tre Rappel de d claration Le rappel de d claration d une fonction reproduit les l ments suivants de sa d claration primaire classe type identificateur identificateur Le rappel de d claration est suivi du terminateur Le prototype d une fonction ne mentionne pas ses param tres n anmoins les parenth ses sont obligatoires elles servent distinguer la d claration d une fonction de celle d une variable Exemples float puiss ou int pgcd ppem ou A CLARINVAL Le langage C ex ex tern float puiss tern int pgcd ppcmi 7 16 Exercices R diger et compiler une fonction ne contenant pas d instructions mais seulement toutes sortes de d clarations de variables et de tableaux e des prototypes de fonctions en format ANSI A CLARINVAL Le langage C A CLARINVAL Le langage C Chapitre 8 Les types construits 1 M thodes de construction de types de donn es 1 1 G n ralit s Rappel le type d une donn e est l attribut de cette donn e qui d finit la fois le domaine o elle prend ses valeurs et le mode de
34. FIN FIN TANT A CLARINVAL Le langage C 1 5 TANT QUE P lt 0 EXECUTER DEBUTR lt R N PeP I FIN FIN TANT FIN 3 Le concept de langage de programmation Pr sentation du langage C L algorithme doit tre r dig dans un langage un formalisme compr hensible par l ordinateur Plus pr ci s ment le langage en question doit tre compr hensible la fois par l homme le programmeur et par un programme pr existant qui pourra analyser le texte et le convertir en quelque chose d ex cutable par l ordi nateur Un tel programme s appelle un compilateur Pour tre analysable par l automate qu est le compilateur un langage de programmation est extr mement for malis et les r gles d criture ou de syntaxe extr mement pr cises Nous utiliserons dans ce cours le langage C qui est un des plus couramment employ s aujourd hui Histoire du langage C Le langage C a t d fini en 1972 73 par l Am ricain Ritchie un des auteurs du syst me d exploitation UNIX pour servir la r daction des programmes composant ce syst me d exploitation Plusieurs particularit s du langage sont r v latrices du genre de programmes que l on visait en proposant des quivalents pour la plu part des possibilit s des langages assembleurs le langage C ambitionnait de se substituer ces derniers Le nom de C est l aboutissement d une suite de noms de langages qui s inspir rent successivement l un l autre CPL Combined Programming Lan
35. Note sur la documentation des fonctions 1 18 XErCICES nr entente na en Nm Re Nat LEE a 1 19 CHAPITRE 2 LES VALEUR Sia men re nn te nn nn tent an tintin 2 1 1 Introduction principes de repr sentation de l information 2 1 11 L syst me d num ration binaire 42 4uis unten dentelle Master eeii riesaa s 1 2 Taille des repr sentations binaires 1 3 Interpr tation des repr sentations binaires Le concept d alphabet n n e IPE E e S EE E E A A A A S N T ten este Rene res in ne een 2 Les t pes de donn es scalaire cou fassent sl ahmed tie i aai ae e ARE L op rateur sizeof 2 480 nn Mn te nel nent 3 Les constantes litt raless258s unes se Mi E M ne radeon Met ane tr nee rene Pertes 3 1 Constantes SCalair s vs 5eme tee TER ten nee er ere sie a deg cite n er ae en Renan nr BE Liste des caract res non repr sentables escape sequences ss 2 8 3 2 Chaines d Carat ress acrescer it ine aai a R RE iaee EE aiue SKEE fetes nest me ent tireurs tite 2 8 4 Les variables scalaires premi re approche ss 2 9 E ADE E EE IEEE a e1 AAEE AA T AA A AA E T 2 9 4 2 Usage des identificateurs 4 3 Initialisation d une variable 5 D claration des fonctions premi re approche ss 2 10 6 Les pointeurs et les constantes adresses premi re approche ss 6 1 D finitions es Rss 6 2 Manipulation des pointeurs et adresses par les fonctions 7 Les tableaux premi re approche ss 7 1 M canismes de base
36. ca en E a L objet ainsi red fini doit tre un objet global Cet objet doit tre public non static si sa d finition primaire figure dans un autre module b Le qualificatif extern est obligatoire c Les deux qualificatifs const et volatile peuvent figurer dans la m me d claration d Les qualificatifs const et volatile sont autoris s dans la d claration d une fonction bien qu ils n aient dans ce cas aucune utilit 2 2 D claration des variables D claration primaire Les variables globales sont d clar es dans un module en dehors de toute fonction mais avant la d finition des fonctions qui doivent y avoir acc s Habituellement toutes les variables globales sont d finies en t te du module Les variables locales sont d clar es au d but d un bloc l int rieur d une fonction avant toute op ration interne ce bloc A CLARINVAL Le langage C 7 12 On peut en une seule d claration d finir plusieurs variables poss dant des attributs identiques l exception de la valeur initiale Une telle d claration comporte plusieurs couples identificateur initialisation droit classe type identificateur initialisation identificateur initialisation La mention du type et l identificateur sont obligatoires Exemples unsigned int prix unitaire float surface volume register short i signed long int total du mois 12 char nom fichier 32 C exemple txt const char espace t
37. clarer un tableau de dimension suffisante Question g n rale comment stocker en m moire un ensemble d l ments dans le cas o le nombre d l ments est inconnu En repr sentant chaque l ment par une structure qui outre les donn es proprement constituti ves de l l ment contient un pointeur vers l l ment suivant ou pr c dent le dernier l ment de la liste contient un pointeur nul Chaque l ment est rang dans un bloc de m moire allou dynamiquement la seule limite est alors la quantit d espace disponible dans le tas A CLARINVAL Le langage C f gt M moriser un relev consiste ins rer un nouvel l ment dans la liste cha n e Relire un relev consiste extraire un l ment de la liste Questions quelle position dans la liste doit tre ins r un nouvel l ment de quelle position faut il ex traire l l ment suivant Dans le probl me qui nous occupe on souhaite normalement diter le r sultat dans le m me ordre que les donn es d entr e On acc dera donc la liste cha n e en respectant la logique d une file d attente queue en anglais premier entr premier sorti cette logique est connue sous le nom de FIFO first in first out Toute insertion ou entr e dans la file se fait en queue de la liste toute extraction ou sortie de la file se fait en t te de la liste A tout moment le programme doit donc conna tre ces deux positions elles seront i
38. du ss ens initialis par variable long int total usine 0 var locale while signal 3 amp amp no usine usine traitee traitement d un atelier total usine total usine total atelier lecture suivante signal scanf lhd 2hd d amp no usine amp no atelier amp total atelier printf nTotal usine lhd ld usine traitee total usine total firme total firme total usine printf nTotal firme ld total firme exit 0 ou return 0 terminaison OK 1 4 Droit de mise jour d une variable Une variable ou un param tre d clar dans un programme peut tre mis jour sa valeur peut tre modifi e par toute op ration de la partie de ce programme o la variable ou le param tre en question est visible Il est possible de modifier ce droit Une variable ou un param tre peut tre d clar e volatile la donn e peut tre mise jour par un l ment ext rieur au programme ceci permet par exemple de d finir une variable tampon pour l change de donn es entre deux programmes s ex cutant simultan ment A CLARINVAL Le langage C 7 10 e const constant la donn e ne peut pas tre mise jour par les op rations du programme pour que la d claration ait un sens elle doit comporter une clause d initialisation 38 on d finit ainsi une constante nomm e dans le texte du programme ce nom sera plus parlant que
39. e par une autre dans notre exemple puiss est d clar e avant main ceci permet au compilateur lorsqu il analyse le texte d une fonction appelante de conna tre le type et le mode de repr sentation des param tres fournir et du r sultat r cup rer A d faut comme pour printf ou scanf dans notre exemple le compilateur fait des pr somptions Dans la m thode illustr e ci dessus les deux fonctions sont d clar es et d finies dans le m me fichier R partition en plusieurs fichiers puiss c float puiss fl lever n test c oa float resulta for for return p gt 0 p p lt 0 p resul r el t nint Pp t 1 0 result result tat float puiss floa void main float e int void r t n int p test printf n introduisez printf n introduisez l exposant printf n g exp d A CLARINVAL Le langage C la puissance p x entier sign totype de la fonct appel e de tion puiss scanf g amp r scanf d amp e g n r e puiss r e r elle entier la racine Dans la m thode illustr e ci dessus la fonction puiss est d clar e et d finie dans le fichier puiss c et un rap pel de sa d claration est ins r dans le fichier fest c Ce rappel de d claration est appel le prototype de la fonction Utilisation de fichiers d en t te
40. elles se d composent m thode descendante en it rations sur les l ments du tableau main TOP DOWN complexe re simple ET particulier g n ral BOTTOM UP fonctions g n rales 28 Cette discussion m thodologique rel ve d une inspiration proche de celle de la programmation par objets A CLARINVAL Le langage C 5 21 Conception ascendante La fonction de tirage d un numero de boule consiste ramener dans l intervalle 1 42 le nombre pseudo al atoire fourni par la fonction standard rand L algorithme demeurerait inchang pour n importe quel intervalle min max Ici appara t une possibilit de g n ralisation cr er une fonction rand_in min max qui pourra tre r utilis e dans un autre contexte que celui de ce jeu de loto Le flux de donn es est le suivant lt numero lt rand in lt rand e L identification des fonctions numero et rand_in r sulte du raisonnement suivant le flux de donn es proc de du g n ral au particulier chacune de ses tapes op re une sp cialisation ou sous typage chaque tape le type ou domaine de valeurs possibles se r duit un sous ensemble du pr c dent Dans ce style de raisonnement on d couvre fr quemment des occasions de g n raliser la solution en cr ant des fonctions de niveau interm diaire comme ici la fonction rand_in e La d marche de sp cialisation ou sous typage est une forme particuli re de celle qu
41. et on ne doit pas oublier de lib rer chaque fois l espace de manoeuvre allou sans quoi on risquerait d puiser la r serve de m moire include lt stdlib h gt malloc free include lt string h gt memcpy void permuter void pt sur a void pt sur b unsigned int taille void temp variable auto temp malloc taille allouer memcpy temp pt sur a taille temp lt a memcpy pt sur a pt sur b taille X a lt b Ef memcpy pt_sur_b temp taille b lt temp free temp lib rer Dans la seconde forme le pointeur temp est une variable statique conserv e d un appel l autre l es pace allou doit tre ajust chaque appel Cette forme est pr f rable la pr c dente A CLARINVAL Le langage C 9 22 include lt stdlib h gt malloc realloc include lt string h gt memcpy void permuter void pt sur a void pt sur b unsigned int taille static void temp description du static unsigned int long temp 0 bloc allou if long temp lt taille faut il ajuster le bloc temp long temp 0 malloc taille realloc temp taille long temp taille memcpy temp pt sur a taille temp lt a memcpy pt sur a pt sur b taille a lt b E memcpy pt_sur_b temp ta
42. faut d une clause d initialisation explicite une variable statique qu elle soit locale ou globale est initialis e la valeur z ro la valeur initiale d une variable automatique est ind termin e M thode g n rale Dans tous les cas une valeur initiale peut tre d finie au moyen d une expression constante c est dire ne comportant que des constantes en guise d op randes Exemples d clarations et initialisations int compteur 0 float pi 3 1416 float n 3 0 7 0 int i 127 int j 1 char code langue F char nom fichier 32 C exemple txt Initialisation des variables agr gats Dans le cas d une variable agr gat un tableau cf chapitre 2 ou une structure cf chapitre 8 une liste d expressions constantes fournit la valeur de chaque composant cette liste est plac e entre accolades Exemples short int nbre jours dans mois 12 31 29 31 30 31 30 31 31 30 31 30 31 char jour 7 9 dimanche lundi mardi mercredi jeudi vendredi samedi Si un composant est lui m me d composable ses valeurs forment une sous liste elle m me plac e entre acco lades la liste d initialisation ci dessous est form e de deux sous listes 37 Exemple short int nbre jours dans mois 2 12 ann e bissextile ann e ordinaire 431 29 31 30 31 30 31 31 30 21 30 31 31 28 31 30 31 30 31 31 30 31 30 31 36 Cf chapitre 9
43. fini gt annulation d finition vide du test assert define assert p endif A CLARINVAL Le langage C 6 9 Exercices Macro d finitions param trables Ecrire une macro d finition MAX qui ayant pour param tres deux nombres d un m me type quel conque renvoie le plus grand des deux De mani re analogue crire une macro d finition MIN qui renvoie le plus petit des deux nombres Dans un programme conduisant un dialogue au terminal chaque introduction de donn es par appel de la fonction scanf r pond un message de demande affich par printf Ecrire une macro d finition pscanf recevant trois param tres le texte du message de demande le format de la r ponse l adresse de la donn e lire REMARQUES Le nombre de param tres d une macro d finition ne pouvant pas tre variable chaque appel de pscan f peut lire une seule donn e Puisque le pseudo appel pscanf message format amp donnee poss de la forme d une expression ind composable le texte transform devrait galement constituer une expression ind composable Compilation conditionnelle Adapter la macro d finition pscanf pour qu elle puisse galement servir lire des donn es dans un fichier l affichage du message de demande doit alors tre inhib A CLARINVAL Le langage C 6 10 Chapitre 7 Variables et fonctions Un programme C est un ensemble de fonctions et ces fonctions sont souvent r parti
44. gne la valeur de la variable avant ex cution de l affectation dans l expression de gauche i d si gne l adresse de la variable r sultat 4 3 Initialisation d une variable La d claration d une variable peut comporter une clause d initialisation Cette clause d termine quelle valeur initiale est rang e dans la variable avant toute op ration du programme manipulant cette variable Cette valeur initiale est d finie par une constante ou une expression notamment arithm tique qui ne cite comme valeurs que des constantes Exemples d clarations et initialisations ini Es amp 10 int j 1 float n 3 0 7 0 ll char homme M char femme F 5 D claration des fonctions premi re approche La d finition d une fonction comporte dans l ordre deux parties la signature et le corps de la fonction float puiss float n int p lever n la puissance p float resultat resultat 1 while p gt 0 resultat resultat n p p 1l while p lt 0 resultat resultat n p p 1 return resultat A signature de la fonction type du_ r sultat nom param tres_formels B corps de la fonction blocentre d claration des variables locales c est dire accessibles aux seules op rations l int rieur du bloc op rations ou instructions 113 0 et 7 0 sont des nombres r els le r sultat de leur division est un nombre r el L expression 3 7 portant sur
45. l adresse du tableaul4 z ro en cas d incident ou de fin de fichier La fonction puts crit une ligne dans le flot stdout int puts char lignel param tre un tableau ou une cha ne de caract res contenant le texte de la ligne la ligne peut tre vide de tout caract re retour un nombre positif ou nul EOF en cas d incident En m moire centrale le texte est mis sous la forme d une cha ne de caract res et est donc cl tur par 10 Dans le flot de donn es le texte de la ligne est cl tur par le caract re n de fin de ligne Exemple Le programme suivant copie le flot stdin dans le flot stdout Si on en d vie la sortie vers un fichier il permet de cr er partir du clavier un fichier de texte include lt stdio h gt void main void copie stdin dans stdout char ligne 80 1 80 caract res 0 while gets amp ligne amp facultatif puts ligne 2 3 Entr e Sortie format e printf print with format La fonction printf crit dans le flot stdout une s rie de donn es d crites par leurs formats int printf char format param tres cha ne de caract res d crivant les formats d affichage suivie de 0 n valeurs afficher retour nombre de caract res crits La cha ne de contr le qui peut tre plac e dans un tableau de caract res contient du texte des commandes de mise en page ex n et des codes d finissant le format sous
46. la valeur de chaque expression est affect e une variable masque 1 lt lt p masque identifiant le bit en position p if var amp masque teste le bit p gt vrai si 1 8 var var masque met le bit p 1 quel que soit son tat var var amp masque met le bit p 0 quel que soit son tat if var amp 1 var est il impair extraire la valeur cod e dans un groupe de bits contigus cadrer droite puis masquer les positions exc dentaires v mot gt gt 5 amp 3 valeur 0 3 des bits 5 6 d un mot v mot gt gt 4 amp 7 valeur 0 7 des bits 4 6 d un mot char octet 17 char chiffrel 33 ets extraire les deux chiffres d cimaux cod s dans un octet d un nombre d cimal condens chiffrelp 2 1 octet p l amp Oxff O chiffrelp 2 octet p gt gt 4 amp Oxff O l op ration 0 transforme le chiffre en Caract re ASCII 0 4 F0 10 1 Lo gt TA etes permuter 2 l ments d un tableau sans employer de zone de manoeuvre alil 5 alj 3 00000101 00000011 ali ali aljl 00000110 aljl aljl alil 00000101 ali ali aljl 00000011 Op randes et r sultat Les op randes doivent tre d un type entier Ils subissent la promotion enti re et dans le cas des op rations bool ennes la conversion arithm tique Le type du r
47. longueur demand e gt 0 ajuster r allouer si longueur actuelle 0 allouer si longueur actuelle 0 modifier l indicateur de longueur ptr longl realloc ptr long2 malloc long2 longl long 2 else si longueur demand e 0 lib rer d sallouer et annuler le pointeur free ptr ptr NULL longl 0 retourner l adresse actuelle return ptr demo c include alloc c void main void static char ptr 0 adresse du bloc allou static unsigned int dimens 0 longueur du bloc allou initial 0 0 rien n est allou A tr amp dimens sizeof l re ligne gt 11 tableau de 10 1 caract res tat Lloc tat gt 15 tableau de 14 1 caract res tr amp dimens 0 0 0 plus rien n est allou Le tat 110oc tat amp pt loc amp ptr amp dimens sizeof ligne suivante amp pt A CLARINVAL Le langage C 11 6 2 Pointeurs et structures 2 1 Structures contenant des pointeurs Une structure peut contenir des pointeurs Ainsi dans le dernier exemple ci dessus semble t il plus naturel de rassembler en une structure unique les deux l ments adresse et longueur d crivant un bloc allou alloc c include lt stdlib h gt malloc realloc free NULL define GENERIC void qualificatif de pointeur
48. mode a pour crire la suite des commandes d j en cours while preparer commande amp commande commande entete nbre lignes gt 0 convention de fin une commande de 0 ligne ecrire commande amp commande en cours fclose en cours exit 0 code de terminaison OK Le langage C page 10 8 e La fonction fread lit partir de la position courante dans un fichier binaire le contenu de n objets habi tuellement des structures qu elle range dans un tableau La position courante est modifi e en cons quence unsigned int fread void ptr unsigned int taille unsigned int nbre FILE ptr fichier param tres adresse du tableau ou de l objet unique r cepteur taille de chaque occurrence d objet l ment du tableau nombre d l ments successifs ranger dans le tableau pointeur du flot vis retour nombre d objets obtenus du fichier en cas d erreur ou de fin de fichier ce nombre peut tre inf rieur au nombre demand appeler ensuite les fonctions feof et ferror pour conna tre l tat du flot Exemple Le programme ci dessous lit le fichier des commandes cr ci dessus Pour traiter chaque commande il appelle une fonction traiter commande d finie ailleurs include lt stdio h gt include commande h d f d une commande fonction externe extern void traiter commande Bon Commande pt commande void lire commande Bon
49. nbre de donn es obtenues par scanf doit tre 3 lt 0 en fin de fichier l re lecture signal scanf 1hd 2hd d gno usine amp no atelier amp total atelier while signal traitement d une firme long int total firme var locale total firme 0 while signal 3 traitement d une usine short int usine traitee id du ss ens long int total usine var locale total usine 0 usine traitee no usine while signal 3 amp amp no usine usine traitee traitement d un atelier total usine total usine total atelier lecture suivante signal scanf lhd 2hd d amp no usine amp no atelier amp total atelier printf nTotal usine lhd ld usine traitee total usine tal firme total firme total usine tf nTotal firme ld total firme terminaison OK 32 Cf chapitre 5 A CLARINVAL Le langage C 7 3 Directive d utilisation On peut poser comme r gle g n rale que toute variable doit tre d clar e le plus pr s possible des instructions qui l utilisent L usage et la port e d un identificateur doivent tre les plus petits possi bles R gles de visibilit Soit un identificateur utilis toujours l int rieur d un bloc disons de niveau b quelle d claration s appli que est visible cet endroit du programme Le compilateur cherche successivement cette d claration dans l
50. ne vide ou uniquement compos e de caract res d espacement scanf va insister jusqu ce qu on lui donne un caract re non blanc e Si l on veut lire une ligne par gefs alors que la pr c dente l a t par scan on peut ex cuter deux fois l appel gets le premier lit la fin de la ligne pr c dente n compris A CLARINVAL Le langage C 3 6 3 D viation des flots standards 3 1 D viation par le langage de commande Les flots standards stdin et stdout peuvent tre d vi s vers des fichiers Le moyen d effectuer cette red fini tion est fourni par le langage de commande propre chaque ordinateur Dans les syst mes UNIX et MS DOS la commande d ex cution du programme pr alablement constitu par le relieur doit tre libell e de la mani re suivante nom programme lt nom fichier entr e gt nom fichier sortie Ne doivent tre indiqu s que les op rateurs de d viation lt gt et noms de fichiers n cessaires Exemples ex cution du programme istalph exe avec production d une liste alphabet lis listalph gt alphabet lis ex cution du programme calcul exe prenant ses donn es dans le fichier fest dat calcul lt test dat idem avec mise des r sultats dans un fichier calcul tst calcul lt test dat gt calcul tst Dans l environnement VAX VMS la commande RUN d ex cution du programme doit tre pr c d e de la red finition des noms de flots standards
51. rateur arithm tique l expression x 0 y quivaut x x 0 y e l expression x quivaut x 1 l expression x quivaut x 1 e la d claration de la variable resultat comporte son initialisation la valeur 7 e lorsque la boucle de r p tition while est contr l e par un compteur elle pouse ce sch ma init initialisation du compteur sauf si sa valeur initiale est d j acquise while cond condition de poursuite de l ex cution oper op rations incr incr mentation du compteur cette construction peut tre remplac e par for init cond incr oper de plus dans le cas pr sent e les accolades sont supprim es autour du bloc oper parce qu il comporte une seule instruction e le traitement init d initialisation du compteur est vide 4 3 Etape 2 2 ajouter des op rations d change d information Pour cr er un programme apte ex cuter cette fonction puiss nous devons ajouter des op rations visant e d terminer la valeur des arguments N et P par exemple en demandant de les introduire au clavier e d livrer le r sultat par exemple en l affichant l cran e ventuellement tester la validit des arguments introduits message d erreur l cran et redemander l introduction A CLARINVAL Le langage C 1 9 Ces op rations assurent la communication l change de l information Il existe diverses sortes d changes e entre l ordinateur e
52. rateurs ou noms de fonctions et les range successivement dans une m me zone de m moire d clar du type union symbole float nbre char nom 32 char oper ou union symbole float nbre char nom 32 oper d clar de variable union symbole symbole lu La clause d initialisation ventuellement incorpor e la d claration d une variable union ne peut videmment inscrire qu une seule valeur dans cette variable le type de cette valeur initiale doit tre celui du premier mem bre de l union Exemple union symbole symbole lu 0 valeur initiale du membre nbre type float Utilisation Une variable union doit toujours tre utilis e en association avec une autre variable qui indique quelle inter pr tation doit en tre faite Le plus souvent ces deux variables sont associ es comme membres d une m me structure Exemple Le programme calculette cr e un descripteur de chaque symbole Cette structure descrip tive comporte un code de cat gorie l indication de la longueur et le texte du symbole celui ci est soit un nombre converti en float soit un nom de fonction soit un op rateur d un seul caract re L interpr tation du texte est dict e par le code de cat gorie enum categ symbole NBRE 9 NOM 7Z OPER struct descr symbole enum categ symbole categ int longueur union float nbre char nom 32 char oper texte Pour produire le m me effet on peut d cl
53. ration est une construction provoquant la r p tition de l ex cution d une s quence d instructions La forme de base de l it ration est la suivante pseudo code langage C TANT QUE condition while condition EXECUTER s quence instructions FIN TANT L ex cution de la s quence d instructions se r p te tant que la condition est vraie la condition est test e avant chaque ex cution de la s quence Pour que la r p tition finisse par s arr ter la s quence r p t e doit normalement contenir des instructions capables de rendre fausse la condition 25 Les langages de programmation proposent tous quelques variantes de constructions it ratives Outre while C propose les constructions for et do while e La s lection est une construction qui s lectionne et ex cute une s quence d instructions parmi plusieurs pos sibles La forme de base de la s lection est la suivante pseudo code langage C SI condition if condition ALORS s quence instructions SINON s quence else instructions FIN SI La premi re s quence d instructions est ex cut e dans le cas o la condition est vraie la seconde s quence est ex cut e dans le cas contraire Une de ces s quences peut tre vide si la deuxi me s quence est vide le texte entre crochets peut tre omis Les langages de programmation proposent une variante connue sous le nom anglais g n rique de case structure o le nombre de s quence
54. rieur ou gal gt sup rieur ou gal gt e op rateurs logiques amp amp et ou Un op rande peut prendre une des formes suivantes constante ex ste PA 32000 e identificateur de variable i tli prix un qte e appel de fonction puiss n 2 e sous expression plac e ou non entre parenth ses 5 a b 100 Par g n ralisation on peut dire que un op rande une valeur constitue lui seul une expression tout op rande est donc une sous expression de l expression qui le contient une fonction est un op rateur cr par le programmeur dont les op randes sont les param tres un appel de fonction est une sous expression D terminer la valeur du r sultat d une expression se dit valuer une expression 1 2 Cat gories d expressions Il existe en C des expressions d adressage dont le r sultat est une adresse de m moire nous les tudierons plus tard Dans ce chapitre nous nous int resserons aux expressions num riques dont le r sultat est une va leur num rique enti re ou r elle On a d fini au chapitre 2 une premi re expression d adressage l indexation t i t i j d un l ment de tableau En lui m me un indice plac entre est une expression num rique dont le r sultat est une valeur d un type entier A CLARINVAL Le langage C 4 1 Une expression num rique ou d adressage dont tous les op randes sont des constantes produit un r sultat
55. sizeof T C LIGNE Pour que les calculs d adresses soient possibles la dimension C doit tre fixe et connue elle ne peut jamais tre ind termin e En cons quence si l on passe en param tre une fonction un tableau plusieurs dimensions seule la premi re dimension peut tre d clar e ind termin e La d claration du param tre formel prend la forme T t C A CLARINVAL Le langage C 11 1 Exemple fonction cherchant un mot dans un tableau liste de mots du langage C include lt string h gt stremp define LMAX 31 long maximum d un mot C char position mot char mot char listel LMAX 1 int nb mots mot texte cherch xyz 0 liste x tableau des mots enregistr s xyz 0 nb mots nombre de mots d j enregistr s N B Cet algorithme n est pas du tout optimis int iy indice gt mot for i 0 i lt nb mots i if stremp mot liste i 0 si trouv renvoyer return amp listel i l adresse du mot enregistr return 0 renvoie NULL en cas d chec Adressage par d placement param trable Une fonction qui comme la pr c dente d clare en param tre un tableau char liste LMAX 1 c est dire sous la forme T t C n est pas tout fait g n rale la longueur maximum des mots est fig e Il vaudrait mieux disposer d une fonction capable de chercher un mot dans un tableau
56. sssssssesesesisssssssseressssesesisrresesiseseene D claration des tableau nee anima a ar en tn eee etes D signation d un l ment de tableau l indexation ss Parcours d un tableau rss nn ts AR Re ee EN Traitement des tableaux par les fonctions sise A CLARINVAL Le langage C 1 25 Tableaux plusi urs dimenslons s s urine RIM NM Rent e r Mt Reed 1 3 Cha nes de Caract res hs riinisnmntraiimmmtrnnetehess 7 4 Initialisation des tableaux Syntaxe de d claration simplifi e XORCICOSNS TR A Sr ne M Re NE AR NN RNA UE CHAPITRE 3 LES ENTR ES ET SORTIES STANDARDS d Les flots de donn es Standards serrer mn tement een maeimete a ea o seed aar 2 Fonctions d acces aux flots Standards s iss sieert drame E EE ATER ete iles Signaldefindefichi r BOF Sri asie nier nee depends 2 1 Entr e Sortie d un caract re getchar putchar inner 2 2 Entr e Sortie d une ligne gefs puts i 2a s Entr e SOfti Arale E ee R E EEE E rE O EEEE E N lise nes eee printf print with format sise Seanj Sean WINONA ER RE Qt tin me nets teen ei NI tn Exemples RSR NANTES er Nr Ne A ee Re Re le see lee ea AN ete 4 RPODICMES RER TA DE ne RES SSSR NO RE A SR DS SRE Se ES CR MON IDE ne ne 3 D viation des flots Standards lil anti tem cle ne a tante 0 lan et A Mt dun te elle 3 1 D viation par le langage de commande 3 2 D viation programm e fonction freopen ier EX
57. sultat est le m me que celui du premier op rande apr s conversion Dans une op ration de d calage lt lt ou gt gt la valeur du second op rande doit tre positive ou nulle et ne peut tre sup rieure au nombre de bits du premier op rande 18 Pour que le test d un bit puisse s exprimer bri vement par la formule if var amp masque plut t que par if var amp masque 0 il faut que tout nombre comportant un bit quelconque 1 c est dire en pra tique tout nombre diff rent de 0 soit consid r comme vrai En ceci se trouve la justification de cette op tion caract ristique du langage C A CLARINVAL Le langage C 4 14 5 Les op rations d affectation 5 1 Affectation absolue Op rateur e Format var val e Op ration la valeur r sultat de l expression de droite va1 est rang e dans la variable d sign e par l expression de gauche var Exemples salaire net salaire brut cotisations impot taxe prix taux 100 n2 puiss n 2 b i 1 rand 42 Op randes et r sultat L expression de gauche d signe une variable 20 Avant d tre rang e dans la variable r ceptrice la valeur fournie par l expression de droite est convertie dans le type de cette variable Exemples unsigned int u signed int i signed int j float n i u conversion unsigned gt signed nee is conversion int gt float Je ne conversion float gt int Am
58. un appel de fonc tion dont la valeur r sultat est celle l m me que la construction while doit tester on peut souvent simpli fier le programme en incorporant au test de condition l op ration de lecture Exemple Le programme suivant copie le flot stdin dans le flot stdout si on en d vie la sortie vers un fichier il permet de cr er partir du clavier un fichier de texte La fonction de lecture gets re tourne 0 lorsqu elle re oit le signal de fin de fichier cf chapitre 3 include lt stdio h gt void main void copie stdin dans stdout char ligne 80 1 80 caract res 0 while gets amp ligne 0 puts ligne 0 facultatif Dans ce genre de simplification on emploiera souvent une expression s quentielle Exemple Le programme ci dessous r p te le test de la fonction puiss sur tous les couples de nom bres introduits au clavier jusqu ce que l utilisateur introduise un signal de fin de fichier include lt stdio h gt fonctions de dialogue float puiss float n int p fonction test e void main void float r int e racine exposant while printf nDonnez racine et exposant expr s qu scanf g d amp r amp e EOF tant que non fin printf n 3g exp d 3g n r e puissi r e tester Programmes hi rarchis s Beaucoup de programmes sont hi rarchis s en ce sens qu ils ne se contentent pas de trait
59. x hexadecimal integer dans un code de format les suivant imm diatement le signe signalent l endroit o peut tre indiqu le nombre de chiffres afficher si ce nombre commence par 0 les positions non significatives sont mises z ro plut t qu blanc include lt stdio h gt void la fonction ne re oit pas de param tres et ne renvoie pas de valeur r sultat impression de l alphabet ASCII ce que signifie le pseudo type void vide partie graphique 8 caract res par ligne formats d cimal hexad cimal symbole void alphabet void int i 32 while i lt 127 if 138 0 printf n op rateur modulo reste de la division par printf 5034 02x c i i i i return retour sans renvoi de valeur return lorsque comme ici cette instruction est la derni re du corps de la fonction elle peut tre omise Simuler le m canisme de la virgule flottante En s inspirant de la fonction puiss pr sent e au chapitre 1 crire une fonction qui recevant en param tres une mantisse et un exposant calcule et renvoie la valeur r elle repr sent e t puiss float n int p rappel de la d claration de la fonction puiss float reel float m int e mantisse exposant gt calculer la valeur r elle return m puiss 10 e A CLARINVAL Le langage C 2 5 2 Les types de donn es scalaires Le langage C d finit un certain nombre
60. 12 3 void localiser Noeud ppn char mot chercher et ins rer un noeud ds le ss arbre d adr ppn if ppn NULL si le sous arbre n existe pas creer ppn mot ACTION pour le cas non trouv else Noeud pn ppn supprimer une indirection int test strcmp mot pn gt texte if test 0 ACTION pour le cas trouv if test lt 0 localiser spn gt fils g mot r c gauche if test gt 0 localiser spn gt fils d mot r c droite void lister Noeud pn liste alphab tique if pn NULL si le sous arbre pn existe lister pn gt fils g r currence gauche printf s n pn gt texte ACTION lister pn gt fils d r currence droite void montrer Noeud pn structure arborescente if pn NULL si le sous arbre pn existe printf pn gt texte ACTION printf MC montrer pn gt fils g r currence gauche printe MM montrer pn gt fils dj r currence droite printf T include arbre2 c int main void ne ts des op rations sur un arbre binaire char phrase phrase analys e plaisirs ne tentez plus un coeur sombre et boudeur char posit position courante dans la phrase int deplact nombre de caract res lus char motf 15 1 r ception du mot courant void arbre
61. 31 127 chiffre hexad cimal si c est une majuscule le convertit en minuscule non accentu e si c est une minuscule non accentu e le convertit en majuscule A CLARINVAL Le langage C 4 25 Exercices Op rations arithm tiques Ecrire une fonction qui recevant en param tre l indication d une dur e en nombre de secondes l affi che l cran sous la forme hh mm ss heures minutes secondes la taille des variables doit tre suffisante pour exprimer l heure 23 59 59 D clarer un tableau de 12 l ments total des ventes du mois choisir un type de donn es capable de repr senter des montants de l ordre du million Garnir ce tableau par un dialogue l cran Apr s cela afficher sur 12 lignes de l cran ventes du mois mm nnnnn pp mm est le nu m ro du mois de 1 12 pp est le pourcentage arrondi du total annuel des ventes Ecrire ce programme en une seule fonction en utilisant pour seules variables en plus d un indice mois les totaux mensuels et annuel Un num ro de compte bancaire est compos de 3 parties bbb nnnnnnn cc Les 3 premiers chiffres bbb identifient la banque les 7 chiffres suivants nnnnnnn forment le num ro de compte aupr s de cet organisme les 2 derniers chiffres cc composent un nombre de contr le gal au reste de la division par 97 du nombre obtenu en collant les 10 chiffres bbbnnnnnnn Ecrire une fonction qui recevant en param tres les deux nombres bb
62. 37 Il est toutefois tol r de ne pas hi rarchiser la liste des valeurs mais ceci ne semble pas recommandable Exemple short int nbre jours dans mois 2 12 ann e bissextile ann e ordinaire 31 29 31 30 31 30 31 31 30 31 30 31 34 28 31 30 31 30 81 31 30 314 30 31 A CLARINVAL Le langage C 7 8 Si une liste de valeurs initiales est incompl te les valeurs manquantes sont automatiquement remplac es par Z ro Initialisation des variables automatiques Une variable automatique est r initialis e chaque fois qu elle est cr e c est dire chaque fois que l on com mence une ex cution du bloc o elle est d clar e La valeur initiale d une variable automatique peut tre d finie par la m thode g n rale des expressions cons tantes Elle peut galement tre d finie par une expression variable c est dire comportant des variables ou des appels de fonctions Les variables ou fonctions r f renc es doivent videmment tre d j d clar es et visibles Exemples int i 0 init par constante ine Je El init par variable int no facture compter X init par fonction Contrairement ce qui se passe pour une initialisation par des expressions constantes une seule expression variable est autoris e En d autres termes l initialisation par expressions variables n est pas applicable aux tableaux Pourquoi ce mode d initialisation est il impossible pour les variabl
63. 7 1 Expression conditionnelle op rateur Op rateur e Format expr expr2 expr3 e Op ration si expri 0 vrai le r sultat est la valeur d expr2 expr3 n est pas valu si expri 0 faux le r sultat est la valeur d expr3 expr2 n est pas valu Remarque expr1 sert de condition Pour la lisibilit du programme il est recommand de la placer entre pa renth ses en effet dans tous les autres contextes une condition doit toujours tre plac e entre parenth ses Exemples int abs int i fonction retournant la valeur absolue d un entier return i lt 0 i i char majusc char c alphabet ASCII fonction convertissant une minuscule en majuscule et laissant tel quel tout autre caract re return c gt a amp amp c lt z c A a c propri t de l alphabet ASCII les lettres majuscules aussi bien que les minuscules occupent des positions contiqgu s par cons quent A a repr sente l cart invariant entre une majuscule et la minuscule correspondante A CLARINVAL Le langage C 4 20 Op randes et r sultat Tous les op randes subissent la promotion enti re Les deux derniers op randes subissent la conversion arithm tique et le r sultat est du m me type que ces op randes apr s conversion Associativit Les deux derniers op randes expr2 expr3 d une expression conditionnelle peuvent tre eux m me
64. A CLARINVAL Le langage C 7 13 e droit de mise jour bien qu ils n aient dans ce contexte aucune signification la d claration d une fonction peut comporter les qualificatifs const et volatile e classe la classe indique l usage priv ou public de la fonction une fonction d clar e sans qualificatif de classe est publique le seul qualificatif autoris est static il rend la fonction priv e e type le type mentionn est celui de la valeur r sultat de la fonction le qualificatif int entier peut tre laiss implicite le pseudo type void vide doit tre indiqu pour une fonction qui ne rend pas de r sultat e liste des param tres la liste comporte la d claration compl te de chaque param tre les parenth ses sont obligatoires m me si la fonction ne re oit aucun param tre l absence de param tre est indiqu e par le nom du pseudo type void vide Exemples int compter void ou compter void void init void D claration des param tres formels La d claration d un param tre prend la forme suivante p p droit classe type identificateur La mention du type et l identificateur sont obligatoires Les d clarations successives sont s par es par des virgules e doit de mise jour un param tre peut tre d clar const c est dire non modifiable e classe par d faut un param tre formel est de classe auto le seul qualificatif d
65. Ces informations sont repr sent es de la mani re suivante une structure de type bon_commande form e d un entete commande num ro de commande identit du client date sui vi d un tableau corps d un maximum de 15 structures de type ligne commande num ro de com mande identification de l article quantit command e l en t te comporte un entier indiquant le nombre de lignes effectives du bon de commande Toutes ces informations ayant t valid es on peut les enregistrer dans le fichier des commandes en cours commande h fe de structures d un bon de commande typedef st t short int aaaa mm jj Date typedef st t int no commande no client Date date commande int nbre lignes Entete Commande typedef struct int no commande no article qte commande Ligne Commande typedef struct Entete Commande entete Ligne Commande corps 15 Bon Commande include lt stdio h gt include commande h d f d une commande fonction externe extern void preparer commande Bon Commande pt commande void ecrire commande Bon Commande pt commande FILE pt fichier fwrite amp pt commande gt entete sizeof Entete Commande ty pt fichier fwrite amp pt commande gt corps sizeof Ligne Commande pt commande gt entete nbre lignes pt fichier int main void Bon_Commande commande FILE en cours fopen cdes dat ab
66. Commande pt commande FILE pt fichier fread amp pt commande gt entete sizeof Entete Commande 1 pt fichier fread amp pt commande gt corps sizeof Ligne Commande pt commande gt entete nbre lignes pt fichier int main void Bon_Commande commande FILE en cours fopen cdes dat rb while lire commande amp commande en cours feof en cours traiter commande amp commande fclose en cours exit 0 code de terminaison OK 5 2 Positionnement dans un fichier binaire fseek ftell e La fonction fseek modifie la position courante dans un fichier binaire La prochaine op ration de lecture ou criture s effectuera partir de la position ainsi tablie 6 int fseek FILE ptr fichier long int deplacement int origine retour 0 en cas de succ s ou 0 pas n cessairement EOF en cas d erreur 69 Exception si le fichier a t ouvert sous le mode a ou a toute criture s effectue la fin du fichier Le langage C page 10 9 La modification de position s effectue par addition d un d placement par rapport une origine p p p p pp g l origine indiqu e par une valeur cod e peut tre une des suivantes SEEK SET d but du fichier premi re position occup e 0 SEEK CUR position courante position pr par e pour le prochain acc s SEEK END fin du fichier position apr s la derni re
67. Conception ascendante ED EAA AATTEITA EAEE A E T ET A A XEMDIE aaa RE Me SEE AE E ae E A O de e E A DE EATE le ti DDAA A AEAEE EE EN TEE TE EO EE AE E EE A A EAA CHAPITRE 6 LE PR PROCESSEUR 1 Mise en page du programme 2 Lesfiehiers dentete Mennirnir ee a E E E E MA ANR E ERE eA ER 3 Les macro de OE a re AM se ME aae a a aar a E Aa aa eaaa ee nana EE LA 3 1 Ma cro d finitions constantes ssl hit idnentne nains en ar e ta ae KE E raan a eiea eteina aE 32 Macro d finitions param trables nosan nnne ae ent A NE A ni RE EE 3 3 M canismes de substitution avanc s if Cr dtion d unechaine de caract resiess nn Men te E Re Re Mn ee se Concal naliohissrnemhrntentimardtaennenn eds OT E nr EEE E detre ile Red finition d un identificateurs s ie snsiiatarnteaunrmnnenadnenanunindosedtintenenaimnn latest 3 4 Compilation conditionnelle satsmrmsstrshnhesnmnnaRss sentis metre nt tr ae au pe Porn ll Inclusion conditionnelle 3 5 Remarques sur la gestion des macro d finitions P Options a l compilation ienien aiae edo armee Ea a be ete E EEE EE E nains Un A CLARINVAL Le langage C iii 4 Suppl ment La d monstration des programmes assert ss 6 8 XEFCIC S Anders las amer tan sale crises ne en remet ane nd nace les ete need eue gene otre E suite 6 10 CHAPITRE 7 VARIABLES ET FONCTIONS aroen a T r nm E nt re tirer 7 1 1 Attributs d une variable 1 1 Port e et visibilit Port e locale ou g
68. NULL si le sous arbre n existe pas creer pda mot ACTION pour le cas non trouv else chercher et ins rer le mot int test strcmp mot pda gt adr gt texte if test 0 ACTION pour le cas trouv if test lt 0 localiser amp pda gt adr gt fils gche mot if test gt 0 localiser amp pda gt adr gt fils drte mot equilibrer pda r quilibrer et d terminer la hauteur define max a b a gt b a b maximum de a b PRIVATE void pivoter Arbre pda Indice sens rotation dans le sens indiqu du sous arbre de racine pda gt adr PRIVATE void equilibrer Arbre pda r quilibrer par rotation if pda gt adr gt fils gche haut pda gt adr gt fils drte haut gt 1 pivoter pda drte else if pda gt adr gt fils drte haut pda gt adr gt fils gche haut gt 1 pivoter pda gche calculer la hauteur de l arbre pda gt haut 1 max pda gt adr gt fils gche haut pda gt adr gt fils drte haut A CLARINVAL Le langage C 12 6 PRIVATE void pivoter Arbre pda Indice sens rotation dans le sens indiqu exemple illustr Indice contresens gche Noeud pn pda Noeud rn rotation droite drte sens gt adr pointeur gt if pn gt fils contresens adr gt fils gt pn gt fils FIEX pd
69. Seia a Erreur fr quente confusion des op rateurs d affectation et d galit 5 2 Affectation relative 22e set mt nn en et nn tot en re Re EEA A EAS tin 5 3 Incr mentation d cr mentation saer sre ire in M MR AR er de RME 6 Les appels d fonchions siiani nine nie tel Mint nent AR ir ak 6 1 Passation des param tres la fonction appel e 6 2 Renvoi du r sultat la fonction appelante 7 Les expressions algorithmiques esne 7 1 Expression conditionnelle op rateur 7 7 24 Expression s quentielle op rateur y isasssesenenssennmannnenmnennsienennenestsnsienentitentese 8 Effets ide bord mine e e E nt tn dt tt M ln ie rl A CLARINVAL Le langage C ii 9 Suppl ment Quelques fonctions standards 4 23 9 1 Fonctions math matiques ssl nette tienne tir es Liste des fonctions fichier lt math h gt ses Gestion des erreurs fichier lt errno h gt Liste des fonctions fichier lt stdib ha issus nas T E EEEE dress 9 2 Gestion des caract res fichier lt cfype h gt ss 4 25 XOFCICES ENS EEE A E AEE EA N EA ANR EU ne et ln Se nee UN nr jeu e ms 4 26 CHAPITRE 5 LE CONTR LE DE S QUENCE ssie isis n csie o eeina EERE ES RENAK i airi a E Eii 5 1 1 Introduction 1 1 Concepts a EXDrOSSIONS ren ie T a EN A E EA EE EEEE EOE EEE E E a n aE 5 1 INSUCHONS RAR en AE E E e e e e E 5 1 CONS UCLLONS EAEE E OE D NE UE E I E aA
70. Troisi me m thode si le fichier puiss c a t cr par un autre programmeur ce dernier peut avoir crit lui m me le prototype utiliser et l avoir stock dans un fichier d en t te nnnnnn h h header puiss h float puiss float n int p prototype test c include puiss h fichier des d clarations n cessaires l utilisation de puiss include lt stdio h gt fichier des d clarations lt standards gt n cessaires l utilisation des fonct standard input output void main void test de la fonction puiss float r int e printf n introduisez la racine r elle scanf g e amp r printf n introduisez l exposant entier scanf d amp e printf n 3g exp d g n r e puissi r e Cr ation du programme ex cutable Pour devenir un programme ex cutable le programme r dig qu on appelle source doit subir une s rie de transformations op r es par des programmes utilitaires pr existants Un programme diteur de textes est utilis pour enregistrer le texte source sur un support magn tique disque ou disquette Le compilateur est la pi ce centrale Ce programme e analyse un fichier source e cr e un fichier objet e produit une liste de contr le diagnostic des erreurs etc Le pr processeur pr pare le texte donner au compilateur Ce programme e supprime les commentaires e inclut le
71. admettant comme codes de formats que d 9 s include lt stdarg h gt void printf char format union int entier double reel char chaine param zone de r ception du param tre courant va_list pt _arg pointeur d argument va_ start pt _arg format initialisation du ptr for format format fe format 0 pour chaque caract re de la cha ne fo if format si pas code de format putchar format imprimer le caract else si code de format switch format selon le caract suivant case d param entier va_arg pt_arg int traiter le param tre entier break param reel va_arg pt_arg double traiter le param tre r el break param chaine va_arg pt_arg char traiter le param tre adresse de cha ne break default putchar format imprimer le caract va_end pt_arg cl ture return 80 Inspir d un exemple de l ouvrage de Kernighan amp Ritchie A CLARINVAL Le langage C 11 17 Macro d finitions fichier lt stdarg h gt Si la pile des param tres est constitu e de la mani re illustr e plus haut les macro d finitions peuvent tre les suivantes stdarg h define va list void define va start pt arg paraml pt_arg amp paraml 1 define va arg pt arg type type pt_arg define va end pt arg 3 3 Para
72. adr de la t te de liste free ancien lib rer l espace de l l mt extrait return 1 e Application ventes c include lt stdio h gt type des donn es Releve typedef struct char nom vendeur 21 long int chiffre vente fonctions de gestion de la liste m moris e ve releve int inserer Releve releve extrair Rel extraire renvoie EOF quand A CLARINVAL Le langage C la liste est vide 11 10 void main void Releve releve relev en cours de traitement PHASE 1 long int total ventes 0 while scanf s ld amp releve nom vendeur amp releve chiffre vente EOF total ventes releve chiffre vente inserer amp releve m moriser PHASE 2 while extraire amp releve EOF relire int pct releve chiffre_vente 100 0 total ventes 0 5 gt int arrondi printf S20s 71d 524 3 n releve nom vendeur releve chiffre vente pct Liste cha n e selon une structure de pile Une pile stack en anglais est une structure fort semblable une file Elle s en distingue par la logique d acc s dernier entr premier sorti LIFO last in first out l insertion et l extraction d un l ment se font toujours au sommet de la pile Un seul pointeur d ancrage est n
73. amp 1 2 3 4 5 6 A CLARINVAL Le langage C 9 2 2 Pointeurs et variables composites 2 1 Variables composites et adressage indirect e On peut prendre l adresse d une variable composite structure ou union ou l adresse d un membre et la placer dans un pointeur L adresse d un membre est obtenue par une expression de la forme amp var m L op rateur tant davantage prioritaire que amp amp var m lt amp var m Exemples d claration de types composites struct date char jj mm aa char entier de petite taille struct tete commande unsigned int no commande struct date date reception unsigned int no client struct ligne commande unsigned int no commande unsigned int no article signed int qte commande union bon commande struct tete commande tete struct ligne commande ligne d claration d une variable composite union bon commande en cours d claration initialisation de pointeurs union bon commande pt bon amp en cours struct tete commande pt tete amp en cours tete struct ligne commande pt ligne amp en cours ligne struct date pt date amp en cours tete date reception unsigned int pt article amp en cours ligne no article tt d d clarations quivalentes d claration de types composites typedef struct char jj mm aa Date char entier de petite t
74. appel r cursif les variables du niveau pr c dent ont conserv leur valeur Si cette valeur ne doit plus tre utilis e il est inutile d empiler plusieurs exemplaires de cette variable tous les niveaux d appel peuvent utiliser le m me exemplaire Pour garantir la cr ation d un exemplaire unique de la variable il suffit de la d clarer static ou globale Ceci est particuli rement envisager dans le cas d une variable structure ou tableau de taille relativement grande Exemple En ajoutant deux mots else au programme pr c dent on emp che la r utilisation des va riables pn et test apr s le retour du premier appel r cursif ces variables peuvent d s lors tre d clar es static A CLARINVAL Le langage C 12 8 arbre2 c extrait modifi void localiser Noeud ppn char mot chercher et ins rer un noeud ds le ss arbre d adr ppn if ppn NULL creer ppn mot ACTION si non trouv else static Noeud pn static int test pn ppn supprimer une indirection test strcmp mot pn gt texte if test 0 ACTION pour le cas trouv else if test lt 0 localiser spn gt fils g mot r c gauche else if test gt 0 localiser spn gt fils d mot r c droite 2 3 Elimination de la r cursivit R cursivit terminale d g n r e Rappel du chapitre 5 Lorsque comme dans l exemple ci dessus l app
75. cessaire qui rep re tout moment ce sommet de la pile Quant aux l ments de la liste ils sont cha n s dans l ordre inverse de celui utilis dans une file chaque l ment sauf le premier pointe vers le pr c dent som met l k o t 2 se ae 5 Les fonctions d insertion et extraction dans une pile sont connues respectivement sous les noms anglais de push et pop e Usage d une pile La relecture d une pile rend les l ments dans l ordre inverse de celui de leur introduction Tout algorithme r cursif se sert d une pile implicite s il s agit de la pile des param tres d une fonction appel e r cursivement ou explicitement d clar e et g r e par le programme 74 73 Le terme pile voque l analogie de cette logique d acc s avec le mode d acc s une pile d assiettes ou une pile de linge dans une armoire Le concept de pile caract rise le mode d acc s aux donn es pas leur repr sentation mat rielle en effet si l on connaissait la hauteur maximale de la pile on pourrait la mat rialiser dans un tableau 74 Cf chapitre 12 A CLARINVAL Le langage C 11 11 3 Pointeurs et fonctions 3 1 Pointeurs de fonctions Revenons la fonction trier applicable un tableau de pointeurs Dans l exemple donn plus haut les pointeurs ordonner rep rent des cha nes de caract res la comparai son des l ments se fait donc en appelant la fonction standard stremp Si chaque pointeur du tableau
76. char s ASCII string to long int double atof const char s X ASCII string to floating pt A l int rieur de la cha ne de caract res examin e le nombre doit tre crit dans un des formats habituels tels que ceux que reconnaissent les fonctions de la famille scanf Les fonctions de conversion se comportent de la m me mani re que scan avancement au del des caract res d espacement figurant en t te du texte conversion arr t la rencontre du premier caract re non convertible 62 En cas d erreur la variable globale errno d finie dans le fichier d en t te lt errno h gt contient la valeur ERANGE range error 62 En r alit les fonctions de la famille scanf utilisent elles m mes les fonctions de conversion A CLARINVAL Le langage C 9 25 6 5 Interaction avec le langage de commande de l ordinateur fichier lt stdlib h gt Divers moyens existent pour changer de l information entre le langage de commande de l ordinateur et les programmes dont il g re l ex cution e La fonction main d un programme peut recevoir des param tres de la demande d ex cution de ce pro gramme Voir chapitre 11 1 2 e La fonction void exit int code est appel e pour terminer l ex cution d un programme et ren voyer au langage de commande un code num rique d crivant la mani re dont le programme s est d roul Voir chapitre 5 5 e La fonction system const char commande demande l
77. comme scanff doit modifier la valeur des param tres effectifs de la fonction appelante elle doit ranger les valeurs re ues du clavier dans les variables de la fonction appelante On doit donc lui passer sous la forme de valeurs les adresses de ces variables On emploie pour cela l op rateur amp l expression amp var transforme en valeur l adresse de la variable de nom var main scanf nom adr valeur valeur 16 EE 8 ET 19 On appelle pointeur une donn e qui en guise de valeur contient l adresse d une autre Les param tres formels de la fonction scanf sont des pointeurs 4 4 Etape 2 3 organiser les biblioth ques de programmes R partition du texte en un ou plusieurs fichiers Le texte d un programme peut tre r parti dans un ou plusieurs fichiers nnnnnn c A CLARINVAL Le langage C 1 12 R partition en un seul fichier puiss c float puiss float n int p lever n r el la puissance p entier sign float resultat 1 0 for p gt 0 p resultat n for p lt 0 p resultat n return resultat void main void test de la fonction puiss float r int e printf n introduisez la racine r elle scanf g amp r printf n introduisez l exposant entier scanf d ee printf n g exp d g n r e puissi r e REGLE IMPORTANTE En principe toute fonction doit tre d clar e avant d tre appel
78. contenu de la m moire tampon en appelant la fonction fflush ou une fonction de positionnement dans le fichier On v rifiera ais ment que toutes les fonctions d acc s d finies ci dessus dans le fichier rel io c com mencent par effectuer un positionnement dans le fichier en appelant fseek 71 On peut galement appeler la fonction fflush pour passer outre du contenu restant dans le tampon d un fichier en lecture Par exemple ayant demand d introduire au clavier une r ponse d un caract re on doit apr s avoir lu cette r ponse passer outre des ventuels caract res exc dentaires et du terminateur n de fin de r ponse cela peut se faire en programmant scanf c g amp reponse fflush stdin Le langage C page 10 14 Exercices 1 R crire l exercice d impression d tiquettes d adresses propos au chapitre 8 en rempla ant le ta bleau des fiches signal tiques par un fichier Il y a lieu pour cela de r diger deux programmes le premier cr e le fichier signal tique le second dite les tiquettes 2 Ecrire une fonction f faille nom fichier donnant la taille du fichier nomm ce fichier n tant pas ouvert Etablir une convention coh rente pour signaler le cas o le fichier d sign est introuvable 3 Ecrire le fichier rel_io h contenant toutes les d clarations n cessaires aux programmes utilisateurs des fonctions du syst me rel io c 4 Pour tester les fonctions du syst me rel_io c r alise
79. d cimal suite de chiffres 0 9 ne commen ant pas par 0 z ro e nombre octal suite de chiffres 0 7 commen ant par 0 z ro e nombre hexad cimal suite de chiffres 0 9 et A F commen ant par 0X z ro X Par d faut le type d une constante enti re est parmi les suivants le premier qui puisse contenir sa valeur signed int signed long int unsigned long int Si les chiffres sont imm diatement suivis de la lettre U le type est unsigned enfin le suffixe L force le type long int exemples toutes les constantes ci dessous expriment la m me valeur d cimal octal hexad cimal type 159 0237 Ox9F signed int 159U 0237u 0x9Fu unsigned int 159L 02371 OX9fL signed long int 159UL 0237ul 0x9Ful unsigned long int 2 Une constante r elle prend la forme suivante e mantisse E signe exposant la mantisse est obligatoire l exposant est facultatif et peut tre sign par ou e la mantisse prend la forme suivante partie enti re partie d cimale la constante ne peut pas tre form e de la seule partie enti re de la mantisse e chacune des trois parties enti re d cimale exposant est une suite de chiffres d cimaux soit m la mantisse l exposant la valeur de la constante est mx 10 3 Par d faut une constante r elle est de type double Le suffixe F ou L indique respectivement qu elle est de type float ou long double exemples toutes les constantes ci dessous expri
80. d crit dans un chapitre ult rieur cette fonction ne re oit pas de param tres O qu elle soit r dig e elle est la premi re s ex cuter au d marrage du programme La fin d ex cution de la fonction main provoque la terminaison de l ex cution du programme complet Pr sentation des fonctions standards de dialogue avec l op rateur Description partielle La fonction printf print with format affiche un texte l cran la fonction scanf scan with format lit la r ponse introduite au clavier Ces deux fonctions re oivent un ou plusieurs param tres le premier est une cha ne de caract res entre de contr le qui d crit le format du texte affich ou lu les param tres sui vants contiennent les valeurs v hicul es par l change printf print with format e param tres cha ne de contr le puis de 0 n valeurs constantes variables fonctions expressions e retour n ant La cha ne de contr le contient du texte des commandes de mise en page n et des codes d finissant le format sous lequel doivent tre affich es les valeurs des param tres suivants 5 Lorsqu on cite le nom d une fonction on fait habituellement suivre ce nom d une paire de parenth ses Cette convention permet de distinguer les noms de fonctions et de variables A CLARINVAL Le langage C 1 10 scanf scan with format e param tres cha ne de contr le puis de 1 n valeurs d adresses syntaxe amp
81. dans la d claration de son type L int r t de telles d clarations est donc purement documentaire dire qu une varia ble est du type valeur logique ou du type code sexe est plus parlant que de la d clarer simplement du type int Fonctions On peut d clarer des fonctions dont le r sultat appartient un type num r Exemple enum valeur logique test date struct date test de la validit syntaxique d une date e Constantes Toute valeur explicitement ou implicitement mentionn e dans une num ration est une constante appartenant au type d clar Cette constante peut tre d sign e par le nom qui lui est attach 44 A l ex cution il faudrait apr s toute modification de la variable comparer sa valeur chacune des valeurs autoris es par son type Ceci serait tr s p nalisant par rapport au temps d ex cution A CLARINVAL Le langage C 8 4 Exemples tant donn es les d clarations ci dessus on peut programmer if sexe enfant FEMININ printf fille option OUI resultat VRAI resultat inversion logique 0 gt 1 1 gt 0 LA if aujourdhui gt DIMANCHE printf jour ouvrable Port e des d clarations Lorsqu on d signe une constante par son nom cette d signation doit tre non ambigu Un nom de constante ne peut donc appara tre qu une seule fois parmi l ensemble des noms d finis par toutes les d clarations visibles un endroit du programme
82. de demande et r ception d une r ponse oui non fourni en exemple la page 5 11 de telle sorte qu il utilise la fonction reponse do while if Programmer une fonction calculant avec une pr cision e donn e par exemple 0 0001 la racine carr e positive d un nombre r el a strictement positif La solution est le premier rp de la suite r En 1 2 rn 1 a rn1 n gt 1 telque r rh lt La fonction doit appeler une autre fonction qui renvoie la valeur absolue d un nombre r el A CLARINVAL Le langage C 5 25 for if Programmer une seule fonction contenant la d claration d un vecteur de 20 entiers et ex cutant suc cessivement sur ce tableau les trois traitements suivants Garnir toutes les positions du vecteur en appelant la fonction standard rand de g n ration de nom bres pseudo al atoires Trier c est dire ordonner les l ments du tableau du plus petit au plus grand Utiliser l algo rithme du tri par s lection e s lectionner dans l intervalle t 07 1 19 le plus petit l ment et le permuter avec l l ment t 07 e s lectionner dans l intervalle 1 1 19 le plus petit l ment et le permuter avec l l ment f 1 e continuer de la m me mani re pour les intervalles 2 1 19 jusque 18 1 19 Afficher le r sultat sur deux colonnes la premi re colonne liste les nombres en ordre croissant la seconde colonne les liste en ordre d croissant
83. de deux sortes Promotion enti re Cette conversion qui a toujours lieu refl te le privil ge que le langage C accorde au type int Tout op rande d un type entier de taille plus courte que le type int est converti dans le type signed int signed char signed int unsigned char signed int signed short signed int unsigned short signed int si sizeof short lt sizeofi int mais unsigned short amp unsigned int si sizeof short sizeof int Conversion arithm tique Lorsqu un op rateur tel qu un op rateur arithm tique combine deux op randes il se produit une conversion dont le but est double repr senter les deux op randes dans le m me type 15 en vitant les pertes d informa tion Le principe est simple le type commun est celui des deux dont le domaine de valeurs est le plus tendu 15 En cela le langage C imite les langages assembleurs A CLARINVAL Le langage C 4 6 Domaines de valeurs long double double nsigned long signed long unsigned int Remarque Aucune conversion ne doit tre op r e d un type int un type long si ces deux types ont la m me taille ATTENTION Une conversion peut se produire d un type entier sign au type non sign de m me taille La norme du langage ne d finit pas quel est le r sultat de cette op ration pour le cas d une va leur de d part n gative elle ne dit donc pas qu on obtient la valeur absolue Rappe
84. de structure soit la m me qu une tiquette d num ration Toutes les tiquettes de types visibles un endroit du programme doivent tre dis tinctes 42 Si l on d clare une tiquette de type celle ci peut tre employ e dans des d clarations ult rieures de varia bles ou de fonctions Exemple struct date short int jour mois annee date echeance date paiement struct date date du jour void 43 Une autre raison d viter cette mani re de faire tient en ceci Parce que le langage C est un sur ensemble du langage C un programme C peut tre trait par un compilateur C Or en C une tiquette de type est un nom de type que l on peut employer seul et qui ne peut d s lors d signer en m me temps une variable Sur ce point il y a incompatibilit entre les deux langages A CLARINVAL Le langage C 8 2 NOTE R f rence un type construit d fini ult rieurement Dans une d claration qui ne doit pas conna tre la taille de l espace de m moire allouer il est permis de r f rencer un type construit qui ne sera d fini par sa liste de composition que dans une d claration ult rieure Exemple d claration d une fonction calculant une date d ch ance la d claration du type du r sultat anticipe sur la d claration du type d un param tre struct date echeance struct date short jour mois annee date depart short delai 1 2 Types codifi s les num rations Un type num r est un
85. de types de donn es On verra que sur le base de ces types pr d finis le programmeur peut en construire d autres Les types de donn es pr d finis sont les suivants signed char character 1 octet 1 octet 8 bits 128 127 signed short int 2 octets 2 octets 16 bits 32768 32 767 signed int integer 1 registre adresse 2 ou 4 octets signed long int 4 octets 4 octets 32 bits 2 147 483 648 2 147 483 647 Le qualificatif signed peut tre omis taille standard taille habituelle valeurs habituelles unsigned char 1 octet 1 octet 8 bits maT 255 unsigned short int 2 octets 2 octets 16 bits 65 535 unsigned int 1 registre adresse 2 ou 4 octets unsigned long int 4 octets 4 octets 32 bits 4294 967 295 taille standard taille habituelle valeurs habituelles float simple pr cision 4 octets 32 bits mantisse 6 chiffres significatifs double double pr cision 8 octets 64 bits mantisse 12 chiffres significatifs long double pr cision tendue 16 octets 128 bits REMARQUES Les failles standards indiqu es ci dessus sont les tailles minimales impos es par la norme ANSI C Dans tous les cas les relations suivantes doivent tre respect es par les compilateurs e taille char lt taille short int lt taille int lt taille long int e taille float lt taille double lt taille long double La taille du type int n est pas uniforme elle varie d un ordinateur l autre C
86. demander quelle op ration doit tre ex cut e ex cuter cette op ration titre de v rification afficher par la fonction montrer la structure de l arbre mis jour Suppression d un l ment La principale innovation r side dans l op ration de suppression d un noeud de l arbre Cette op ration comporte la destruction du noeud lib ration de l espace occup en m moire et la modification de liens c est dire de pointeurs l int rieur de la structure g n rale Par rapport la modification des liens trois cas sont distinguer le noeud supprimer n a pas de fils dans le noeud p re on doit annuler le pointeur vers le fils supprim le noeud supprimer poss de un fils on doit rattacher le petit fils directement son grand p re du bon c t A CLARINVAL Le langage C 12 24 le noeud supprimer poss de deux fils on doit le remplacer par le descendant de rang imm diatement inf rieur ou imm diatement sup rieur c est dire au choix par l l ment le plus grand de son sous arbre gauche ou par l l ment le plus petit de son sous arbre droit Bien entendu l quilibre de l arbre doit tre pr serv La question du r quilibrage apr s modifica tion doit donc tre attentivement tudi e Suggestion il y a peut tre int r t d composer l op ration de suppression en un certain nombre de sous fonctions d truire d tacher ratta
87. doit tre d clar comme un pointeur vers une fonction int comparer void a void b comparer est un pointeur vers une fonction qui rend en r sultat un entier int Les parenth ses autour de comparer sont obligatoires car la d claration suivante a une tout autre signi fication int comparer void a void b comparer est une fonction et non pas un pointeur qui rend en r sultat un pointeur int vers un entier 75 On peut faire l analogie avec le nom d un tableau lequel d signe une constante contenant l adresse de ce tableau A CLARINVAL Le langage C 11 12 En effet l op rateur d indirection tant moins prioritaire que l op rateur d appel de fonction int comparer void a void b amp int comparer void a void b trier c void trier void itemi int nbre items int comparer void a void b comparer adresse de la f de comparaison int i j min indices for i 0 i lt nbre items 1 1 pour les intervalles O N 1 1 N 1 N 2 N 1 chercher l item minimum min ji for j i l j lt nbre itens tJ if comparer item j item min lt 0 min j if min i permuter les pointeurs d items i amp min void temp zone de manoeuvre temp item i item i item min item min temp Il est possible de d finir un tableau de pointeurs de fonctions Exemple au lieu de recevoir en par
88. donn es d crites par leurs formats et modifie en cons quence la position courante E int fprintf FILE ptr fichier char format param tres pointeur du flot vis cha ne de caract res d crivant les formats d affichage suivie de 0 n valeurs afficher retour nombre de caract res crits La fonction printf est quivalente fprintf stdout 5 Fonctions d acc s un fichier binaire 5 1 Lecture Ecriture d objets binaires fread fwrite Remarque Un fichier au contenu binaire doit avoir t cr par un programme avant de pouvoir tre lu ou consult e La fonction fwrite crit dans un fichier binaire n objets pris dans un tableau Ces objets habituellement des structures sont crits l un la suite de l autre partir de la position courante La position courante est modifi e en cons quence unsigned int fwrite void ptr unsigned int taille unsigned int nbre FILE ptr fichier param tres adresse du tableau d objets ou de l objet unique crire taille de chaque occurrence d objet l ment du tableau nombre d l ments successifs extraire du tableau pointeur du flot vis retour nombre d objets crits avec succ s en cas d erreur ce nombre est inf rieur au nombre pass en param tre Le langage C page 10 7 Exemple Par un dialogue au terminal on a introduit en m moire centrale les informations d un bon de commande
89. dont la dimension n est connue qu au moment d ex cuter le programme Ou pour traiter successivement des tableaux de dimensions variables La solution consiste acqu rir dynamiquement un espace contigu de m moire d une taille suffisante Cet es pace est allou dans une r serve de m moire appel e tas en fran ais heap en anglais S Pour cela on invoque la fonction standard malloc memory allocation en lui communiquant la taille de l espace demand la fonction retourne dans un pointeur l adresse de d but de la zone allou e On peut appeler malloc successivement pour obtenir l espace n cessaire un tableau de caract res puis l espace n cessaire une variable structur e puis l espace n cessaire un tableau de nombres r els etc Le type d objet rep r par le pointeur de retour diff re d un appel l autre et est inconnu de la fonction malloc Celle ci retourne donc un pointeur g n rique c est dire rep rant un objet de type quelconque Un pointeur g n rique est d clar comme pointant sur le pseudo type void vide void p 56 Exemple void malloc unsigned int size prototype de malloc Utilisation Un pointeur g n rique peut contenir l adresse d un objet de n importe quel type La taille de cet objet tant ind termin e le d placement unitaire n est pas d fini pour un tel pointeur Il s ensuit qu on ne peut pas ajouter ou soustraire un d placement d adresse un pointeur
90. du mois Exemple 4 10 1993 4 octobre 1993 Utiliser un tableau des noms de mois Ecrire ce programme en une seule fonction A CLARINVAL Le langage C 2 19 D clarer un tableau de 12 l ments total des ventes du mois Garnir toutes les positions de ce tableau en appelant la fonction standard rand qui chaque fois qu elle est appel e renvoie un nombre pseudo al atoire Cette fonction est d crite dans le fichier d en t te lt stdlib h gt de la mani re suivante int rand void Calculer la moyenne des ventes mensuelles ATTENTION quel doit tre le type des variables n cessaires ce calcul Apr s cela afficher sur 12 lignes de l cran ventes du mois mm nnnnn s mm est le num ro du mois de 1 12 s est le caract re si nnnnn d passe la moyenne mensuelle ou le caract re si nnnnn est inf rieur cette moyenne Ecrire ce programme en une seule fonction 8 D clarer et initialiser le tableau illustr ci dessous 0 1 2 0 Madame Mademoiselle 1 Mevrouw 9 Un service hospitalier comporte 21 lits Chaque semaine il dite un tableau r capitulatif des temp ratures relev es pour l ensemble des lits tous les jours de la semaine matin et soir Une observation manquante est remplac e par 0 D clarer ce tableau quel doit tre le type des donn es et crire les instructions qui l initialisent enti rement z ro A CLARINVAL Le langage C 2 20 A CLARINVAL Le
91. e ou son absence dicte les conversions de type subies par les param tres e La valeur d un param tre effectif est forc e au type du param tre formel correspondant si le prototype de la fonction appel e mentionne le type de ce param tre formel ex prototype float puiss float r int e appel 4a PUISSA 2r gt puiss 2 0F 3 24 Plus pr cis ment la d claration d une fonction ou son rappel doit tre visible tout endroit du pro gramme o cette fonction est appel e Sur le concept de visibilit cf chapitre 7 A CLARINVAL Le langage C 4 19 e Pour les autres param tres la conversion de type est implicite un param tre effectif d un type entier subit la promotion enti re un param tre effectif de type float est converti dans le type double un param tre effectif d un autre type ne subit aucune conversion quel que soit le type attendu par la fonction appel e 6 2 Renvoi du r sultat la fonction appelante Le r sultat d une fonction est renvoy la fonction appelante par l instruction suivante y pp p return expression e Si la d claration de la fonction indique le type du r sultat la valeur de l expression est convertie dans ce type ex long int tronque float n return n troncature enti re d un nombre r el r sultat de taille long int e Sinon par d faut le r sultat est converti dans le type int 7 Les expressions algorithmiques
92. ex cution d une commande externe apr s quoi le programme appelant se poursuit ex include lt stdlib h gt include lt stdio h gt char repertoire 81 char commande 121 printf dans quel r pertoire se trouvent vos fichiers scanf repertoire sprintf commande cd s repertoire syst me MS DOS system commande change default directory freopen donnees dat r stdin choix fichier d entr e pee ts poursuite du programme e La plupart des langages de commande permettent de d finir des variables d environnement contenant du texte quelconque La fonction char getenv const char nom var rend un pointeur sur la cha ne de caract res que forme le texte contenu dans la variable dont le nom est donn en param tre si au cune variable d environnement n est d finie sous ce nom la fonction rend l adresse NULL ex include lt stdlib h gt char repertoire temporaire getenv temp RER syst me MS DOS la variable temp contient le nom du r pertoire des fichiers temporaires 6 6 Gestion du calendrier et de l horloge fichier lt time h gt Le fichier d en t te standard lt time h gt d finit des types de donn es et des fonctions pour la manipulation des dates et heures a Types de donn es typedef long int time t secondes coul es depuis un instant d origine conventionnel A CLARINVAL Le langage C 9 26
93. fils Les algorithmes utilis s pour l inser tion d un noeud dans un sous arbre doivent ajuster dans le noeud p re les deux l ments composant la descrip tion du sous arbre modifi 81 Initiales des auteurs sovi tiques ADELSON VELSKII amp LANDIS qui ont d crit cette structure en 1962 A CLARINVAL Le langage C 12 5 arbreAVL c include lt stdlib h gt calloc include lt string h gt stremp strcpy define PRIVATE static fonctions appel es par localiser typedef struct struct noeud adr short int haut Arbre REM la d finition du descripteur d arbre fait mention de la structure noeud d finie ult rieurement aA typedef struct noeud Arbre fils 2 char texte 15 1 Noeud typedef enum gche 0 drte 1 Indice N B pointeur pda gt descripteur modifiable de sous arbre pointeur modifiable pn gt noeud n PRIVATE void creer Arbre pda char mot cr er un noeud et placer sa description dans le noeud p re pda gt adr calloc 1 sizeof Noeud obtenir m moire mise 0 pda gt haut 1 strcpy pda gt adr gt texte mot ACTION cr er le texte PRIVATE void equilibrer Arbre pda void localiser Arbre pda char mot chercher et ins rer un mot ds le ss arbre d adr pda gt adr if pda gt adr
94. flot stdin int getchar void param tre n ant retour le caract re lu EOF en cas d incident ou de fin de fichier La fonction putchar crit un caract re dans le flot stdout int putchar int caractere param tre le caract re crire retour le caract re crit EOF en cas d incident Remarque Pour les fonctions getchar et putchar le caract re n de fin de ligne n a pas d interpr tation particuli re il est trait comme n importe quel autre caract re Ces fonctions placent le caract re transf r dans une variable de type int donc de taille sup rieure Ceci est n cessaire pour pouvoir recevoir un signal EOF qui ne puisse pas tre confondu avec un caract re Illustration caract re 255 binaire 00000000 11111111 hexad cimal OO FF signal EOF 1 binaire 11111111 111111111 hexad cimal FF FF Il est vident que les programmes doivent tenir compte de la taille de la donn e en retour Exemple unsigned char caract int n lecture n getchar if n EOF caract n criture n putchar caract le param tre est converti automatiquement A CLARINVAL Le langage C 2 2 Entr e Sortie d une ligne gets puts La fonction gets lit la ligne suivante dans le flot stdin char gets char lignel l param tre un tableau de caract res qui recevra le texte de la ligne la ligne peut tre vide de tout caract re retour
95. g n rique Par extension un pointeur g n rique ne peut pas non plus servir un adressage indirect sans d placement d placement 0 Si on a d clar void p gen on ne peut pas crire les expressions p_gen p_ gen i p_gen l p_gen Pour que l adresse qu il contient soit utilisable on doit convertir le pointeur g n rique en pointeur sur un type d objet d termin et calculer le d placement d adresse par rapport cet autre pointeur La conversion d un pointeur ne modifie pas l adresse qu il contient elle a pour seul effet de d fi nir le d placement unitaire applicable Une conversion de type impliquant un pointeur g n rique se fait par n importe quel m canisme de conversion forc e e op rateur de coercition void p float p g n rique gt sur float 55 Cf chapitre 7 Organisation de la m moire allou e un programme 56 ATTENTION Ne pas confondre void f1 et void f2 fl renvoie un pointeur g n rique f20 ne rend pas de r sultat 57 Cf chapitre 4 A CLARINVAL Le langage C 9 11 e expression d affectation void p long int p lint p_lint p g n rique gt sur long int affectation en param tre d une fonction affectation au r sultat d une fonction par return Un test d galit ou peut comparer un pointeur g n rique et tout autre pointeur 4 2 Pointeurs nuls Il peut tre n cessaire un programme recourant l allocatio
96. id de fonction void exec nom char pt nom valider le nom de f int f chercher f pt nom if f lt 0 err fonction inconnue if err action return empiler l indice f de la fonction et la hauteur v en r servant l emplact du r sultat if o lt MAX OPER amp amp v lt MAX VAL operl o i fonct f operl o i param vtt 1s rr d bordement de la pile des op rateurs A CLARINVAL Le langage C 12 17 action ex cuter la fonction en sommet de pile void exec fonct void pt if err action return int f oper o i fonct de la descr de fonction int p operl o i param niveau de base dans vall int nb params v p 1 nbre de param effectifs v p 1 nouvelle hauteur de val if nb params gt fonct f minp amp amp fonct f maxp lt 0 nb params lt fonct f maxp ex cuter err action fonct fl action nb params amp val p l else err nombre de param tres invalide TABLE ET EXECUTION DES FONCTIONS DE CALCUL rs include lt stdio h gt include calc h MACRO INSTR DE TRAITEMENT DES ERREURS op ration r ussie define OK return VRAI op ration impossible signale l incident defin rr texte return msg texte FAUX ROUTINES DE CA
97. important de distinguer la valeur contenu de la case et l adresse num ro de case d une variable ident a n X d 15 16 17 valeur CALE Une constante est une case de m moire au contenu non modifiable pendant l ex cution du pro gramme Dans les langages de programmation une variable est toujours d sign e par son identificateur tandis que le plus souvent on indique directement la valeur d une constante On crira par exemple i L 1 Il existe galement des programmes utilisant des m thodes heuristiques plut t qu algorithmiques Heuristi que m thode de recherche d une solution incertaine Exemples d applications reconnaissance des formes reconnaissance de la voix de l criture manuscrite A CLARINVAL Le langage C 1 1 Op ration fondamentale des ordinateurs l affectation consiste inscrire une valeur dans une varia ble Nous noncerons une op ration d affectation sous la forme variable lt valeur Par exemple i lt i exprime le fait d ajouter 1 la valeur actuelle de la variable i et de r inscrire dans i la nou velle valeur Cet nonc comporte e une expression de droite constante variable expression arithm tique fournissant une valeur e une expression de gauche donnant l adresse d une variable cas le plus simple un nom de varia ble e un op rateur d affectation ici le symbole lt signifiant inscrire dans la variable d sign e par l expression de gauche la
98. int nbre elts tableau tableau de dimension ind termin e nbre elts dimension du tableau 7 2 Tableaux plusieurs dimensions Il est possible de d clarer un tableau plusieurs dimensions On peut ainsi d crire une matrice rectangulaire un tableau de coordonn es ou une page de papier comme tant chacun un tableau de lignes et chaque ligne un tableau de colonnes Synth tiquement il s agit l de tableaux deux dimensions Un tableau peut avoir davantage de dimensions mais g n ralement pas plus de trois pages lignes colonnes A CLARINVAL Le langage C 2 14 La syntaxe de d claration d un tableau plusieurs dimensions et la syntaxe de d signation d un l ment d un tel tableau sont analogues le nom identificateur est suivi d autant de paires de crochets que le tableau poss de de dimensions Les paires de crochets suivent l ordre hi rarchique pages lignes colonnes Exemple d claration d un cran de 25 lignes x 80 colonnes char ecran 25 80 d claration des indices int ligne de 0 24 int colonne de 0 79 position d un caract re sur l cran ecran ligne colonne position d une ligne sur l cran ecran ligne Le parcours d un tableau utilise autant de boucles for embo t es que le tableau poss de de dimensions 13 Exemple constitution de la table de multiplication short int mult 10 10 tableau 10x10 short int i short int j indi
99. intuitive 0 1 1l 1x1 1x0 2 2x1 2xl 3 3x2x1 3x2 4 4x3x2x1 4x3 A CLARINVAL Le langage C 1 19 A CLARINVAL Le langage C 1 20 Chapitre 2 Les valeurs 1 Introduction principes de repr sentation de l information 1 1 Le syst me de num ration binaire L ordinateur manipule des repr sentations lectro magn tiques de l information Ces repr sentations utilisent en guise d quivalents des chiffres binaires 0 et 1 les deux tats physiques de mat riaux qualifi s de bi stables Un chiffre binaire a re u le nom de bit Blnary digIT en anglais Ces chiffres sont group s en mots de diff rentes tailles Ces groupements de bits forment des nombres en base 2 ou nombres binaires constitu s selon les m mes principes que ceux du syst me de num ration d ci male en base 10 soit b le nombre de chiffres signes graphiques disponibles symbolisant les valeurs 0 b 1 e soit un groupe de 7 chiffres dont de droite gauche les positions sont num rot es de O n 1 le chiffre c la position p repr sente la valeur x bP on dit que bP est le poids de la position p les positions de droite ont des poids faibles et les positions de gauche des poids forts la valeur du nombre gale la somme des valeurs repr sent es par les diff rents chiffres e sur N positions peuvent tre cod s b nombres dont les valeurs s chelonnent de 0 b 1 Exemple 1001 0910 1
100. la valeur de l objet dont l adresse est p p 1 d signe dans un tableau l l ment qui suit l l ment d adresse p Si l on donne comme param tre effectif un appel de fonction l identificateur d un tableau sans indice on passe comme param tre l adresse de ce tableau Cette adresse est copi e dans le param tre formel corres pondant de la fonction appel e A CLARINVAL Le langage C 9 7 Ce param tre formel est donc un pointeur Il peut tre d clar comme un pointeur p ordinaire ou comme un tableau t de dimension ind termin e Exemple la fonction standard strcpy copie une cha ne de caract res src dans un tableau dest et renvoie l adresse du tableau dest elle pourrait notamment tre programm e d une des deux mani res suivantes char strcpy char ptr dest const char ptr srce char ptr dst ptr dest m moriser l adr de destination while ptr src pour tous les caract res 0 tr dest ptr src copier le caract re courant puis incr menter les pointeurs tr dest ptr src copier le terminateur turn ptr SE rendre l adresse de destination r dest const char src indice i 0 src i l i pour tous les caract res 0 i srcfil copier le caract re courant srclil copier le terminateur dest rendre l adresse de destination Lorsqu on cr e une fonction m
101. langage C 2 21 Chapitre 3 Les entr es et sorties standards 1 Les flots de donn es standards Un programme en ex cution communique avec son environnement au moyen de flots de donn es A tout programme le syst me d exploitation associe un flot standard d entr e et un flot standard de sortie assurant la communication avec l op rateur humain Dans la biblioth que C standard ces flots de donn es ont pour noms stdin et stdout il existe aussi un flot stderr des messages d erreur Ces flots sont d finis dans le fichier d en t te standard lt stdio h gt standard input output Par d faut sur les quipements actuels e le flot standard d entr e stdin est form des donn es introduites au clavier e le flot standard de sortie stdout est form des donn es affich es l cran Vu du programme un tel flot de donn es est un texte c est dire une suite de caract res d coup en lignes chaque occurrence du caract re n new line marque une fin de ligne Puisqu il s agit de communiquer avec un op rateur humain toutes les donn es sont repr sent es par des caract res visualisables donc pas de nombres en repr sentations binaires int ou float 2 Fonctions d acc s aux flots standards Le fichier d en t te lt stdio h gt d finit notamment des fonctions d acc s aux flots de donn es standards Ces fonctions font l objet d une double classification d apr s le flot vis les fonctio
102. lequel doivent tre affich es les valeurs 14 char pointeur vers un tableau de caract res cf chapitre 2 A CLARINVAL Le langage C 3 3 Une sp cification de format est compos e comme ceci pr sentation largeur pr cision taille conversion Les seules parties obligatoires sont le pr fixe et le code de conversion pr sentation cadrer gaucho pur qa drois TO J remplir gauche par des z ros plut t que par des espaces LH ci rarion du mode de conversion voir ci dessou pr cision nombre nombre de caract res afficher doit tre lt largeur selon le mode de conversion s nombre maximum de caract res affich s Sf e E nombre de chiffres apr s le point g G nombre de chiffres significatifs enti re nombre minimum de chiffres affich s compl t de z ros gauche taille de la valeur conversion integer nombre d cimal sign u unsigned nombre d cimal non sign nombre octal non sign pr fix par 0 si pr sentation x ou X nombre hexad cimal non sign avec chiffres a f pour x avec chiffres A F pour X pr fix par 0x ou 0X si pr sentation s string cha ne de caract res p_ pointeur adresse de m moire ts caract re n est pas un code de conversion 4 Les codes de pr sentation peuvent tre donn s dans un ordre quelconque b Si ce nombre est remplac par l indication est prise dans le param tre sui
103. liste de caract res isol s Exemple char nom fichier 15 x x gt 10 10 10 0 0 0 0 0 10 10 0 0 La dimension du tableau peut tre telle que le terminateur 0 n ait pas de place ceci est une commodit octroy e pour l initialisation d un tableau de caract res qui n est pas une cha ne de caract res Exemple char alphabet 26 ABCDEFGHIJKLMNOPORSTUVWXYZ A CLARINVAL Le langage C 2 17 e Ajustement automatique des dimensions Si la dimension du tableau n est pas mentionn e elle est ajust e pour contenir exactement les valeurs initiales fournies Exemples short int nbre jours dans mois 31 29 31 30 31 30 31 31 30 31 30 31 char nom fichier x x x dimension 4 dont 0 Cette tol rance n existe que pour la dimension la plus ext rieure c est dire pour la premi re paire de cro chets Exemple char jour 9 dimanche lundi mardi mercredi jeudi vendredi samedi Si la liste d initialisation d un tableau plusieurs dimensions indique les valeurs initiales de fous les l ments les accolades int rieures peuvent tre omises Exemples short int nbre jours dans mois 2 1 12 31 29 31 30 81 30 31 31 30 81 30 3L 31 28 31 30 31 30 31 31 30 31 30 31 lt short int nbre jours dans mois 2 12 31 29 31 30 31 30 31 31 30 31 30 31 31 28 31 30 31 30 31 31 30 31 30 31 mais char jour 7 19 LOL
104. occup e P CCOCP R CPP TONER T T T END S al le d placement compt en octets est un entier sign il doit tre gt 0 sil on prend SEEK SET pour origine ATTENTION En cas d erreur la fonction fseek renvoie une valeur non nulle qui n est pas n cessairement EOF Exemple Le programme ci dessous tablit une liste des commandes en cours en imprimant les nu m ros de commande et de client Puisque ces donn es font partie de l en t te de la commande le programme se contente de lire les en t tes et passe outre du corps de chaque commande include lt stdio h gt include commande h d f d une commande void main void FILE commandes liste Entete Commande entete liste fopen cdes lis w ouvrir la liste commandes fopen cdes dat rb ouvrir le fichier lire un en t te while fread amp entete sizeof Entete Commande 1 commandes feof commandes fin de fichier traiter l en t te lu fprintf liste commande 05d client 04d n entete no commande entete no client passer outre du corps de la commande fseek commandes sizeof Ligne Commande entete nbre_lignes SEEK CUR fclose commandes fclose liste fermer les fichiers 70 Un nom SEEK xxx n identifie pas une variable contenant en valeu
105. pt cde gt no client unsigned pt cde A CLARINVAL Le langage C 9 13 5 Synth se des op rations sur les pointeurs Nous rappelons ici le tableau g n ral des op rateurs du langage C 58 Priorit Groupes d op rateurs Op rations Notation Associativit p p D ne N 15 suffixes appel de fonction indexation s lection de membre s lection de membre post incr mentation post d cr mentation pr fixes pr incr mentation 4 pr d cr mentation adresse de indirection plus moins compl ment sur bits n gation logique x taille de sizeof x conversion au type TYPE x 13 multiplicatifs multiplication division modulo reste soustraction Eee a a 0 d calage droite x gt gt y relationnels sup rieur B sup rieur ou gal RA d galit os ETS 6 o E o inf rieur bool ens sur bits inf rieur ou gal affectation affectation absolue k lt affectation relative certains op randes peuvent ou doivent tre des pointeurs a en italique les op rateurs d adressage en gras les op rateurs effectuant une affectation 14 2 0 7 5 4 3 2 1 1 1 0 0 0 0 0 58 Cf chapitre 4 A CLARINVAL Le langage C 5 1 Op rateurs d adressage Priorit Groupes d op rateurs Op rations Notation Associativit 15 suffixes indexation x y gt s lection de membre x id s lection de membre x gt id 14 pr fixes adresse de amp x indirection x e Mani
106. publier tirage A CLARINVAL Le langage C 5 24 Exercices while Programmer une fonction de calcul du plus grand commun diviseur de deux nombres entiers positifs utilisant l algorithme suivant PGCD a b r lt reste de a b TANT QUEr 0 EXECUTER ab ber r lt reste de a b FIN TANT lt b Ecrire un programme pour tester cette fonction tel qu un nombre ind termin de tests puissent tre ex cut s successivement Ne pas oublier de d finir la convention d arr t de la r p tition nombre 0 signal de fin de fichier Lorsqu un utilisateur r pond une demande d un programme il est toujours susceptible d introduire au clavier un nombre quelconque de caract res de 0 n et sa r ponse est toujours cl tur e par le caract re n de fin de r ponse touche ENTER Cr er une fonction reponse qui renvoie la fonction appelante le premier caract re de la r ponse mais qui lit n anmoins tous les caract res introduits jusqu au caract re n compris Puisque le nom bre de caract res introduits est quelconque il est en toute rigueur impossible de d finir un tableau de taille suffisante pour recevoir le texte complet de la r ponse les ventuels caract res apr s le premier seront donc oubli s Remarque il est possible que le premier caract re soit d j le ter minateur n Quelle fonction de lecture est la plus adapt e la solution de ce probl me do while Corriger l algorithme
107. puiss r 2 0 25 Concat nation Deux parties du texte de remplacement s par es par le double signe sont concat n es c est dire coll es l une l autre dans le texte r sultant L int r t de ce m canisme r side dans le fait que ces parties de texte peu vent tre des param tres Cette technique est habituellement employ e pour cr er des noms structur s de fonctions de fichiers Exemple Un programme comporte notamment l affichage d un menu Ce programme tant destin des publics de langues diff rentes fran ais n erlandais il existe pour chaque langue une version distincte de la fonction d affichage du menu Le programme lui m me sera compil en diff rentes versions linguistiques define LNG f choix de la langue de compilation prototypes des fonctions menu t menu f void menu fran ais t menu n void menu n erlandais construction du nom de la fonction menu define MENU langue menu _ langue U LNG appel de la fonction d affichage texte re u par le compilateur oper menu f Red finition d un identificateur Le texte substitu l appel d une macro d finition est reparcouru pour y chercher des appels d autres macro d finitions connues ce point du programme ces appels sont traduits leur tour Restriction un nom ob tenu par une des deux op rations pr c dentes cha ne de caract res ou
108. py p 18 id adr val v ieo p amp v p 18 16 id adr val p 1 v 16 p 18 1 2 Les pointeurs comme param tres de fonctions Revenons la fonction permuter Elle sera appel e avec deux param tres effectifs les adresses des deux variables permuter Comme cela se produit pour tous les param tres ces adresses sont copi es dans les param tres formels correspondants de la fonction appel e ces param tres formels sont donc des pointeurs En cons quence les op rations de la fonction appel e peuvent par le biais d un adressage indirect modifier le contenu des variables locales de la fonction appelante test c include lt stdio h gt void permuter int ptr vers a int ptr vers b void main void test de la fonction permuter int datel date2 date3 printf nDonnez une date jj mm aa scanf 2d 24 2d amp datel amp date2 amp date3 permuter amp datel amp date3 amp gt adresse de printf gt aa mm jj 2d 24 2d datel date2 date3 permuter c void permuter int ptr vers a int ptr vers b permut n m moire les entiers a et b int i r vers sauver la valeur de a 3 tr vers a ptr vers b copier dans a la valeur de b 4 tr vers b temp copier dans b l ancienne valeur de a 5 temp 10 ptr vers b 08 permuter ptr vers a 06 date3 04 date2 02 main datel tats de la pile
109. qui est forc ment constant lui m me et qui peut tre connu par le compilateur lorsqu il analyse le texte du programme Le compilateur peut faire certains usages particuliers d une expression constante on en a d j vu un exemple la d termination de la valeur initiale d une variable Remarque Par raccourci les qualificatifs s appliquant au r sultat d une expression sont employ s pour qualifier l expression elle m me on parlera donc directement du type d une expression et on nm dira semblablement expression enti re expression constante etc 1 3 Usage des expressions num riques Sous expression en op rande L valuation d une expression num rique produit une valeur de r sultat que en principe le programme r cu p re pour l affecter e une variable par une op ration d affectation ex a payer prix un quantite e un param tre lors d un appel de fonction puiss n longueur 1 e comme r sultat au retour d une fonction return b pgcd a b e comme op rande d une autre op ration prix taux 100 Dans tous ces cas l expression en italique dans les exemples ci dessus joue le r le d op rande ou sous expression d une expression englobante Une expression valu e comme vraie ou fausse peut galement servir d op rande une instruction de test if ou while Exemples while n gt 0 if code sexe M Instruction Evaluer une expression consiste ex cuter cer
110. resultat 1 for p gt 0 p resulta for p lt 0 p resulta return resultat n p est d j n initialis dt cd Le compteur g r par la construction for sert souvent indicer les l ments d un tableau Les expressions de contr le d finissent un intervalle dans un vecteur l ment m l ment n Si chaque pas l incr ment est positif l intervalle est explor de gauche droite m n si l in cr ment est n gatif l intervalle est explor de droite gauche m lt n Tous les l ments ne seront trait s que dans le cas o la valeur absolue de l incr ment est 1 Si l on veut parcourir enti rement l intervalle d fini les expressions de contr le prennent une des formes suivantes la condition de poursuite de l it ration porte sur la valeur de l indice for i m i lt n i i k for i n i gt m i i k Exemple calcul des totaux de lignes et de colonnes d un tableau tant 12 5 12 lignes x 5 colonnes total ligne 12 total colonnel s5 indice Ligne indice Colonne tialisation des totaux de lignes 1 0 1 lt 12 1 total ligne l 0 initialisation des totaux de colonnes c 0 c lt 5 c total colonnelc 0 cumuls for 1 0 1 lt 12 1 for c 0 c lt 5 c total c Cl montant Il total li 1 montant 1
111. sentons bri vement ici ces fonctions g n rales pour obtenir un suppl ment d information le lecteur se reportera au chapitre 3 Le tableau ci dessous classe ces fonctions d apr s la quantit d information transf r e chaque appel certaines fonctions transf rent un seul caract re certaines fonctions transf rent le texte d une cha ne de caract res certaines fonctions transf rent une ou plusieurs donn es d crites par un format caract re cha ne donn es format es lecture fgetc fgets fscanf get character get string scan with format criture fputc fputs fprintf put character put string print with format 4 1 Lecture Ecriture d un caract re fgetc fputc e La fonction fgetc lit le caract re situ la position courante dans un flot de texte en entr e et modifie en cons quence la position courante Cette fonction est galement disponible sous la forme d une macro d finition de nom getc Er fichier tr fichier param tre pointeur du flot vis retour le caract re lu EOF en cas d erreur ou de fin de fichier La fonction getchar est quivalente fgetc stdin 67 Ces valeurs ne sont malheureusement pas standardis es elles sont particuli res chaque syst me d exploi tation Le langage C page 10 5 e La fonction fputc crit un caract re la position courante dans un flot de texte en sorti
112. sous type du type int Le mode de repr sentation en m moire est le m me et les op rations applicables sont les m mes La diff rence r side en ce que le domaine ensemble des valeurs permises est restreint aux valeurs num r es dans la d claration Exemple enum code sexe SEXE INCONNU MASCULIN M FEMININ F 3 valeurs permises M ECET AY De plus chaque valeur constante de ce type est identifi e par le nom qui lui est attach Ce nom peut tre employ en lieu et place de la valeur constante identifi e Exemple si on a fait la d claration de l alinea pr c dent on peut programmer if sexe_enfant FEMININ au lieu de programmer if sexe enfant F D claration enum tiquette de type liste des membres Chaque membre d une num ration est une valeur constante laquelle est attach un nom qui l identifie Diff rentes variantes existent dans la mani re de d finir et nommer chaque valeur membre du domaine e Identification explicite chaque nom de valeur se voit correspondre explicitement la valeur identifi e enum code sexe SEXE INCONNU MASCULIN M FEMININ F bien que les constantes soient indiqu es en format char leur repr sentation est celle d un int e Identification implicite la liste ne mentionne que les noms de valeurs ces noms d signent dans l ordre les valeurs enti res 0 1 2 etc enum valeur log
113. tneruaL tniasS Ecrire une fonction distincte pour effectuer l inversion du texte Cette fonction re oit en param tre le tableau contenant le texte lu Permuter les caract res dans le texte d origine sans recourir des zones de manoeuvre Faire voluer les indices par des op rations d incr mentation d cr mentation ATTENTION Limiter le traitement aux caract res pr c dant le terminateur 0 Quand la permutation doit elle cesser Cette condition vaut elle pour les deux cas o le nombre de caract res est pair ou impair A CLARINVAL Le langage C 4 28 Chapitre 5 Le contr le de s quence 1 Introduction 1 1 Concepts Revenons la d finition d un algorithme m thode de composition d op rations pour arriver la solution certaine de tout probl me appartenant une classe bien d finie Expressions Cette d finition pr sume qu il existe des op rations de base Le langage C propose une large gamme d op rateurs auxquels il convient d ajouter les fonctions standards et les fonctions cr es par le programmeur On a vu au chapitre 4 qu une expression est une m thode de composition de ces op rations de base La grande diversit des op rateurs disponibles rend ce m canisme tr s puissant Exemple l algorithme de la fonction ppcm donn e au chapitre 1 tient en une seule expression p g PP p p int ppcm int a int b return a b pgcd a b Ce m canisme est n anmoins limi
114. trables Une macro d finition peut tre param trable define nom pl p2 texte de remplacement utilisant les param tres Le nom de la macro d finition est suivi d une liste de param tres variables A CLARINVAL Le langage C 6 3 Chaque param tre est lui m me repr sent par un nom La liste doit tre coll e au nom sans espace avant la parenth se ouvrante 2 Le texte de remplacement est soumis aux m me r gles que pour une macro d finition constante Dans le cas d une macro d finition param trable ce texte fait normalement usage des param tres Pour viter des probl mes dus aux niveaux de priorit dans les expressions il est vivement recom mand de placer entre parenth ses chaque mention de param tre apparaissant l int rieur du texte de remplacement Exemple define PERMUTER a b a b a b unsigned long int n 33 char c 121 PERMUTER n i n j PERMUTER c k c 121 k le texte livr par le pr processeur au compilateur devient unsigned long int n 33 char c 121 nti SSE 1 sm Aaaa c k c 121 k c k c 121 k L utilisation d une macro d finition param trable ressemble un appel de fonction mais ce n est pas un appel de fonction Car une macro d finition ne comporte pas un l ment essentiel de la d claration d une fonction aucun type n est d fini pour ses param tres Cette
115. tronque val 0 long int valf1 OK PRIVATE routine pourcent if val 2 0 err division par z ro val 0 val 1 100 valf 2 OK PRIVATE routine tirage extern int rand void tirage d un nombr ntier al atoir val 0 rand OK K A CLARINVAL Le langage C 12 19 TABLE DES DESCRIPTIONS D eal FONCTIONS nom routine minp maxp 1 nbre de param illimit Fonction fonct AFFICHER AFFICHER 1 1 f obligatoire plus somme 2 2 moins soustraction 2 2 fois produit 2 2 sur division 2 2 mod reste 2 2 somme somme 1 1 prod produit 1 1 min minimum l 1 max maximum 1l 1 abs absolu 1 1 valeur absolue arr arrondi 1l 1 tronque tronque l 1 pct pourcent 2 2 tirage tirage 0 0 nombre al atoire NULL 0 0 convention de fin de table kr ns void liste_fonct void affiche la liste des f disponibles ine i passer AFFICHER printf t FONCTIONS DISPONIBLES n while fonct i nom 0 teste la l re lettre printf 397 fonctl i nom printf n n Commentaire Les d clarations globales de variables et de fonctions propres un module qui ne doivent pas tre accessibles de l ext rieur sont prot g es par le qualificati
116. valeur fournie par l expression de droite La classe de probl mes est elle bien ou suffisamment d finie par l nonc lever un nombre N la puis sance P Non Nous devons pr ciser la nature des arguments N et P Posons que P doit tre un nombre entier tandis que N peut tre un nombre r el P est il sign Si oui la m thode de calcul diff re selon que sa valeur est positive ou n gative multiplications ou divisions Quant au r sultat puisque N est un nombre r el il s agira d un nombre r el On dit que entier r el etc sont des types de donn es d finissant la fois le domaine des valeurs permises le mode de repr sentation en m moire et la gamme des op rations possibles sur ces don n es La d finition d une classe de probl mes doit toujours indiquer les pr conditions qui rendent la solution pos sible La d limitation pr cise du domaine de valeurs des variables utilis es fait partie de ces pr conditions Par exemple question se poser souvent la m thode de r solution vaudra t elle galement si tel nom bre vaut 0 ou ne faut il pas plut t exclure la valeur 0 En r sum ALGORITHME PUISSANCE ARGUMENTS REEL N ENTIER P RESULTAT REEL R 2 2 Etape 1 2 d finir la m thode de r solution Existe t il une m thode ou une op ration toute faite qui apporte la solution aux probl mes appartenant la classe que nous venons de d finir Supposons que non et que nous ne dispo
117. x 20 9x 100 0O x 21 0 x 101 0 x 22 1 x 23 Il est malais de lire un nombre binaire aussi les informaticiens pas l ordinateur emploient ils d autres bases que la base 2 e dans le syst me octal les nombres s crivent au moyen des 8 chiffres 0 7 chacun de ces chiffres syn th tise un groupe de 3 bits exemples 010 110 263 000 111 073 e dans le syst me hexad cimal les nombres s crivent au moyen des 16 chiffres 0 9 et A F pour les va leurs 10 15 chacun de ces chiffres synth tise un groupe de 4 bits exemples 0101 1100 5C k 0000 1111 OF E A CLARINVAL Le langage C 2 1 1 2 Taille des repr sentations binaires L unit centrale d un ordinateur est principalement compos e de deux organes e le processeur ou ensemble des circuits logiques op rateurs la m moire centrale o sont stock es les donn es repr sentations des informations pour la du r e de leur traitement La m moire centrale d un ordinateur est logiquement d coup e en mots groupes de bits d une longueur d termin e Les mots sont num rot s le num ro d un mot est appel l adresse de ce mot Aujourd hui pratiquement tous les ordinateurs adoptent la m me taille pour le mot de m moire l oc tet mot de 8 bits Dans un octet peuvent tre cod s 28 ou 256 nombres binaires Le processeur comporte un certain nombre de registres via lesquels s op re l change de donn es avec la m
118. 1 0ss2 s1 gt 0sis2 gt s1 b Fonctions de copie void void char char char char A CLARINVAL Le langage C s2 ne peut pas tre une constante et doit tre de longueur suffisante pour contenir le r sultat s1 et s2 doivent occuper en m moire des espaces disjoints memcpy s2 s1 n memmove s2 s1i n strcpy s2 s1 strncpy s2 s1l n strcat s2 sl x strncat s2 s1i n copie les n premiers octets de s1 dans s2 idem mais s1 et s2 peuvent se chevaucher en m moire copie la cha ne s1 dans s2 y compris le terminateur 0 copie n caract res de la cha ne s1 dans s2 si s1 compte moins de n caract res s2 est compl t e par des 0 colle le texte de s1 la suite de celui de s2 et termine par 0 colle au plus n caract res de la cha ne s1 la suite du texte de s2 et termine par 0 chacune de ces fonctions retourne l adresse s2 du r sultat ceci permet d crire des expressions comme txt streat txt suffix analogues i i 1 9 20 c Fonctions de recherche void memchr s2 c n recherche la premi re occurrence du caract re c dans les n premiers octets du bloc s2 char strchr s2 c recherche la premi re occurrence du caract re c dans la cha ne s2 char strstr s2 s1l recherche la premi re occurrence de la cha ne s1 19 non compris dans la cha ne s2 ces fonctions retournent l adresse de la position trouv e ou NULL en cas d chec d Fonctions sp cial
119. AL Le langage C iv CHAPITRE 9 CRS POINTEURS 25 nine ne in ne ati ei ne tint ane E ne lind es s 1 Concepts de basent farmer dr nt ner sbnnan Per E aa Lil DERNIONS ses Ame ne SE NE rm OEE nee en le eee dr eee NE Tue 1 2 Les pointeurs comme param tres de fonctions 2 Pointeurs et variables composites 2 1 Variables composites et adressage indirect 7 2 2 Les variables composites comme param tres de fonctions 9 4 3r Pointeursetiabl aux fi EE annees A A E SU SIN As fu tue N 3 1 Parent entr tableaux eft pointeufs sosie ea e ea etienne ENE nn ee durs nr 3 2 Calculs d adresses par d plac ment 2 3228028 Rien MR ART MR LUE AT ss 3 3 Les tableaux comme param tres de fonctions iy 3 4 Parent entre cha nes de caract res et pointeurs 9 9 3 5 Note sur les pointeurs comme r sultats de fonctions 9 10 4 Les conversions de pointeurs r giei aeie ini A EEA EE tete urine ne bats 6 9 11 4 1 Pointeurs g n riques EENE EE AE EEE EEA E EE EE S 9 11 4 2 Pointeurs nuls 43 Exemples tien r aa rA AA SE en en a Men E e A LE TEN 4 4 Pointeurs sur des objets de types diff rents ss 9 13 45 Pointeurs et nombres Entiers ya 8282 Re NA NN RP RU MS CONS AA RE ARE de 9 13 5 Synth se des op rations sur les pointeurs ss 9 14 5 1 Op rateurs d adressage 5 2 Manipulation d s LYDes ii imnerrrrstnnnesdreveniinesdentenetennets dant sise dr ec en ester otre EEEE 9 16 5 3 Op rations arithm tiqu s 5s rss ce E E Pre n
120. CEE short test date const long int int compter void e port e un rappel r dig en dehors de toute fonction a une port e globale un rappel r dig au d but d un bloc l int rieur d une fonction a une port e locale Comme pour les variables on peut d clarer en une seule rubrique plusieurs fonctions poss dant des attributs identiques l exception de la liste de param tres droit classe type identificateur d claration des param tres formels identificateur d claration des param tres formels r Exemple int pgcd int int ppcm int int 2 4 D claration des fonctions ancienne forme D claration primaire La d claration primaire d une fonction comporte dans l ordre les l ments suivants classe type identificateur liste des param tres formels Cette d claration est suivie de celle des param tres puis du bloc d finissant le corps de la fonction Les param tres sont d finis la mani re des variables 39 L autorisation d crire par exemple int int pour signifier la pr sence de deux param tres justifie l obligation de r p ter le nom de type pour chaque param tre contrairement ce qui est permis pour les varia bles 40 A titre transitoire cette ancienne forme de d claration d une fonction est conserv e dans la norme ANSI pour permettre d encore compiler d anciens programmes Il est recommand de ne plus l employer A CLARINVAL Le langage C
121. EVCIC ES ionici iieiea e E EE EEEN ANE EEEE AEE AEA A EAEE Le EN EONS CHAPITRE 4 LES EXPRESSIONS uraa ti nn n a T A T OR YARD DI 11110 1 EA A EE AAIE AE EEEE AE EA N EAA ki El ments d une expressio riren E ET miens afin E E S AE ENa EET EE ases 1 2 Cat gories d expressions 1 3 Usage des expressions num riques Sous expression en op rande Instruction rennes er nent EOE TE EA EATE EAE OEE A ET ESTES 2 Ordre d valuation des expressions sise ns ne ne nt EEEE RETESET iE 2 1 Emploi des parenth ses nent R entre 2 2 Priorit et associativit des op rateurs ses Priorit as tn L D Re ae nn A een ere Tableau general des Op rateurs o SR MR RNA MER RAR Aa An ANNE 3 Le type des op randes Conversions de types ss 3 1 L op rat ur sizeof rarement re 3 2 Conversions forc es Op rations d affectation Op rateur d co rcilion TYPE iii rsisissriesnrestersenit e ennesterensit entereet nennc NEE ASEE NEESER ii 3 3 Conversions implicites is isssssssesenseeseseeeeeeeneneeeeeeeeneense Promotion enti re Conversion arithm tique 4 Les calculs au sens large 4 le Op rations arithm tiques14ssimemnetrat irnenhnnnmnsn ln near titine rites hr sent 4 2 Comparaisons s seseeeeeee 4 3 Op rations logiques 4 4 Manipulation des bits 3 Les op rations d affectation mamaaa apa ie Dons a et LR a a a a iiae Sl Affectation absolue sonini en assi oeii eE EE en EEEE E Ra
122. H E M E S Informatique Andr CLARINVAL Le langage C dition octobre 1998 Chapitre 1 Survol introductif 1 D finitions de d part Algorithme m thode de composition d op rations pour arriver la solution certaine de tout probl me appartenant une classe bien d finie Programme ex cution d algorithme s par l ordinateur cette d finition est partielle La d marche cr ative des informaticiens comporte principalement deux tapes e l analyse d finition des classes de probl mes r soudre et des m thodes de r solution e la programmation mise des algorithmes en forme de programmes 2 Etape 1 laboration de l algorithme analyse 2 1 Etape 1 1 d finir la classe de probl mes Soit le probl me lever le nombre 6 la puissance 5 il y aurait peu d int r t cr er un programme pour r soudre ce probl me non r p titif le temps de cr ation du programme serait bien sup rieur au temps de r solution du probl me G n ralisons donc et envisageons la classe de probl mes lever un nombre N la puissance P Le fait de g n raliser implique l utilisation de variables En math matiques une variable est un nom symbolique N ou P substitu une valeur quelconque d un certain domaine ou ensemble de va leurs En informatique ce nom identificateur est donn une case de m moire capable de conte nir successivement l inscription de diff rentes valeurs Il est tr s
123. LCUL toutes les routines ont la m me signature PRIVATE Logique f int nb params float vall nb params nombre d op randes effectifs val tableau des op randes val 0 re oit le r sultat retour VRAI ou FAUX cf supra y PRIVATE routine AFFICHER affichage du r sultat printf n Sg n n valll OK PRIVATE routine somme val 0 val 1 while nb params val 0 val nb_params 1 OK PRIVATE routine produit val 0 val 1 while nb params val 0 val nb params 1 OK A CLARINVAL Le langage C 12 18 PRIVATE routine minimum val 0 vall1 while nb params if val nb params 1 lt val 0 val 0 val nb params 1 OK PRIVATE routine maximum val 0 val 1 while nb params if val nb params 1 gt val 0 val 0 val nb params 1 OK PRIVATE routine soustraction val 0 val 1 val 2 OK PRIVATE routine division if val 2 0 err division par z ro val 0 val 1 val 2 OK PRIVATE routine reste if long int val 2 0 err division par z ro val 0 long int val 1 long int val 2 OK PRIVATE routine absolu val 0 val 1 lt 0 val l val l OK PRIVATE routine arrondi val 0 long int val 1 0 5 OK PRIVATE routine
124. Le langage C 2 2 la configuration binaire d un nombre n gatif est obtenue de la mani re suivante prendre en binaire la valeur absolue ex 5 00000101 bit bit prendre le compl ment 1 ex 11111010 ajouter 1 ex 5 11111011 cette repr sentation binaire se justifie comme ceci il suffit d y ajouter la valeur absolue nombre oppos pour obtenir 0 ex reports 11111111 5 11111011 1 1 10 5 00000101 j cris 0 et je reporte 1 00000000 e nombre r el en virgule flottante l interpr tation distingue dans le mot deux sous groupes de bits l un repr sentant la mantisse enti re et l autre l exposant chacune des deux parties est sign e de la m me mani re qu un nombre entier soit D la base du syst me de num ration soit m la mantisse l exposant la valeur du nombre est m x bE base 10 45 3 12000000 0 005 exemples la taille de la mantisse d termine la pr cision de la repr sentation c est dire le nombre de chiffres significatifs repr sentables l exposant est un facteur d chelle d cimale qui d termine la position de la virgule e caract re dans un octet il est possible de coder 28 ou 256 repr sentations binaires lorsque ces repr sentations sont transf r es sur un appareil de visualisation cran ou imprimante elles se voient conven tionnellement correspondre 256 caract res chiffres d cimaux lettres minuscules et majuscul
125. ME nt el nr LS UE 4 gt char jour 7 9 CELA SMS MMS T AP he indique dimmjvs comme nom de jour 0 et la cha ne vide comme nom pour les autres jours A CLARINVAL Le langage C 2 18 Exercices Types de donn es Tester la fonction donn e en exemple pour lister la partie graphique de l alphabet ANSI Modifier cette fonction de la mani re suivante d clarer i de type char et l initialiser blanc plut t qu 32 Cr er un programme qui affiche la taille de tous les types scalaires En utilisant la fonction puiss du chapitre 1 cr er une fonction qui recevant en param tre la taille d un type entier fournie par l op rateur sizeof affiche les intervalles de valeurs minimum maxi mum des variantes sign e et non sign e de ce type Ecrire un programme qui teste cette fonction pour chacun des types entiers Si sans compter le signe on dispose de n bits la plus grande valeur positive repr sentable est 21 1 la plus grande valeur n gative repr sentable est 27 Constantes Cr er un programme qui affiche la taille des constantes donn es en exemple au paragraphe 3 D clarations R diger et compiler une fonction ne contenant pas d instructions mais seulement toutes sortes de d clarations de variables et de tableaux e des prototypes de fonctions Tableaux Cr er un programme qui lit au clavier une date en chiffres sous la forme jj mm 19aa et la r affiche avec le nom
126. NULL ancrage ptr vers racine de l arbre for posit phrase sscanf posit S s n gmot amp deplact gt 0 lu un mot posit deplact localiser amp arbre mot placer le mot ter arbre liste alphab tique trer arbre structure arborescente A CLARINVAL Le langage C 12 4 Arbre AVL Certains textes peuvent donner un arbre binaire fort d s quilibr Exemple Cent fois sur le m tier remettez votre ouvrage Boileau Y cent N fois N sur e N le votre N m tier N remettez L ouvrage Des techniques de rotation sont utilis es pour am liorer l quilibre d un tel arbre Ces techniques sont mises en oeuvre chaque fois que la diff rence de hauteur entre les sous arbres gauche et droit d un noeud d passe 1 Elles op rent par des changes de pointeurs Ocent2 Y Ofoisl N Osur0 OcentO Osur0 lfois3 e N Ocent0 2sur0 4 Olel N Om tier0 Y lfois3 4 N Ocent0 2sur0 4 im tier0 4 01e0 lfois2 N OcentO 1m tierl L N 01e0 Osur0 Y 2m tier3 2m tier2 L x Ocent0 1im tier2 lfoisi 2sur1 lfoisi 1isur0 4 N PRE N e N N 4 01e0 7h OcentO Ole0 OremettezO Ocent0O Ole0 HE Ovotre0 Oremettez0 0Oouvrage0 La structure d un noeud doit tre adapt e outre l adresse de la racine de chacun des deux sous arbres fils tout noeud contient une indication de la hauteur de ses deux sous arbres
127. Programmer cela en une seule boucle for switch while Cr er un programme unique pour tester les trois fonctions math matiques puiss pgcd ppcm du chapitre 1 Ce programme affiche l cran le menu suivant PROGRAMME DE TEST 1 puiss 2 pgcd 3 ppcm Quelle fonction d sirez vous tester _ Suivant le num ro introduit en r ponse ex cuter un test de la fonction correspondante En cas de r ponse diff rente ne rien faire Ce programme comprend les fonctions suivantes puiss pgcd ppcm les prendre dans le texte du chapitre 1 e une fonction menu qui affiche le texte du menu et demande le choix de l utilisateur e une fonction fesfs qui suivant la r ponse re ue effectue un des trois tests possibles le test d une fonction consiste demander deux nombres et afficher le r sultat calcul e la fonction main assurant qu un nouvel acc s au menu soit effectu apr s chaque test l ex cution s arr te lorsque l utilisateur donne en r ponse le nombre 0 A CLARINVAL Le langage C 5 26 R cursivit 7 Ecrire une fonction de tri rapide quick sort d un tableau de nombres entiers ne contenant pas de valeurs en double L id e consiste trouver la place d finitive du pivot valeur occupant initialement la case m diane du tableau Lorsque ceci est fait on r applique r cursivement l algorithme sur les deux parties du ta bleau situ es respective
128. T 31 define TIRET La ndif if defined COBOL pour le langage COBOL define LONG MOT 30 define TIRET Vert ndif char mot LONG MOT 1 A CLARINVAL Le langage C 8 5 1 3 Types composites les structures Pour transmettre une information utile les donn es manipul es par un programme doivent tre associ es dans des relations o chacune joue un r le d termin et connu Exemples un triplet de nombres entiers jouant les r les de num ro de jour num ro de mois mill sime compose une date un autre triplet d entiers jouant les r les de num ro de code quantit en stock stock plancher renseigne sur la disponibilit d un article en magasin un couple de cha nes de caract res jouant les r les de patronyme et de pr nom identifie une personne Ces relations peuvent tre tablies dynamiquement par les op rations du programme Une structure est un moyen de mat rialiser en m moire centrale et dans les fichiers une telle relation en figeant les r les Une variable de type structur est une zone de m moire d coup e en champs dont chacun contient une varia ble membre d un type d termin Exemple date jour mois annee D claration struct tiquette de type liste des membres Chaque membre d une structure est une variable interne cette structure Comme le montrent les exemples ci dessous la d clarati
129. UTR 1 0 ex cuter P fois R 4 R N FIN FIN SI On donne le nom d instruction un nonc qui comme R lt R x N prescrit l ex cution de certai nes op rations x et lt Remarque L utilisation de la division R N nous oblige ajouter la d finition de la classe de probl mes la pr condition N z 0 A CLARINVAL Le langage C 1 3 Deuxi me version de l algorithme Comment ex cuter moins P fois quand P est n gatif Cr er un compteur ayant au d part la valeur de P et compter les ex cutions en incr mentant ce compteur jusqu ce qu il atteigne la valeur 0 Un m canisme ana logue peut tre utilis dans le cas de P positif ALGORITHME PUISSANCE ARGUMENTS REEL z0 N ENTIER P RESULTAT REEL R METHODE SIP 0 ALORS R lt 1 0 FIN SI SIP gt 0 ALORS DEBUT R 1 0 I P compteur TANT QUEI gt 0 EXECUTER DEBUTR lt RxN II 1 FIN FIN TANT FIN FIN SI SIP lt 0 ALORS DEBUT R 1 0 I P compteur TANT QUEI lt O0 EXECUTER DEBUTR lt R N I I 1 FIN FIN TANT FIN FIN SI On voit comment les structures de composition s embo tent les unes dans les autres une construc tion alternative ou r p titive est elle m me consid r e comme tant une op ration Nous avons exprim l algorithme au moyen d un certain formalisme Les informaticiens disent qu un texte comme celui ci constitue un pseudo code r dig dans un pseudo langage langage pseudo parce que ce fo
130. a f T T2 T Ta f CTIF TI TO FD f 4 fi f 4 i BA fi 1 A fiC f 4 fi 2 iG i2 BG f 3 fi 2 BG RO iA fi 1 B A fC B A ACD 4 fiC f A 1 14 fia 5 Composition de fonctions Le principe de l algorithme de tri par insertion dans un tableau est le suivant p p g p 1 les l ments du tableau sont ordonn s d s leur insertion dans le tableau 2 si le nouvel l ment doit s intercaler l int rieur de la suite d j garnie les l ments de fin de cette suite sont d cal s QEJZG gt Q gt EQ gt EJQ gt EJOZ EGJOZ Programmer cet algorithme pour traiter un tableau d entiers Long int de dimension quelconque les nombres doivent tre rang s en ordre croissant R aliser l algorithme au moyen de trois fonctions lo caliser decaler inserer a La fonction localiser en examinant la suite de nombres d j constitu e donne l indice de la po sition laquelle le nouveau nombre doit tre ins r ou le cas ch ant laquelle il se trouve d j rang Cette fonction est une variante l g rement modifi e de la version it rative de la fonction chercher de recherche dichotomique b La fonction decaler d cale vers la droite la fin de la suite de nombres d j constitu e c La fonction inserer ins re la position voulue le nouveau nombre sauf si ce nombre existe d j dans le tableau U
131. a pn gt 21 0 A OT pivoter amp pn gt fils contresens c pda gt adr rn pn gt fils contresens pn gt pdal rn gt 1 Oo A pn gt fils contresens rn gt fils sen rn gt fils sens adr pn rn gt fils sens haut 1 max rn gt fil rn gt fi Jxx x pda rn gt 1 OfA O LS sens haut sens haut C 0 B 0 ontresens adr 2 C 0 B 0 0 SJ s sens adr gt fil nouvelle racine KXX rotation double nouvelle racine KXX Ls gche haut sens adr gt fil B Ls drte haut xxx Commentaire Les fonctions de parcours d un arbre localiser lister montrer sont r cursives elles s appellent elles m mes La fonction de rotation pivoter est galement r cursive dans certains cas la rotation gau che appelle la rotation droite et r ciproquement De la m me mani re que les algorithmes de tri ne d pendent pas du type des objets trier 82 les algorithmes de parcours d un arbre demeurent inchang s quel que soit le type des objets num r s Il est d s lors int res sant de les r aliser sous la forme de fonctions g n riques Pour cela le corps d un noeud ne doit pas tre form du texte de l objet mais d un pointeur g n rique vers cet objet chaque fonction de parcours doit recevoir en param tres les adresses des fonctions de comparaison et d action qui manipulent les objets localis s ces
132. ab t fin ligne n const short int vrai 1 faux 0 const float ponder 4 0 9 0 const static short nbre jours dans mois 12 431 29 31 30 31 30 31 31 30 31 30 371 tant initialis es par des expressions variables les d clarations suivantes doivent tre locales int i 0 j i 1 unsigned no facture compter X init par fonction Rappel de d claration des variables globales Le rappel de d claration des variables globales utilise le m me format qu une d claration primaire avec les adaptations suivantes e le qualificatif de classe extern est obligatoire e la clause d initialisation n a aucun sens et elle est interdite Exemples extern unsigned compteur const extern short vrai faux Un rappel r dig en dehors de toute fonction a une port e globale Un rappel r dig au d but d un bloc l int rieur d une fonction a une port e locale 2 3 D claration des fonctions format ANSI D claration primaire La d claration primaire d une fonction comporte dans l ordre les l ments suivants droit classe type identificateur d claration des param tres formels L identificateur et les deux parenth ses sont obligatoires Cette d claration est suivie du bloc d finissant le corps de la fonction Exemples float puiss float racine register int exposant int pgcd int a int b short test date const long int date
133. abet majuscule invers char c 26 1 tableau pour 26 lettres terminateur 0 int posit indice char lettre lettre Z posit 0 while posit lt 26 c posit lettre l indice et la valeur voluent apr s le placement de chaque lettre c posit 0 posit vaut 26 c d la longueur parcourue Cas d emploi Habituellement les op rations d incr mentation d cr mentation manipulent un compteur un indice Elles peuvent cependant s utiliser pour les nombres r els RECOMMANDATION Eviter de m langer dans une m me partie de programme les pr op rations et post op rations Ce genre de m lange est difficilement ma trisable par l esprit Priorit La priorit des op rateurs d incr mentation et d cr mentation est telle qu il n est jamais n cessaire de placer l op rande entre parenth ses 23 La mise jour de la variable ne doit pas tre interdite par le qualificatif const cf chapitre 7 A CLARINVAL Le langage C 4 18 Associativit Les op rations d incr mentation d cr mentation ne sont pas associatives La nature de leur op rande d si gnateur d une variable rend la chose impossible une premi re incr mentation ou d cr mentation ne peut servir d op rande une seconde 6 Les appels de fonctions Un appel de fonction est une expression dont les op randes sont constitu s des param tres de l appel Il est d s lors l gitime
134. aille typedef struct unsigned int no commande Date date reception unsigned int no client Tete Commande typedef struct unsigned int no commande unsigned int no article signed int qte commande Ligne Commande typedef union Tete Commande tete Ligne Commande ligne Bon Commande d claration d une variable composite Bon Commande en cours d claration initialisation de pointeurs Bon Commande pt bon amp en cours Tete Commande pt tete amp en cours tete Ligne Commande pt ligne amp en cours ligne Date pt date amp en cours tete date reception unsigned int pt article amp en cours ligne no article A CLARINVAL Le langage C 9 3 Il est possible de d clarer un pointeur pour un type construit d fini ult rieurement Exemple struci struci date pt date date char jj mm aa TT Comment acc der indirectement un membre d une variable composite rep r e par un pointeur On peut utiliser une expression de la forme pointeur membre l op rateur tant davantage prioritaire que il est n cessaire d crire les parenth ses Il existe une criture simplifi e pointeur gt membre lt gt pointeur membre la fl che est form e des deux caract res et gt sans espace entre eux Exemples quivalents pt date gt aa lt pt_ date aa pt tete gt date reception aa lt pt_ tete date re
135. aisons tests On peut poser un test d galit ou d in galit entre les donn es suivantes peut p 8 8 entre deux pointeurs ou adresses rep rant des objets de m me type pour savoir s ils rep rent le m me objet entre un pointeur ou une adresse quelconque et un pointeur g n rique void pour savoir s ils pointent sur le m me objet entre un pointeur et la constante NULL ou 0 pour savoir si le pointeur rep re un objet 5 5 Op rations logiques Groupes d op rateurs n gation compl ment logique logiques ET produit logique OU somme logique Les op randes x et y peuvent tre des pointeurs quelconques Puisqu il contient 0 un pointeur nul est interpr t comme faux un pointeur non nul est interpr t comme vrai Les op rations logiques quivalent des combinaisons de tests d galit in galit avec la constante NULL A CLARINVAL Le langage C 9 17 5 6 Expression conditionnelle expri expr2 expr3 e Op ration si expr 0 vrai le r sultat est la valeur d expr2 expr3 n est pas valu si expr 0 faux le r sultat est la valeur d expr3 expr2 n est pas valu Chacune des expr peut comporter des pointeurs ou des constantes adresses Le type du r sultat d pend toujours du type des deux expr2 et expr3 s il s agit de deux adresses ou pointeurs sur des objets de m me type le r sultat poss de le type commun aux deux expr s il s agi
136. aitee no usine m mo indicatif while signal 3 amp amp no usine usine traitee traitement d un atelier total usine total usine total atelier lecture suivante signal scanf lhd 2hd d amp no usine amp no atelier amp total atelier printf nTotal usine lhd ld usine traitee total usine tal firme total firme total usine tf nTotal firme ld total firme Le rep rage des sous ensembles successifs implique la m morisation d un indicatif num ro identi fiant tout moment le sous ensemble en cours de traitement A CLARINVAL Le langage C 5 7 Le traitement d un sous ensemble comporte les trois phases suivantes d but m morisation de l identifiant du sous ensemble courant production d un titre initialisation des valeurs cumulatives e corps traitement en boucle des parties ou l ments e fin production des valeurs cumul es totaux etc caract risant l ensemble Les variables donn es cumulatives titre identifiant caract risant chaque sous ensemble d un m me niveau de d composition seront en principe d clar es localement l int rieur du bloc traitant les sous ensembles de ce niveau 2 2 for Syntaxe for init cond incr oper init cond incr sont trois expressions chaque expression est facultative mais tous les points virgules sont obligatoires cond est une expression qui peut tre valu e comm
137. am tre le nom de la fonction de comparaison la fonction trier pourrait recevoir un indice sur un tableau de pointeurs de fonctions trier c int strcmp char char fonctions de int intcmp int int comparaison void trier void item int nbre items int mode mode indice de la f de comparaison O gt stremp 1 gt intcmp xf static int comparer 2 void a void b stremp intcmp tableau des fonctions de comparaison int i j min indices for i 0 i lt nbre items 1 1 pour les intervalles O N 1 1 N 1 N 2 N 1 chercher l item minimum min i for j i l j lt nbre items if comparer mode item j item min lt O min if min i permuter les pointeurs d items i amp min void temp zone de manoeuvre item i item i item min item min temp A CLARINVAL Le langage C 11 13 Syntaxes de d claration d un pointeur de fonction La syntaxe de d claration d un pointeur de fonction est assez r barbative Voici dans le prototype d une fonction trier trois mani res de d clarer en guise de param tre un pointeur de fonction d claration compl te d un param tre du type pointeur de fonction void trier void item int nbre items int comparer void a void b d claration d un param tre sans nom du type pointeur de fonction void trier void int int
138. anipulant un tableau normalement on d sire qu elle soit capable de traiter un tableau de n importe quelle dimension Pour cette raison comme dans le dernier exemple ci dessus on d clare alors le param tre formel comme un tableau de dimension ind termin e t De plus il est n cessaire de fournir la fonction une information lui permettant de conna tre chaque appel la dimension effective du tableau dont elle re oit l adresse Ou bien comme dans l exemple ci dessus le ta bleau contient un l ment terminateur c est toujours le cas d une cha ne de caract res 0 ou bien un para m tre suppl mentaire indique explicitement la dimension du tableau Exemple la fonction standard memcpy copie dans un tableau dest les n premiers octets d un tableau sre et renvoie l adresse du tableau dest elle pourrait notamment tre programm e d une des deux mani res suivantes char memcpy char dest const char src unsigned int dimens unsigned int i indice for i 0 i lt dimens i dest i src i return dest rendre l adresse de destination char memcpy char pt dest const char pt_src unsigned int dimens char pt_dst pt _ dest m moriser l adr de destination while dimens pt dest pt src return pt dst rendre l adresse de destination A CLARINVAL Le langage C 9 8 3 4 Parent entre cha nes de caract res et pointeurs On l a d j dit
139. arations qu il rencontre Un compilateur C pourrait coder sur 4 bits seulement le type d une variable bits 0 1 mode de repr sentation 00 entier non sign 01 entier sign 11 r el sign 2 3 taille 2 octets n 0 1 2 3 17 Le syst me UNIX utilise une technique analogue trois masques le responsable du syst me poss de tou jours tous les droits de trois bits rwx le droit d effacer fait partie du droit d crire A CLARINVAL Le langage C 4 12 Op rateurs A l instar des langages assembleurs dont il veut rester proche le langage C fournit des op rateurs agissant sur des groupes de bits l int rieur d un mot de m moire Groupes d op rateurs 14 pr fixes compl ment sur bits n d calage gauche 11 de d calage d calage droite 08 bool ens sur bits ET intersection 07 x lt lt y x gt gt y OU exclusif OU inclusif union Op rations de d calage Les op rations de d calage d calent les bits contenus dans le premier op rande d un nombre p de positions indiqu par la valeur du second op rande L op rateur lt lt effectue un d calage vers la gauche Les p bits de droite sont mis 0 Illustrations 1 lt lt 1 gt 1 lt lt 2 4 3 lt lt 1 gt 6 3 lt lt 2 12 00000001 00000001 00000011 00000011 t444 00000010 00000100 00000110 00001100 L op rateur gt gt effectue un d calage vers la droite Selon le
140. arbre g n alogique Exemple la dynastie belge L opold I A l L opold II Philippe Charlotte a iro e Selh a Louise St phanie Cl mentine Baudouin Henriette Albert I l L opold III Charles Marie Jos Jos phine Charlotte Baudouin I Albert II Marie Esmeralda Marie Christine Alexandre Philippe Astrid Laurent S il n est pas vide un arbre est un ensemble form d une racine ex L opold I associ e N gt 0 sous arbres fils disjoints En d autres termes chaque fils a un seul p re Puisqu un sous arbre est un arbre cette d finition est r cursive Chaque l ment d un sous arbre est un noeud un noeud sans p re est appel racine un noeud sans fils est appel feuille ex Cl mentine Repr sentation d un arbre binaire En m moire centrale on repr sente un arbre de la mani re suivante chaque noeud contient des pointeurs vers ses noeuds fils Cas particulier les arbres binaires o chaque noeud contient deux pointeurs vers deux noeuds fils ces pointeurs peuvent tre nuls Supposons que le type Texte d crive les informations utiles plac es dans chaque noeud d un arbre Chaque noeud d un arbre binaire poss de alors le type suivant struct noeud struct noeud fils gauche fils droite Texte corps Le pointeur d ancrage d un arbre contient l adresse de la racine de l arbre A CLARINVAL Le langage C 12 1 Soit le probl me
141. arer une union de structures qui contiennent toutes la m me posi tion le pr fixe identificateur Exemple struct descr nbre enum categ symbole categ int longueur float texte struct descr nom enum categ symbole categ int longueur char texte 32 struct descr oper enum categ symbole categ int longueur char texte union descr symbole struct descr nbre nbre struct descr nom nom struct descr oper oper A CLARINVAL Le langage C 8 12 Op rations Une union peut tre assimil e une structure dont tous les membres occuperaient la m me position Les op rations permises sur une variable union sont les m mes que les op rations possibles sur une structure Exemples Soit les d clarations struct descr symbole enum categ symbole categ int longueur union float nbre char nom 32 char oper texte struct descr symbole symb courant symb suivant e d signation d un membre symb courant texte oper symb suivant texte nom e taille sizeof sizeof symb courant texte donne la taille du membre le plus long e affectation d une variable du m me type symb courant texte symb suivant texte e param tre ou r sultat d une fonction 1 5 Les champs de bits On a d j not au chapitre 4 que certaines informations peuvent tre repr sent es dans un espace de m moire plus petit qu un octet un espace de n bits suffit pour repr senter 2 infor
142. ate df0 date df2 date d 2 temp undef date texte re u par le compilateur typedef struct short d 3 Date Num void date permutee Date Num date short i date daf0 da s date d 2 dat temp A CLARINVAL Le langage C 11 18 Exercices Tableaux plusieurs dimensions adressage par d placement param trable 1 Soit deux matrices M1 et M2 de dimensions a x b et b x c noter la dimension commune b Le pro duit de MI et M2 est une matrice M3 de dimensions a x c dont chaque l ment m3 est d fini comme ceci b 1 pour0 lt i lt aetO0 lt k lt c m3 D mlim2 j 0 Si l on repr sente les trois matrices par trois tableaux m1 a b m2 b c et m3 a c l algorithme du produit de deux matrices est le suivant for i 0 i lt a i for k 0 k lt c k m3li k 0 for j 0 j lt b m3 i k m1 i j m2 j k Programmer la fonction de calcul du produit de deux matrices de dimensions quelconques dont voici le prototype float prod matr float ml float m2 int a int b int c La fonction prod matr doit obtenir l espace de m moire n cessaire la constitution de la matrice produit espace dont elle renverra l adresse la fonction appelante Ecrire un programme de test Param tres de la commande d ex cution 2 Cr er un programme faille qui affiche la taille des fichiers dont la commande d ex cution donne la liste ex tai
143. ation d cr mentation sont les quivalents de certains op rateurs du langage as sembleur de l ordinateur PDP sur lequel a t cr le langage C A CLARINVAL Le langage C 4 17 L op rande d signe une variable d un type autoris pour l addition ou la soustraction 23 L op ration affecte cette variable sa propre valeur augment e ou diminu e de 1 Quant la valeur retourn e au contexte elle d pend de la position de l op rateur e les op rations de pr incr mentation x et pr d cr mentation x transmettent la valeur de x post rieure sa mise jour la mise jour est pr alable e les op rations de post incr mentation x et post d cr mentation x transmettent la valeur de x ant rieure sa mise jour la mise jour est post rieure Lorsque le contexte n utilise pas la valeur qui lui est renvoy e il est pr f rable de programmer des pr op rations x ou x le programme peut dans ce cas faire l conomie de la sauvegarde ou de la r cup ration de la valeur ant rieure de x Exemples for i 0 i lt dimens 1i sch ma de parcours d un tableau i pr f rable i crire des lignes num rot es int compteur 0 valeur initiale 0 char texte 40 1 tableau pour cha ne de 40 caract res printf 3d s n compteur texte le compteur est incr ment avant d tre crit cr er l alph
144. ative de la fonction chercher recherche dichotomi que dans un tableau donn e en exemple au chapitre 5 pour qu elle re oive en param tres et renvoie en r sultat des pointeurs plut t que des indices renvoyer le pointeur NULL en cas d chec de la re cherche Pointeurs g n riques et nuls 4 Programmer la fonction standard calloc d finie dans le fichier lt stdlib h gt Se servir des autres fonctions standards list es aux derniers paragraphes de ce chapitre Veiller traiter tous les cas pos sibles d erreurs ou incidents Conversions de pointeurs 5 Expliquez l effet de la macro d finition dp d finie ci apr s En respectant l ordre d valuation des op rateurs d finissez le r sultat de chaque tape interm diaire Ecrivez votre explication avant de tester l exemple fourni define dpl type struct id membre unsigned int amp type struct 0 gt id membre ex d utilisation typedef struct int numero char nom 32 prenom 16 identite printf Su dpl identite prenom LA A CLARINVAL Le langage C 9 28 Chapitre 10 Les fichiers 1 Introduction le concept de fichier Il convient de donner au mot fichier une d finition large toute collection de donn es disponibles dans l en vironnement du programme en ex cution Il peut s agir d une collection enregistr e sur disque ou disquette magn tique 1l peut s agir aussi d une suite de donn es introduites au clavier affich es l
145. autre s parateur pour lire une date utiliser une instruction de cette form scanf format date amp jour amp mois amp annee EJ Pour lire un texte comportant des caract res d espacement il faut le cl turer par un caract re termi nateur par exemple le signe de ponctuation et utiliser le format de lecture include lt stdio h gt char auteur 30 1 tableau de r ception du nom d auteur tre 60 1 tableau de r ception du titre de l ouvrage lire le nom d auteur et le titre scanf 1 l amp auteur titre exemple texte introduit Andr CLARINVAL Le langage C format texte lu Andr CLARINVAL non rang dans une variabl al Le langage C en non rang dans une variabl Probl mes Lire des donn es en utilisant diff rentes fonctions de lecture ne provoque normalement pas d incident techni que Cependant le m lange de scanf et gets peut donner des r sultats incoh rents e scanf S n c t et scanf S n c t ont un comportement proche de celui de gets t Cependant la lecture d une ligne vide au moyen du premier format n effacera pas le contenu ant rieur du tableau t L espace initial dans le second format prescrit de passer outre des caract res d espacement y compris les ventuels caract res de fin de ligne pr sents au d but du texte lu ce format ne permet pas de lire une cha
146. autres variables que nous qualifierons de composites seront tudi es plus tard dont le contenu se d compose en une liste de valeurs 4 1 D claration des variables Une variable doit tre d clar e avant d tre utilis e D clarer une variable c est lui donner un nom identificateur en m me temps qu on en pr cise les attributs Le principal de ces attributs est le type de valeurs 1 Le format de base d une d claration de variable est le suivant type identificateur Toute d claration doit tre cl tur e par un point virgule Remarque Si dans une d claration le mot int est pr c d d au moins un autre mot il peut tre omis Exemples unsigned int prix unitaire int n c signed int n float taux tva float surface float volume double distance intersiderale short is lt signed short int i unsigned no facture c unsigned int no facture long int montant total char code langue char ponctuation 10 Cf supra Les autres attributs des variables seront tudi s au chapitre 7 A CLARINVAL Le langage C 2 9 4 2 Usage des identificateurs Suivant le contexte o il est utilis l identificateur d clar pour une variable d signe tant t la valeur de cette variable tant t son adresse c est dire l emplacement qu elle occupe dans la m moire de l ordinateur Soit une instruction d affectation i i 1 Dans l expression de droite l identificateur i d si
147. ave a machine on which my problem can be easily solved For example if we were forced to write a set of mathematical programs involving manipulation of matrices we might reasonably begin by designing a new machine which was capable of arithme tic operations on matrices We might specify a new data type the matrix and a set of operations MATRADD MATRSUB MATRMUL and MATRDIV Such components must be thought of by their user the top down designer as elementary components of the machine he is using and there fore not susceptible to internal examination M A JACKSON Principles of Program Design London Academic Press 1975 Le programme ci dessous va nous servir illustrer cette double d marche et les crit res qu elle utilise pour identifier les fonctions cr er Ce programme simule le tirage du loto Il manipule deux types d objets boule et tirage Un objet boule est repr sent par un nombre entier al atoire pris dans l intervalle 1 42 l objet tirage est repr sent par un ta bleau de 6 num ros de base 1 num ro compl mentaire tous diff rents Le programme sera un algorithme combinant des op rations fonctions sur ces deux types d objets 28 D s le d part le programmeur pressent que les op rations sur une boule doivent tre labor es m thode ascendante sur la base de la fonction stan dard rand de g n ration de nombres pseudo al atoires quant aux op rations sur l objet tirage d vidence
148. b et nnnnnnn calcule et renvoie cc Ex cuter tout le traitement au moyen de la seule instruction return expression Pour tester cette fonction cr er un programme qui demande au terminal les deux premi res parties d un num ro de compte et affiche en retour le nombre de contr le Param trer les fonctions de dialo gue printf et scanf de mani re telle que le num ro de compte apparaisse l cran sous cette forme bbb nnnnnnn cc Comparaisons V rification d un num ro de compte bancaire Ecrire une fonction qui recevant en param tres les trois nombres bbb nnnnnnn cc renvoie le r sultat logique 0 ou 1 du test la valeur de cc est elle exacte Ex cuter tout le traitement au moyen de la seule instruction return expression Ecrire un programme de test pour cette fonction A CLARINVAL Le langage C 4 26 Op rations logiques Compl ter la fonction ci dessous par la formule exprimant la condition suivante une ann e est bis sextile si le mill sime est un multiple de 4 sans tre le mill sime d un si cle toutefois les mill simes multiples de 400 sont des ann es bissextiles int fevrier int annee if expression return 29 else return 28 Appels de fonctions R crire l exercice 4 de mani re telle que l expression appelle la fonction cr e l exercice 3 R diger la fonction tan d finie dans la biblioth que standard lt math h gt en utilisant les autres fonctions de cette
149. biblioth que et sachant que la tangente d un arc est le quotient de son sinus par son cosinus Ex cuter tout le traitement au moyen de la seule instruction return expression R crire l exercice 2 en appelant pour les calculs deux fonctions pourcent et arrondi Programmer ces fonctions Expressions conditionnelles R crire l exercice 5 en ex cutant tout le traitement au moyen de la seule instruction return expression 10 Ecrire une fonction intmax qui recevant en param tres deux nombres de type int renvoie le plus grand des deux et une fonction intmin qui renvoie le plus petit des deux nombres Dans les deux cas ex cuter tout le traitement au moyen de la seule instruction return expression Affectations Expressions s quentielles 11 R crire l exercice 3 calcul du nombre de contr le d un num ro de compte bancaire pour tenir compte de la pr cision suivante si la valeur calcul e pour le nombre cc est 0 prendre 97 pour r sultat Ex cuter tout le traitement au moyen de la seule instruction return expression en ef fectuant une seule fois les calculs n cessaires Deux versions sont possibles avec ou sans expres sion s quentielle A CLARINVAL Le langage C 4 27 Op rations sur bits Affectations Incr mentation D cr mentation 12 Demander d introduire au clavier une cha ne de caract res quelconque L afficher en inversant l ordre des caract res exemple Saint Laurent
150. bigu t des op rations d affectation L affectation modification du contenu d une variable est un m canisme fondamental de tous les langages de programmation Originalit du langage C une op ration d affectation est galement une expression et peut donc constituer une sous expression d une expression englobante elle retourne alors une valeur l expression englobante L effet d une op ration d affectation var val est donc double 1 la valeur de val est convertie dans le type de var puis rang e dans var 2 la nouvelle valeur de var apr s l ventuelle conversion de type est retourn e au contexte On peut sch matiser ce double effet de la mani re suivante contexte lt var lt val 19 Le qualificatif absolue est employ par opposition la qualification d affectation relative d finie au para graphe suivant 20 La mise jour de la variable ne doit pas tre interdite par le qualificatif const cf chapitre 7 A CLARINVAL Le langage C 4 15 Il est donc permis d crire des expressions du genre de celles ci v ritables d fis pour l esprit c j i 1 masque 1 lt lt p longueur 8 Cependant effectuer dans une m me expression l affectation d une valeur une variable et le test de cette valeur peut simplifier l criture du programme Exemple Le programme ci dessous copie le flot stdin dans stdout en convertissant les majuscules en minuscules include
151. bits Un espace de n bits suffit pour repr senter 2 infor mations mutuellement exclusives Exemples Un seul bit par ses deux valeurs 0 et 1 peut repr senter tout couple d attributs mutuellement exclusifs tels que vrai faux pr sent absent chaud froid en ligne d connect global local d j pas encore trait Le syst me d exploitation VMS de l ordinateur VAX associe tout fichier quatre masques de protec tion d crivant les droits d acc s accord s quatre cat gories d utilisateurs le responsable du sys t me l utilisateur propri taire du fichier le groupe d utilisateurs auquel appartient le propri taire le monde des autres utilisateurs Chaque masque est form de quatre bits indiquant si le droit corres pondant est ou non octroy l utilisateur ces droits d acc s sont les droits de Lire Read crire Write ex cuter Execute effacer Delete le fichier en abr g rwed 17 16 bits 15 0 masque droits Le langage de programmation COBOL autorise diff rents modes de repr sentation des nombres repr sentation binaire comme en C sous la forme d une cha ne de caract res dont chacun est un chiffre d cimal ou sous une forme d cimale condens e packed decimal dans laquelle un chiffre d cimal est repr sent dans un demi octet ce qui est possible puisque 9 1001 lt 24 Pendant qu il analyse le texte d un programme un compilateur constitue une table des d cl
152. c der les instructions d clarations instructions Le bloc constituant le corps d une fonction contient les d clarations visibles pour toutes les instruc tions de la fonction il est relativement rare que les blocs embo t s l int rieur d une construction en contiennent A CLARINVAL Le langage C 5 3 Si un bloc autre que le bloc formant le corps d une fonction contient en tout et pour tout une seule instruc tion ou construction les accolades peuvent tre omises Exemple la fonction pgcd ci dessus peut tre simplifi e de la mani re suivante taw pge int a ine 16 Un bloc peut tre vide cette latitude syntaxique est n cessaire dans certains contextes Un bloc vide peut s crire d une de deux mani res bloc sans instruction bloc d une instruction instruction sans op ration Condition Une condition est une expression quelconque qui peut tre valu e comme vraie ou fausse Toute condition doit tre plac e entre parenth ses 2 Les constructions it ratives 2 1 while Syntaxe while condition bloc La condition est une expression qui peut tre valu e comme vraie ou fausse Si le bloc est form d une seule instruction ou construction les accolades peuvent tre omises Interpr tation L ex cution du bloc se r p te tant que la condition est vraie L valuation de la condition est effectu e avant chaque ex cution du bloc si
153. caract ristique fait l int r t des macro d finitions param trables L exemple ci dessus emploie une seule macro d finition pour permuter des variables de n importe quel type scalaire si l on employait des fonctions on devrait r diger une fonction distincte pour chaque type de param tres 3 3 M canismes de substitution avanc s Cr ation d une cha ne de caract res Si dans le texte de remplacement le nom d un param tre est pr fix par le signe le param tre effectif est transform en cha ne de caract res c est dire qu il est plac entre guillemets Exemple macro d finition pour afficher la valeur d une variable ou d une expression peut tre employ e pour la mise au point des programmes define VOIR expr type printf expr type n expr expr expression variable etc 2 type code pour printf exemples d utilisation int i 1 float r 0 5 float puiss float racine int exp VOIR i d 29 Sinon la parenth se ouvrante serait le premier caract re du texte de remplacement d une macro d finition constante A CLARINVAL Le langage C 6 4 VOIR puiss r 2 g texte transform print i g g n i printf puiss r 2 g n puissi r 2 texte re u par le compilateur les cha nes contigu s sont concat n es printf i d n i printf puiss r 2 g n puiss r 2 messages affich s i 1
154. ception aa pt bon gt tete date reception aa lt pt bon tete date reception aa N B On peut comparer entre eux deux pointeurs ou adresses rep rant des objets quelconques l int rieur d une m me variable composite Exemples ces relations sont toutes vraies pt bon pt ligne pt ligne gt pt tete pt tete lt pt date amp en cours tete amp pt tete gt no client 2 2 Les variables composites comme param tres de fonctions Au lieu de passer en param tre une fonction une copie d une structure il est souvent plus int ressant de lui passer l adresse de cette structure On vite ainsi de recopier la structure qui peut tre longue dans un param tre formel si la fonction modifie la structure on vite de devoir encore la recopier en retour Exemple fonction permutant les l ments d une date jj mm aa lt gt aa mm jj typedef struct short d 3 Date Num Date Num date permutee Date Num date modifier le param tre formel copie en adressage direct date d 0 date d 2 date d 0 date df2 return date transf rer la copie modifi e typedef struct short d 3 Date Num void date permutee Date Num pt date modifier le param tr ffectif en adressage indirect pt date gt d 0 pt date gt d 2 pt date gt d 0 pt date gt d 2 A CLARINVAL Le langage C 9 4 3 Pointeurs
155. ces for i 0 i lt 10 i traitement d une ligne for 3 0 j lt 10 5 traitement d une colonne molt ENIN i 1 5 1 0 1 2 3 4 5 6 7 8 9 i 2 s 4f s 6f 7 s 9f 10 21 4 6 81 1w nf 14 16 i8f 20 s 6f of 12 is 181 21 24 27 30 4 s 2 16 2f 2 28 32 36 40 s e ep al o f ep asf sf e e a PE e ET NH a ENT o f 27 3 s s e z s 9 10 20 30 407 so 601 7f so 907 100 NN LR D nn L expression d initialisation d un tableau plusieurs dimensions est elle aussi hi rarchis e en un syst me de listes embo t es Exemple double tableau des mois pour les ann es bissextiles et non bissextiles short nbre jours dans mois 2 12 81 29 81 30 31 30 31 31 80 31 380 731 131 28 31 30 31 30 31 31 80 31 30 31 7 3 Cha nes de caract res Rappel une cha ne de caract res est cod e dans une suite d octets contigus dont chacun contient un carac t re suivis d un octet contenant en guise de terminateur un caract re nul nombre 0 binaire Bonjour n RENE RS ESS n v 13 C est ce n cessaire embo tement des op rations qui justifie une vision hi rarchis e en lignes et en colon nes A CLARINVAL Le langage C 2 15 Une cha ne de caract res peut donc tre stock e dans un fableau de caract res suffisamment long pour conte nir le texte ef son terminateur Exemple d claration char n
156. cher Le programme calculette peut tre adapt pour accepter les op rateurs arithm tiques ordinaires Analyse syntaxique La grammaire ensemble des r gles de production doit tre modifi e mais les m thodes de l ana lyse syntaxique demeurent inchang es Les parenth ses autour d une expression modifient les r gles de priorit L analyse syntaxique peut traiter cette paire de parenth ses comme un appel de fonction recevant un seul param tre expression op rande suite valeur nombre fonction copie suite op rateur 2 op rande copie param tre op rateur 2 l a s Jonction nom param tres op rande valeur sign e valeur 84 param tres param tre param suiv valeur sign e op rateur l valeur param suiv param tre op rateur l param tre expression Routines s mantiques La description d une op ration doit indiquer la position de l op rateur ou du nom de fonction par rapport aux op randes c est dire le nombre 0 ou 1 d op randes plac s avant Cette information servira corriger le pointeur vers la pile des op randes La table d crivant les fonctions et op rateurs doit mentionner leur niveau de priorit Le moment d ex cuter une op ration de calcul est chang avant d enregistrer empiler un nouvel op rateur ou nom de fonction on ex cute partir du sommet de la pile toutes les op rations de l expression
157. cro d finitions n cessaires 7 va list type du pointeur va start ptr dernier param tre nomm initialisation du pointeur va _arg ptr type du param tre obtention du param tre ou argument suivant va end ptr cl ture 78 Cf chapitre 7 Organisation de la m moire allou e au programme 79 Le terme argument est souvent employ comme synonyme de param tre Les noms de macro d finitions commencent par va_ abr viation de variable argument A CLARINVAL Le langage C 11 16 e Le pointeur doit tre d clar de type va_list e va start doit tre appel e avant de traiter le premier param tre sans nom elle place dans le pointeur l adresse du param tre qui suit le param tre nomm e va_arg renvoie le param tre rep r par le pointeur puis place le pointeur sur le param tre suivant elle est appel e successivement pour chaque param tre sans nom Avant d appeler va_arg le programme doit savoir s il existe encore un param tre et en conna tre le type type dont la taille sera ajout e l adresse contenue dans le pointeur pour le faire pointer sur le param tre suivant Dans la fonction printf le param tre nomm est un texte o chaque code de format d crit un des param tres suivants e va _end effectue le nettoyage ventuellement n cessaire elle doit tre appel e avant de retourner la fonction appelante Exemple 80 Version r duite de printf ne renvoyant pas de r sultat et n
158. d clarations enum et d clarations de variables ou fonctions Si l on respecte la directive g n rale de rendre globales toutes les d clarations de types tous les noms identifi cateurs de constantes num r es doivent donc tre univoques Pour les distinguer des identificateurs de varia bles ou de fonctions on les crit habituellement en majuscules Remarque m thodologique Le langage C offre plusieurs techniques pour indiquer une constante Quelle forme choisir e On emploiera une constante litt rale num rique ou alphab tique chaque fois que cette constante joue son r le de valeur num rique ou de valeur alphab tique Exemples initialisation d un compteur p 0 test d appartenance l alphabet if caract gt A amp amp caract lt 7 e On emploiera un nom de constante num r e chaque fois qu une valeur num rique ou alphab tique est em ploy e pour repr senter un concept d une autre nature Le r le m thodologique d une d claration enum est celui d une fable de codification Exemples enum valeur logique FAUX VRAI enum code sexe SEXE INCONNU HOMME M FEMME F resultat FAUX if sexe enfant SEXE INCONNU On emploiera une macro d finition define pour une constante dont la valeur d pend de l environnement pour lequel le programme est cr Exemple extrait d un compilateur if defined C pour le langage C define LONG MO
159. d s le d part la condition est fausse le bloc est donc ex cut 0 fois d but DE faux cond vrai bloc fin A CLARINVAL Le langage C Utilisation La construction while est tout indiqu e pour traiter les l ments d un ensemble dont il est toujours avis de pr voir qu il pourrait tre vide Pratiquement tous les programmes sont it ratifs en ce sens qu ils r p tent le m me traitement sur des donn es d entr e successives donn es lues au terminal ou dans un fichier d entr e principal Il faut noter que si l en semble trait contient n l ments on devra effectuer n 7 lectures n l ments 7 signal de fin Une premi re lecture doit pr c der tout test de donn es elle est donc effectu e au d but du programme on doit r p ter l op ration de lecture apr s le traitement de chaque l ment La condition de r p tition est la condition d appartenance de l l ment courant l ensemble trait ce qui s exprime de diff rentes mani res en fonction de la nature de l ensemble Le sch ma de base habituel est donc celui ci traitement d un fichier parcours d un tableau premi re lecture indice 0 while signal de fin while indice lt dimension op rations op rations lecture suivante indice indice 1 Exemple Pour tester compl tement la fonction puiss donn e en exemple au chapitre 1 il est n ces sa
160. d erreur Ces valeurs sont d sign es par les noms suivants EDOM erreur de domaine la valeur d un param tre est invalide ERANGE erreur d intervalle la valeur du r sultat ne peut tre repr sent e dans un double A CLARINVAL Le langage C 4 23 Exemple include lt math h gt fonctions math matiques include lt errno h gt gestion des erreurs include lt stdio h gt entr e sortie des donn es void main void float x float y double puiss printf TEST de la fonction standard pow n donnez la racine et l exposant gt gt gt gt scanf f sf amp x amp y puiss pow x y errno EDOM ERANGE printf calcul impossible printf r sultat g puiss Liste des fonctions fichier lt stdlib h gt Le fichier d en t te stdlib h standard library fournit toutes sortes de fonctions utilitaires Parmi celles ci les suivantes peuvent tre class es comme fonctions math matiques e Valeur absolue int abs int x valeur absolue de x sous le format int long labs long x valeur absolue de x sous le format long e G n ration de nombres al atoires int rand void g n ration d un nombre pseudo al atoire void srand int seed initialisation d une suite de nombres Chaque appel de la fonction rand rend un nombre int gt 0 pseudo al atoire random L algorithme in te
161. d un caract re quelconque 3 2 Cha nes de caract res Le langage C offre une autre forme de constante litt rale qui ne repr sente pas une valeur scalaire la cha ne de caract res character string e suite de caract res repr sentables ou non plac e entre guillemets exemples Bonjour n cha ne vide ATTENTION Ne pas confondre une cha ne de caract res entre guillemets ex et un caract re entre apostrophes ex Car ces deux sortes de constantes ne se repr sentent pas de la m me mani re dans la m moire de l ordinateur A CLARINVAL Le langage C 2 8 Une cha ne de caract res est cod e dans une suite d octets contigus dont chacun contient un caract re sui vis d un octet contenant en guise de terminateur un caract re nul nombre 0 binaire 14 4n n Bonjour Cri FRERES ENESES M EM EIETS Remarque Le caract re est utilis pour couper un texte en fin de ligne Autre m thode deux cha nes de caract res cons cutives en forment en r alit une seule Exemples quivalents printf Bonjour n printf Bon printf Bon jour n jour n 4 Les variables scalaires premi re approche Une variable est un zone de m moire dont la valeur le contenu peut tre modifi e par l ex cution du pro gramme Une variable scalaire est un mot de m moire contenant tout moment une valeur unique modifiable mais gt q non d composable D
162. dant Pour la lisibilit du texte il est utile de d caler une m me distance de la marge gauche les mots if et else correspondants voir le premier exemple ci dessous Exemples void adresse char sexe char etat_civil impression d adresse char titre 3 14 Madame Mademoiselle Monsieur if sexe M printf titre 2 else if etat civil C printf titre 1 else printf titre 0 int pgcd int a int b calcul du plus grand commun diviseur if a lt b return pgcd a b a if a gt b return pgcd b a b if a b return a int date valide int jj int mm int aaaa contr le d une date int jours dans mois 12 31 29 31 30 31 30 31 31 30 31 30 31 if aaaa 4 0 jours dans mois 2 1 28 return mm gt 1 amp amp mm lt 12 amp amp Jj gt 1 amp amp jj lt jours dans mois mm 1 Construction i ou expression conditionnelle La puissance des expressions dans le langage C particuli rement des expressions conditionnelles fait que les constructions i f peuvent souvent tre remplac es par de simples expressions Les exemples ci dessus peuvent s crire comme ci dessous void adresse char sexe char etat civil impression d adresse char titre 3 14 Madame Mademoiselle Monsieur printf titre sexe M 2 etat civil C 1 0 A CLARINVAL L
163. date num rique dans un format textuel static cha char mois JAN FEV MAR AVR MAI JUN OUT MAOU U SEPT OCT NOVY DEC sprintf txt hd s 19 02hd date jj mois date mm 1 date aa return txt rendre l adresse du text static 61 Cf chapitre 3 A CLARINVAL Le langage C 9 23 Un programme calculette doit analyser et ex cuter une expression arithm tique introduite au clavier et rang e dans un tableau de caract res expr La fonction symb sv extrait le symbole suivant de cette expression nombre op rateur ou nom de fonction Elle re oit en param tres un pointeur sur la position courante dans le texte et un pointeur vers une structure descriptive du symbole au retour le pointeur indique la position suivante analyser La description d un symbole comporte un code de cat gorie l indication de la longueur et le texte du symbole celui ci est soit un nombre converti en float soit un nom de fonction on suppose que les majuscules ont t pr alablement converties en minuscules soit un op rateur d un seul ca ract re Dans l expression les symboles peuvent tre s par s par des espaces ou des caract res de ta bulation Par simplification on suppose ici que le texte introduit ne contient pas d erreurs symb_sv c include lt stdio h gt sscanf include lt ctype h gt tests des caract res descr d un symbo
164. de consid rer la fonction elle m me comme un op rateur cr par le programmeur Un appel de fonction peut avoir pour param tre effectif un appel de fonction les appels de fonctions peu vent s embo ter Exemple puiss 2 abs e Comme les op rations d affectation l appel d une fonction modifie le contenu de certaines variables Ces af fectations se produisent aux deux tapes suivantes la passation de la valeur des param tres effectifs la fonction appel e le renvoi de la valeur r sultat la fonction appelante Les valeurs ainsi chang es entre les fonctions appelante et appel e subissent des conversions de type 6 1 Passation des param tres la fonction appel e L appel d une fonction se fait sous la forme suivante identificateur de fonction liste d expressions Les parenth ses sont obligatoires mais la liste d expressions peut tre vide Chaque expression de la liste entre parenth ses est un param tre effectif de l appel La valeur de ce param tre est copi e dans le param tre formel correspondant d clar dans la fonction Les param tres se corres pondent par leur position dans la liste appel puiss an e param tres effectifs 4 4 d claration float puiss float n int p param tres formels Dans le texte du programme l appel d une fonction est en principe pr c d de la d finition ou du prototype de cette fonction 24 Cette d finition pr alable de la fonction appel
165. de mots de longueur maximum quelconque Les formules amp t LIGNE COLONNE et amp t LIGNE amp t sizeof T param tres les informations suivantes amp t sizeof T C LIGNE COLONNE x C LIGNE sugg rent la solution Il suffit de passer en un pointeur T t indiquant la fois l adresse de d but du tableau et le type d l ment la dimension C include lt string h gt stremp char position mot char mot char liste int 1 mot int nb mots mot texte cherch xyz 0 liste tableau des mots enregistr s xyz 0 1 mot longueur maximum d un mot dans la liste nb mots nombre de mots d j enregistr s N B Cet algorithme n est pas du tout optimis IDE LL indice gt mot for i 0 i lt nb mots i char ptr liste 1 mot i N B sizeof char 1 if stremp mot ptr 0 si trouv renvoyer pt return r l adresse du mot enregistr return 0 renvoie NULL en cas d chec A CLARINVAL Le langage C 11 2 1 2 Tableaux de pointeurs Pour le langage C un tableau plusieurs dimensions est un tableau de tableaux une page est un tableau de lignes une ligne est un tableau de colonnes char page lignes colonnes Il est souvent plus avantageux d utiliser un tableau de pointeurs une page est repr sent e par un tableau de pointeurs vers des l
166. de port e globale ou locale est cr e au d marrage de l ex cution du programme34 et d truite la terminaison du programme sa dur e de vie est gale la dur e d ex cution du programme la valeur d une variable locale statique est conserv e entre les ex cutions du bloc o elle est d finie et visible mais puisqu il s agit d une variable locale elle ne peut tre r f renc e que par les op rations du bloc en question Exemple La fonction suivante compte le nombre de fois o elle est appel e et chaque fois qu elle est ex cu t e renvoie le num ro courant la fonction appelante Si le compteur tait implicitement d clar auto plut t que static la fonction renverrait chaque appel la valeur 1 int compter void static int compteur 0 valeur initiale 0 return compteur le compteur est d abord inc ment puis renvoy en r sultat e On peut demander au compilateur de cr er une variable automatique dans un registre du proces seur classe register plut t qu en m moire centrale S il n y a pas suffisamment de registres dispo nibles la classe register est automatiquement chang e en auto Le nombre de registres disponibles pour cet usage est au maximum de l ordre d une dizaine Le fait de placer une donn e dans un registre conomise les transferts entre m moire et proces seur Compte tenu de ce que leur nombre est limit on r servera les registres au
167. des nombres entiers donnerait un r sultat entier z ro qui serait ensuite transpos dans le format floating point Cf chapitre 4 A CLARINVAL Le langage C e La signature d une fonction d crit d clare les donn es param tres et r sultat qu elle change avec toute fonction appelante Ces donn es forment l interface de la fonction c est dire sa partie visible aux au tres fonctions Le corps d une fonction est un bloc de texte entre accolades d finissant la partie interne et invisible de la fonction variables locales et instructions Dans la d finition d une fonction la signature comporte les l ments suivants type du r sultat identificateur d claration des param tres formels Cette d claration est imm diatement suivie du bloc formant le corps de la fonction Exemples float puiss float racine int exposant Lt Matte int pgcd int a int b pie essieu int ppcm int a int b void main void e type le type mentionn est celui de la valeur r sultat de la fonction le qualificatif int entier peut tre laiss implicite le pseudo type void vide doit tre indiqu pour une fonction qui ne renvoie pas de r sultat e liste des param tres la liste comporte la d claration type identificateur de chaque param tre ces d clarations sont s par es par des virgules l expression void vide signifie que la fonction ne re oit aucu
168. dessous les noms de mois sont m moris s dans un tableau de noms ta bleau de caract res deux dimensions local la fonction Pour que ces noms soient accessibles la fonction appelante le tableau doit tre d clar de classe static char nom mois short int mois static char nom 12 10 janvier f vrier mars waye mai juin Mjuillet ao t septembre octobre novembre d cembre repr sentation en m moire Q ooo 2 ooo 000000 00000 O0O0O0OOOOO janvier f vrier mars avril mai juin juillet ao t septembre octobre novembre d cembre return nom mois 1 000000 La seconde version ci dessous utilise un fableau de pointeurs vers des cha nes de caract res cons tantes et persistantes le tableau peut ne pas tre d clar static pour viter la r initialisation du tableau chaque appel de la fonction il est cependant pr f rable qu il le soit char nom mois short int mois char pt nom 12 janvier f vrier mars tavri mai uin juillet ao t septembre octobre novembre d cembre repr sentation en m moire gt eo AE ES a ESS pointeurs vers o Z o o o janvier f vrier mars avril etc return pt nomfmois 1 A CLARINVAL Le langage C 9 10 4 Les conversions de pointeurs 4 1 Pointeurs g n riques Comment faire pour cr er un tableau
169. diviseur de deux nombres entiers La recherche dichotomique binary search d un l ment dans un tableau ordonn est un algorithme clas sique car il est tr s performant En effet le nombre de comparaisons effectu es pour trouver un l ment dans un tableau de N l ments est lt Fog N 1 127 Dans un tableau de 1000 l ments le nombre d l ments test s sera au maximum de l ordre d une dizaine Si la recherche se faisait en parcourant s quentiellement le tableau ce nombre serait N 1 L algorithme est celui ci chercher l l ment x dans l intervalle 0 N 1 du tableau comparer x avec l l ment situ au milieu de l intervalle si x est plus petit le rechercher dans le demi intervalle de gauche si x est plus grand le rechercher dans le demi intervalle de droite continuer en d coupant toujours des demi intervalles jusqu ce que soit on trouve soit l intervalle est devenu vide contient 0 l ment chercher c version r cursive int chercher int x int t int gauche int droite recherche dichotomique dans un intervalle ordonn param tres x nombre recherch t tableau la dimension peut tre laiss e inconnue puisqu on indique les bornes gauche droite indices d limitant l intervalle retour indice de l l ment trouv ou 1 en cas d chec 27 I serait plus exact de parler du nombre d l ments test s plut t que du nombre de comparaison
170. du vocabulaire C mots cl s et op rateurs types de donn es integernombre entier floating point nombre r el en virgule flottante de valeur valeur la position de la virgule varie 3 Dans la notation am ricaine les parties enti re et d cimale d un nombre r el sont s par es par un point plu t t que par une virgule en outre si la partie enti re est nulle elle peut tre omise 50 0 50 A CLARINVAL Le langage C 1 7 op rateurs d affectation arithm tiques multiplication de comparaison lt gt lt inf rieur ou gal gt sup rieur ou gal gal diff rent instructions while TANT QUE if SI else SINON return terminer l ex cution de la fonction et s il y a lieu retourner le r sultat R gles et habitudes syntaxiques g n rales La disposition du texte est libre en ce sens qu il n existe pas de colonnes ou de marges Pour accro tre la lisibilit les programmeurs ont l habitude de d caler vers la droite le contenu d un bloc Les espaces sont facultatifs sauf pour s parer deux mots Le caract re est un terminateur de d claration ou d instruction On crit habituellement sur une ligne une seule instruction ou d claration mais ce n est pas obligatoire Formation des mots Un mot est form d une suite de caract res pris parmi les suivants lettres majuscules et minuscules anglai ses c est dire non accentu es chiffres tiret s
171. e un nombre binaire peut tre compris comme l adresse enti re non sign e d un mot de m moire e instruction un groupe de bits peut tre interpr t comme formant une instruction dans laquelle on distingue dif f rents champs un code d op ration et des adresses d op randes 1 4 Exercices Imprimer la partie graphique de l alphabet ASCII Un grand nombre d ordinateurs actuels emploient l alphabet standard ASCII American Standard Code for Information Interchange 8 Les caract res ayant un quivalent graphique y occupent les positions 32 126 On demande d imprimer la partie graphique de cet alphabet en pr sentant chaque caract re sous trois formes valeur num rique d cimale valeur num rique hexad cimale symbole graphique Algorithme impression de l alphabet partie graphique 8 caract res par ligne DEBUT i 32 TANT QUE i lt 127 EXECUTER DEBUT SI reste dei 8 0 ALORS aller la ligne FIN SI imprimer les trois formes du caract re correspondant ic i l FIN FIN TANT FIN 8 Cet alphabet comporte 128 caract res il occupe les positions 0 127 de l alphabet de l ordinateur tandis que le contenu des positions 128 255 diff re d un ordinateur l autre A CLARINVAL Le langage C 2 4 Pour l affichage des valeurs la fonction printf doit tre appel e avec d autres formats que ceux d finis au chapitre 1 printf print with format c one character d decimal integer
172. e 1984 A CLARINVAL Le langage C 1 15 e PPCM A x B PGCD A B x PPCM A B Algorithmes e pgcd a b 1 sia et b sont gaux le r sultat est a ou b 2 sinon prendre le pgcd du plus petit des deux nombres et de leur diff rence c est dire r ex cuter l algorithme sur ces nouvelles donn es la diff rence atteindra finalement 0 et l on finira par tomber dans le cas 1 ex pgcd 8 20 lt pgcd 8 12 pgcd 8 4 lt pgcd 4 4 METHODE SIa b ALORS r sultat lt a SINON DEBUT SI a lt b ALORS r sultat lt pgcd a b a FIN SI SIb lt a ALORS r sultat lt pgcd b a b FIN SI FIN FIN SI Cet algorithme utilise un nouveau m canisme de composition d op rations la r cursivit On qua lifie de r cursif un algorithme qui se rappelle lui m me dans l exemple lorsque a b e ppem a b METHODE r sultat lt a x b pgcd a b 5 2 Programme pPgcdppcm c int pgcd int a int b if a b return a if a lt b return pgcd a b a if a gt b return pgcd b a b int ppcm int a int b return a b pgcd a b test c include lt stdio h gt int pgcd int a ini int ppcm int a ini void main void test des fonctions pgcd et ppcm int a int b printf n introduisez deux nombres entiers positifs scanf d d amp a amp b printf n pgcd d ppcm d n pgcd a b ppcm a b
173. e 1 dialogue phase 2 calculs phase 3 r sultats freopen resultat lis w stdout A CLARINVAL Le langage C 3 8 Exercices R aliser toutes sortes de dialogues au terminal demander d introduire des donn es lire ces donn es les r afficher titre de v rification Exemple demander les l ments d une tiquette d adresse puis mettre en forme cette tiquette Tester notamment toutes sortes de formats pour printf et scanf D vier les r sultats par exemple l tiquette d adresse dans un fichier imprimer A CLARINVAL Le langage C 3 9 A CLARINVAL Le langage C Chapitre 4 Les expressions 1 D finitions 1 1 El ments d une expression Les expressions arithm tiques ex prix net taux tva 100 logiques ex n gt 1 etc consti tuent une forme syntaxique fondamentale des langages de programmation et particuli rement de C Le probl me r solu par une expression est le suivant construire une nouvelle valeur sur la base de valeurs pr existantes Ces valeurs pr existantes qu on appelle op randes sont combin es au moyen d op rateurs par exemple des op rateurs arithm tiques Particularit du langage C la grande diversit des op rateurs disponibles dont voici quelques uns des plus usuels e op rateurs arithm tiques multiplication e op rateurs de comparaison gal diff rent lt lt inf
174. e Green 2 3 Elimmation de la r c rsivit rss rare ne a e D nn A dr A R cursivit terminale d g n r e Appel r cursif simul oossoo 3 Analyse d une expression arithm tique ss XOFCICES SR RMS ER AR RU RS rte ete A CLARINVAL Le langage C vi
175. e a E Ne ce T E 5 2 1 2 Conventions g n rales du langage iisiiieeeeerereeeeeeneeeeeeenesee 5 3 Terminateur d instruction sssessesssessoesseesseeseeee n 5 3 Bloc noesa os rare er cr 5 3 Condition nes 5 4 2 LS constructions iterat v s onele eina ane a re ess EE E EA E nee de Let de DURE 5 4 2 1 Waller eni r aa E ha 2 5 4 Simplification de la Construction sans es nd nets lisse 5 6 Programmes hi rarchis s 2 24 anti it te nn E an nt an rt 5 6 3 Les constructions alternatives seen Sr nm en amies men Me nn ne sn ten Are Gide RE SA ie D crue der RS Sn tt Construction if ou expression conditionnelle 3 2 switch sass soetrsorimicnnsrei ST E TR Ea 4 Les instructions de saut 4 1 break continue aiirses irsinin sn o 4 2 return expression serren arrei r s 43 poto etgueller seyner EE E E E E E dns i e a fo A Fin d ex cution du programme fonction exit seen Or LG F CUESIVIE 2 RE A me ARR I A Elimination de la r cursivit ss 7 Programmation par fonctions ss 7 1 M thodes de composition de fonctions COMPOSITION Seguen ellene aaaea a TER Re SRE SUR in ee RSS en SES at En Composition par embo tement in a a a aE E aee aes iia aaaea Composition cach e encapsulation ssessssessessesesessssessssessssrsrssssrsrssrsrrsesstststsressesesesessrstesesrestssestestesesest 7 2 Crit res de d composition en fonctions sise
176. e annee e Port e des d clarations Un nom de membre n est jamais employ seul il est toujours pr fix par le nom de la variable structur e dont il fait partie et c est cette d signation compl te qui doit tre univoque En cons quence tous les noms de membres d une m me structure doivent tre diff rents le m me nom peut identifier des membres de deux structures distinctes ex le membre no commande des structures entete commande et ligne commande Op rations 3 Copie de structures Il est possible de copier des structures c est dire d affecter une variable structur e S une autre variable structur e S du m me type Cette copie peut prendre trois formes expression d affectation absolue ex commande archivee commande en cours date paiement date du jour affectation un param tre de fonction affectation au r sultat d une fonction Exemple La fonction echeance re oit en param tre une date de d part et un d lai n en nombre de jours elle rend en r sultat la date d ch ance n jours fin de mois n 30 60 90 Les deux dates param tre et r sultat sont deux variables structur es du m me type Puisque le param tre for mel date de d part est une copie du param tre effectif la pr paration du r sultat peut se faire par modification du param tre formel plut t que d utiliser une variable de manoeuvre echeance c struct date s
177. e bloc de niveau b dans le bloc de niveau b 1 incluant le bloc de niveau b dans la fonction de niveau 2 incluant le bloc de niveau 3 dans le module de niveau 1 incluant la fonction module d clar v1 d clar f1 p1 p2 d clar v2 d clar 2 pl d clar v2 v3 d clar v1 v3 utilis f1 p1 vil v2 v3 en gras d clarations utilis es e Un m me identificateur d clar dans deux parties disjointes d signe donc deux objets distincts Exemples pl v2 e Un identificateur d clar dans une partie de programme peut tre red fini dans une partie incluse dans la premi re exception les identificateurs des param tres formels d une fonction ne peuvent pas tre red finis comme variables locales dans un bloc interne cette fonction Dans ce cas la d finition la plus int rieure cache l autre c est dire que l objet d fini par la premi re d claration n est pas accessible dans la partie incluse Exemples vl v3 Extension de visibilit des d clarations globales extern La visibilit d un objet global fonction ou variable peut tre tendue au moyen d un rappel de d finition externe A CLARINVAL Le langage C 7 4 Les objets publics d finis dans un premier module sont accessibles aux fonctions d finies dans un second module s ils sont dans ce second module red clar s comme extern Le qualificatif extern doit tre explicitement indiqu pour
178. e caract res pris dans l expression gt longueur du symbole abcdefghijklmnopqrstuvwxyz 0123456789 caract permis dans un nom 2 6 2 6 test c include symb sv c int main void test de la fonction symb sv char expr 80 1 posit posit gt position courante Symbole symb descr de symbole puts Introduisez une expression correcte posit gets expr lire l expr et initialiser posit if posit return 1 pas d expression while posit 0 jusqu au bout de l expression posit symb sv posit amp symb extraire switch symb categ afficher case 9 printf n 2d g symb longueur symb texte nbre break case A printf n 24d s symb longueur symb texte nom break default printf n 2d c symb longueur symb texte oper Remarque Entrer un texte en m moire par la fonction gets puis le d couper au moyen de la fonction sscan pr sente sur la lecture directe par scanf un avantage appr ciable cela permet de revenir en arri re sur des positions du texte d j examin es 6 4 Conversion de nombres fichier lt stdlib h gt Le fichier d en t te standard lt stdlib h gt propose plusieurs fonctions moins g n rales que sscanf pour convertir une cha ne de caract res repr sentant un nombre Voici les plus usit es int atoi const char s X ASCII string to int long atol const
179. e cette structure ou NULL en cas d chec de la connexion on dit que la fonction fopen rend un pointeur de fichier 5 Exemple Dans un programme de facturation livraison on pourrait trouver ce qui suit FILE commandes clients tarif stocks factures commandes fopen cdes dat rb clients fopen clients dat rb tarif fopen tarif dat rb stocks fopen stocks dat r b factures fopen fact lis w 2 2 Fermeture d un fichier fclose La fonction fclose d connecte un fichier c est dire qu elle lib re les ressources mat rielles notamment de m moire qui lui taient allou es int fclose FILE ptr fichier La fonction close re oit en param tre le pointeur de fichier d crivant le flot de donn es fermer En cas d chec elle retourne le signal EOF valeur n gative sinon elle retourne z ro Remarque Lorsque l ex cution d un programme se termine tous les fichiers qu il a ouverts sont automatiquement ferm s s ils ne l ont pas t par un appel de la fonction fclose 65 Dans le syst me UNIX et dans les biblioth ques C standards le terme descripteur de fichier poss de une autre signification c est pourquoi nous devons ici viter de l employer Le langage C page 10 3 2 3 Exemple La fonction f existe teste l existence du fichier dont elle re oit le nom Elle le fait en tentant d ou vrir le fichier pour lecture
180. e classe autoris est register e type le pseudo type void vide est employ pour signaler l absence de param tres bien que cela n ait aucune utilit le qualificatif void peut tre suivi d un identificateur e initialisation chaque appel d une fonction chaque param tre formel re oit comme valeur initiale copie de la valeur du param tre effectif correspondant d s lors une d claration de param tre ne comporte jamais de clause d initialisation A CLARINVAL Le langage C 7 14 Rappel de d claration prototype Le prototype rappel de signature d une fonction reproduit les l ments suivants de sa d claration primaire droit classe type identificateur d claration des param tres formels Le prototype est suivi du terminateur e classe le seul qualificatif de classe autoris est le qualificatif extern il peut tre laiss implicite e param tres dans le prototype d une fonction la d claration de chaque param tre peut tre r duite la seule indication de son type les autres l ments de la d claration ont une utilit purement documentaire 3 Soulignons que la mention d un identificateur bien choisi am liore grandement la lisibilit du programme exposant date Exemples int pgcd int int ou extern int pgcd int int int ppem int int ou extern int ppcm int int float puiss float int ou float puiss float racine int
181. e et modifie en cons quence la position courante d finition de nom putc Cette fonction est galement disponible sous la forme d une macro te ini FHPCT Hicht r tc ini sapt frchr r param tres le caract re crire le pointeur du flot vis retour le caract re crit EOF en cas d erreur La fonction putchar c est quivalente fputc c stdout 4 2 Lecture Ecriture d une cha ne de caract res fgets fputs e La fonction fgets lit le texte d une cha ne de caract res partir de la position courante dans un flot de texte en entr e et modifie en cons quence la position courante char fgets char texte int n FILI E ptr fichier param tres l adresse d un tableau de caract res qui recevra le texte lu la dimension n de ce tableau le pointeur du flot vis retour l adresse du tableau NULL en cas d erreur ou de fin de fichier e Le tableau r cepteur contient sous la forme d une cha ne de caract res cl tur e par 0 le texte lu puisque la dimension du tableau est n la fonction lit au plus n 1 caract res e Toutefois si un caract re n de fin de ligne est rencontr avant que le tableau soit rempli ce ca ract re de fin de ligne est copi dans le tableau et la lecture s arr te le terminateur 0 est ajout La fonction fputs crit le texte d une cha ne de caract res la position courante dans un flot de texte en sortie et m
182. e expression arithm tique introduite au clavier On supposera ici que toute op ration est exprim e sous la forme d un appel de fonction par exemple une addition se libellera comme ceci plus 2365 4317 Cette restriction apporte une double simplification tous les op rateurs ou fonctions poss dent la m me forme syntaxique et la m me priorit Une expression est soit un nombre soit un appel de fonction tout param tre d une fonction est lui m me une expression nombre ou appel de fonction La d finition syntaxique d une expression appara t donc r cursive Une d finition syntaxique une grammaire formelle est habituellement pr sent e sous la forme d un en semble de r gles de production calcul expression fonction param tres param suiv param tre expression 0 en s quence nombre fonction r gles alternatives nom param tres membre facultatif param tre param suiv membre r p titif param tre expression Cet ensemble de r gles peut tre illustr par l arbre de d rivation ci dessous calcul param tre param sv A CLARINVAL Le langage C param tre 12 10 Le programme est pilot par l analyseur syntaxique qui v rifie la forme de l expression Ce module demande la fonction symb_sv symbole suivant de l analyseur lexical de lui fournir un un les symboles nombres noms signes sp ciaux formant l expression Cette fonction cr e un descript
183. e langage C 5 12 int pgcd int a int b calcul du plus grand commun diviseur return a lt b pgcd a b a a gt b pgcd b a b a int date valide int jj int mm int aaaa contr le d une date int jours dans mois 12 31 29 31 30 31 30 31 31 30 31 30 31 return mm gt 1 amp amp mm lt 12 amp amp jj gt 1 amp amp jj lt mm 2 aaaa 4 0 29 28 jours dans mois mm 1 3 2 switch La construction switch aiguillage comporte un bloc d instructions l int rieur duquel sont d finis plu sieurs points d entr e L ex cution de la construction commence par valuer une expression souvent une simple variable et en fonction de la valeur de cette expression s aiguille sur un des points d entr e d finis dans le bloc d instructions Exemple fonction renvoyant le nombre de jours du mois donn ou 0 si le param tre est invalide short int jours mois short int mois short int annee short int jours switch mois selon le num ro du mois case case case case case case case sortir de la construction case case case case jours 30 break sortir de 1 case if annee 4 0 jours break sortir de la default jours 0 autres return jours Syntaxe et interpr tation switch expression bloc A CLARINVAL Le langage C 5 13 L expression valu e doit tre d un type e
184. e peut se d placer avancer ou reculer dans la liste Autre application un diteur de textes les lignes du texte sont g r es dans une liste doublement cha n e chaque ligne est elle m me une liste de caract res Transformer la liste doublement cha n e de l exercice pr c dent en liste circulaire dans laquelle les deux maillons vides sont fusionn s en un seul A CLARINVAL Le langage C 11 21 Lorsqu il analyse le texte d un programme un compilateur cr e en m moire centrale une table des symboles Chaque fois qu il rencontre la d claration d un symbole c est dire un nom il introduit dans cette table la description du symbole en question son nom et sous forme cod e ses attributs Chaque fois qu il rencontre une r f rence un symbole il v rifie dans la table que le symbole a t d clar et qu il poss de les bons attributs On demande de cr er les fonctions permettant de g rer une table des symboles Compte tenu du nombre total de symboles dans le programme nombre estim a priori par exemple en fonction du nombre de lignes du texte on r serve en m moire centrale un espace pour un tableau de N descripteurs a Le calcul d adresse Pour attribuer un emplacement un descripteur on doit faire subir au nom du symbole une double transformation une fonction h1 transforme le nom symb en un nombre entier positif ent et une fonction A20 transforme ce nombre entier en indice ind d emplace
185. e valide 5 8 Incr mentation d cr mentation Groupes d op rateurs 15 suffixes post incr mentation x post d cr mentation XD 14 pr fixes pr incr mentation x pr d cr mentation TX L op rande x peut tre un pointeur associ un tableau et dont la mise jour n est pas interdite par l attribut const L op ration d incr mentation d cr mentation est souvent associ e avec l indirection 11 importe alors de savoir quelle variable est modifi e le pointeur ou l objet sur lequel il pointe Le tableau ci dessous explique le comportement de ces op rations au moyen de deux quivalences quivalence entre adressage indirect et indexation quivalence entre incr mentation d cr mentation et expressions s quentielles p affect p Ka i i i 1 v i p p 1 p x p lt gt j i i 1 vlil p p 1 p i ir Vae p p 1 p 1 j i i 1 vlit i p p 1l p 1 v affect p j v i v i 1 v i p p 1 p p j vli vli 1 vli p p 1 p j v i v i 1 v i 1 p p 1 p 1 j vli vli 1 vli 1 Xp p 1 p 1 5 9 Appel de fonction x Un appel de fonction peut passer comme param tre effectif une adresse ou un pointeur le param tre formel correspondant est un pointeur permettant la fonction appel e d adresser indirectement dans la fonction ap pelante l objet rep r Une fonction peut renvoyer comme r sultat une adre
186. e vraie ou fausse si elle est omise l ex cution se d roule comme si l on avait crit une condition toujours vraie Si le bloc oper est form d une seule instruction ou construction on peut omettre les accolades Interpr tation La construction for init cond incr oper est quivalente une construction while compl t e de la fa on suivante init while cond oper incr Comme ses quivalents dans les autres langages de programmation la construction for a t con ue comme une formule plus compacte susceptible de remplacer la construction while lorsque les pas de l it ration doi vent tre compt s e l expression init affecte une valeur initiale au compteur elle est omise si cette valeur est d j tablie e la condition cond v rifie que la valeur courante du compteur est comprise dans l intervalle pr vu en pra tique puisque l expression init garantit une initialisation correcte la condition teste simplement que le comp teur n ait pas d pass la fin de l intervalle e l expression incr incr mente le compteur ou plus g n ralement le fait voluer vers la condition d arr t Utilisation La construction for est employ e pour piloter l algorithme des fonctions num riques it ratives dont le nombre d it rations d pend de la valeur d un param tre A CLARINVAL Le langage C 5 8 Exemple float puiss float n int p lever n la puissance p float resultat
187. eci peut poser de s rieux pro bl mes lorsque l on veut porter un programme d un ordinateur sur un autre Le type int est le type privil gi du langage C Lorsqu elle est utilis e l int rieur d une expression arith yp pe p g gag q m tique par exemple une donn e d un type plus court char ou short est automatiquement transpo s e dans le type int L op rateur sizeof L op rateur sizeof renvoie sous la forme d un entier la taille d un objet en nombre d octets Son param tre est soit un nom de type soit une expression la plus simple tant un nom de variable 9 La plupart des langages de programmation n ont pas de types unsigned Le langage C vise ici offrir des op rations quivalentes aux op rations des langages assembleurs A CLARINVAL Le langage C 2 6 Les relations suivantes sont donc vraies sizeof char lt sizeof short int lt sizeof int lt sizeof long int sizeof float lt sizeof double lt sizeof long double 3 Les constantes litt rales Une constante est une zone de m moire dont le contenu la valeur ne peut pas tre modifi pendant l ex cution du programme Le plus souvent pour r f rencer une constante on en crit directement la valeur on dit qu on utilise des constantes litt rales La valeur des constantes litt rales est connue d s le stade de la compilation 3 1 Constantes scalaires 1 Une constante enti re peut prendre trois formes e nombre
188. el r cursif est la derni re op ration ex cut e dans le corps de la fonction l ex cution de cet appel n est suivie que de return on peut crire une version it rative de la fonction dans laquelle la r p tition des appels r cursifs est remplac e par un traitement en boucle TANT QUE NON issue non r cursive EXECUTER simulation de l appel r cursif FIN TANT traitement final d issue non r cursive La simulation d un appel r cursif consiste ici simplement donner de nouvelles valeurs aux param tres de la fonction La version it rative est plus conome en espace de m moire elle supprime l empilement des param tres et variables et en temps d ex cution elle vite les op rations d administration des appels et retours de fonc tions Appel r cursif simul Dans les autres cas le programmeur doit assurer lui m me les op rations que le compilateur prend sa charge dans le cas d un appel r cursif empiler et retirer les param tres et variables forcer le branchement de l ex cution sur le d but pseudo appel et la poursuite pseudo retour de la proc dure r cursive Une telle programmation utilise des instructions de branchement goto et une pile de donn es La pr sence des instructions goto de rupture de s quence emp che l usage des constructions en boucle while etc A CLARINVAL Le langage C 12 9 3 Analyse d une expression arithm tique Le programme calculette affiche le r sultat d un
189. emple pgcdppcm h pgcdppcm h module fonctions math matiques utilitaires prato version 2 27 09 93 auteur version 1 10 09 93 auteur lt A C AC int pgcd int a int b calcul du plus grand commun diviseur de deux nombres entiers algorithme r cursif tous les nombres sont strictement gt 0 74 int ppcm int a int b calcul du plus petit commun multiple de deux nombres entiers en utilisant la formule a b pgcd a b ppcm a b tous les nombres sont strictement gt 0 WA A CLARINVAL Le langage C 1 18 Exercices Tester les programmes donn s en exemple dans le texte du chapitre Essayer les diff rents modes de r partition en fichiers sources Telle qu elle est programm e dans les exemples la fonction main permet de tester chaque fonction de calcul pour un seul couple de valeurs Proc der aux adaptations n cessaires pour pouvoir r p ter le test un nombre ind termin de fois jusqu ce que le premier nombre du couple introduit soit 0 L algorithme est le suivant demander un premier couple de valeurs TANT QUE le premier nombre introduit est diff rent de 0 EXECUTER appeler la fonction tester demander un nouveau couple de valeurs FIN TANT Sur le mod le de la fonction pgcd r diger une fonction calculant la factorielle n d un nombre entier positif Ecrire les deux formes r cursive et non r cursive de la fonction D finition
190. emple Le programme ci dessous demande son utilisateur d introduire un un une suite de nombres termin e par 0 apr s quoi il affiche le total include lt stdio h gt void main void int n long int total 0 while printf gt scanf d amp n n 0 total n printf total ld total Priorit L op rateur est celui qui a la priorit la plus basse Il n est donc jamais n cessaire de placer un de ses op randes entre parenth ses Mais lorsqu une expression s quentielle sert d op rande elle doit elle m me tou jours tre mise entre parenth ses 8 Effets de bord Les r gles d associativit d finissent l ordre d valuation des op rations c est dire des op rateurs dans une expression Sauf dans le cas des expressions algorithmiques l ordre d valuation des op randes d une op ra tion n est pas d fini Ceci peut entra ner des effets ind sirables appel s effets de bord dans le cas o la valeur d un op rande d pend de la valeur de l autre Ce qui peut arriver lorsqu un op rande est une sous expression d affectation ou d appel de fonction qui modifie la valeur de l autre op rande Exemple i 4 valuation gt valuation GIEL S OISZ lt gt c 5 10 ou c 9 8 RECOMMANDATION On ne doit jamais d sirer un effet ind sirable cela pi gerait tous les lecteurs A CLARINVAL Le langage C 4 22 9 Suppl ment Quelques foncti
191. en cours dont la priorit est sup rieure ou gale en r alit il se trouve au maximum une op ration dans cette situation de plus chaque fois que l analyseur syntaxique atteint la fin d une expression il y a lieu d ex cuter les op rations de cette expression qui ne l ont pas encore t Pour chaque expres sion rencontr e la pile des op rations doit donc contenir un rep re de d but que les routines s man tiques peuvent traiter comme une fonction COPIER de priorit 0 et sans effet sur la pile des va leurs La fonction d affichage du r sultat doit poss der la priorit la plus basse 84 Plut t que op rateur 1 valeur L analyse d une telle construction o le premier membre est facultatif ne saurait comment interpr ter absence ou erreur la non reconnaissance du second membre A CLARINVAL Le langage C 12 25 e Analyse lexicale La fonction symb_sv d extraction d un symbole ne tient pas compte du fait que dans l expression lue un nom pourrait tre plus long que la zone de r ception dans le descripteur Il y aurait lieu de d terminer d abord la longueur r elle du nom dans l expression sscanf S x n et de ne copier dans le descripteur que les 31 premiers caract res au maximum La m me fonction symb_sv peut tre adapt e pour accepter une expression s tendant sur plusieurs lignes Par exemple la rencontre du caract re pourrait provoquer la lecture d une nouvelle ligne
192. ents aspects du traitement des tableaux par une fonction On nonce ici deux particularit s dont l explication sera donn e dans ce chapitre 1 Lorsqu on passe un tableau en param tre une fonction celle ci re oit en r alit l adresse de ce tableau et non pas une copie du contenu du tableau En cons quence si la fonction appel e modifie le contenu du tableau cette modification alt re le contenu du param tre effectif dans la fonction appelante 2 Une fonction ne peut pas renvoyer return un tableau en r sultat Exemple appel de la fonction de lecture scanf char texte 80 1 tableau de caract res scanf s texte garnissage du tableau par la lecture d une cha ne de caract res scanf s amp texte idem amp facultatif scanf c amp textel 0 garnissage d un l ment par la lecture d un caract re N B amp adresse de Lorsqu on programme une fonction op rant sur un tableau dont elle re oit l adresse en param tre on souhaite habituellement en faire une fonction g n rale capable de traiter un tableau de dimension quelconque Elle doit donc trouver dans ses param tres une information lui permettant de conna tre la dimension effective du tableau quant celui ci il sera d clar de dimension ind termin e Exemple prototype d une fonction ayant pour but d ordonner trier les l ments d un tableau void trier int tableaul
193. ents cas sont disjoints et les op rations ex cuter dans chaque cas forment normalement des s quen ces disjointes tel est l effet de l instruction break L exemple ci dessous produisant le m me r sultat que le pr c dent l obtient par des traitements non disjoints Cette forme sent l astuce et est beaucoup moins recommandable parce que 1 l ordre de r daction des cas et instructions ne peut pas tre modifi 2 l utilit de cet ordre est rarement explicit e par un commentaire 3 les valeurs entrant dans les calculs sont des valeurs d duites du raisonnement astucieux du programmeur plut t que les valeurs naturelles 26 break est une instruction par soi m me utilisable l int rieur d une construction switch mais gale ment dans d autres contextes A CLARINVAL Le langage C 5 14 short int jours mois short int mois short int annee fonction retournant le nombre de jours du mois donn retourne 0 si le num ro de mois est invalide short int jours 28 valeur pos e au d part switch mois selon le num ro du mois 1 mois de 31 jours case 1l case 3 case 5 case 7 case 8 case 10 case 12 jours 2 mois de 30 jours case 4 case 6 case 9 case 11 jours 3 f vrier case 2 if annee 4 0 jours 29 jours break default jours 0 autres cas erreur return jours 4 Les instructions de
194. er s par ment cha que l ment d un ensemble ils contiennent galement des traitements s appliquant sp cifiquement l ensem ble et des sous ensembles d l ments A CLARINVAL Le langage C 5 6 La structure de ces programmes est constitu e de boucles wh1i 1e embo t es l une dans l autre Illustrons ce sch ma par l exemple suivant Lisant des relev s de fabrication par ateliers on im prime les totaux de fabrication par usines et le total g n ral il s agit d une firme poss dant plu sieurs usines Ce programme est hi rarchis sur trois niveaux traitement de l ensemble firme traitement de chaque sous ensemble usine traitement de chaque l ment atelier Chaque ligne du fichier d entr e se pr sente comme ceci uaa total eu num ro d usine 1 chiffre aa num ro d atelier dans l usine 2 chiffres blanc s total void main void short int no usine short int no atelier int total atelier donn es lues int signal nbre de donn es obtenues par scanf doit tre 3 lt 0 en fin de fichier 1 re lecture signal scanf ihd 2hd d amp gno usine amp no atelier amp total atelier while signal 3 traitement d une firme long int total firme var locale total firme 0 while signal 3 traitement d une usine long int total usine var locale short int usine traitee id du ss ens total usine 0 usine tr
195. es num ro d inscription type entier nom et pr nom sexe cod par l initiale Masculin F minin tat civil cod par l initiale C libataire Mari Divorc Veuf adresse postale rue et num ro num ro de bo te localit num ro du code postal nom Remarque Les deux codifications sexe et tat civil sont d clarer par enum Programmer les fonctions suivantes e Garnir le tableau lt Garnir une fiche D finir judicieusement les param tres et le r sultat de la fonction Garnir une fiche Le texte de chaque fiche est pr sent sur une ligne dans un fichier d entr e lire par scanf chaque donn e y est suivie du signe Imprimer les tiquettes d adresses Imprimer une tiquette D finir judicieusement les param tres et le r sultat de la fonction Imprimer une tiquette Les tiquettes sont crites dans un fichier de sortie Chaque tiquette est mise en page dans une zone rectangulaire de 8 lignes de 40 colonnes Chaque tiquette pr sente les informations suivantes coin sup rieur gauche num ro d inscription ligne d identification pr fixe Mademoiselle Madame Monsieur nom et pr nom 1 ligne d adresse rue et num ro pr fixe Bte num ro de bo te 2 me ligne d adresse num ro du code postal nom de la localit Cr er le programme et le tester typedef R crire le programme ci dessus en d clarant
196. es unsigned int strlen s1l indique le nombre de caract res de s1 terminateur 0 non compris void memset s2 c n place le caract re c dans chacune des n premi res positions de s2 s2 ne peut pas tre une constante renvoie l adresse s2 e Exemple Le programme de test ci dessous demande d introduire une cha ne de caract res au clavier la fonc tion gets accole automatiquement au texte le terminateur 10 Le texte introduit est r affich sur une ligne compl t e par des points jusqu la marge de droite include lt stdio h gt include lt string h gt int main void char texte 41 ligne 81 puts tapez un texte 40 caract max gets texte gets accole le terminateur 0 memset ligne sizeof ligne 1 pr garnir la ligne avec lignefsizeof ligne 1 0 placer un terminateur de cha ne memcpy ligne texte strlen texte copier le texte sans 0 puts ligne exit 0 ou return 0 terminaison OK 6 2 Allocation dynamique de m moire fichier lt stdlib h gt Le fichier standard d en t te lt stdlib h gt contient entre autres choses la d finition d un ensemble de fonc tions utilitaires pour l allocation dynamique de m moire Les blocs de m moire sont pris dans la r serve que constitue le tas heap en anglais 60 60 Cf chapitre 7 A CLARINVAL Le langage C 9 21 void malloc size t t alloue
197. es au tres signes Le concept d alphabet En informatique un alphabet est un ensemble de caract res ensemble muni d un ordre appel s quence de classement ce qui rend les caract res comparables A lt B lt C La position d un caract re dans l alphabet est indiqu e par la valeur num rique laquelle il correspond 7 On a d crit ici le m canisme de virgule flottante tel qu il est per u par un programmeur C voir ci apr s Les constantes litt rales En r alit la base b 2 et la mantisse est normalis e 7 b lt m lt 1 de plus les positions relatives de la mantisse et de l exposant sont invers es A CLARINVAL Le langage C 2 3 Fondamentalement un caract re l ment d un alphabet est un nombre binaire repr sentable en m moire centrale de l ordinateur Tous les l ments d un alphabet ne sont pas n cessairement repr sentables sur les autres supports en particulier certains caract res n ont pas de repr sentation graphique Ils servent de si gnaux pour la commande des terminaux fin de ligne signal sonore des imprimantes saut de ligne ou de page des t l transmissions annulation fin de texte e valeur logique ou bool enne un nombre binaire peut tre interpr t comme figurant une des deux valeurs logiques vrai ou faux pour le langage C le nombre 0 repr sente la valeur faux tout autre nombre repr sente la valeur vrai e adresse de m moir
198. es mais cela n aurait aucun sens Exemple l expression suivante constitue un OU exclusif entre deux comparaisons l expression compl te est vraie si des deux comparaisons l une n importe laquelle est vraie et l autre fausse a b a c A CLARINVAL Le langage C 4 9 Associativit En C les op rateurs de comparaison sont associatifs on peut donc crire des expressions telles que a gt b gt 0 ou a b c Ces mani res de faire inhabituelles sont proscrire car leur r sultat est rarement celui qu on croit Illustrations expressions valuation interpr tation 4 3 Op rations logiques Op rateurs Groupes d op rateurs n gation compl ment logique logiques ET produit logique m OU somme logique Comme les op rations arithm tiques combinent les valeurs num riques les op rations logiques combinent les valeurs logiques vrai et faux Les tableaux ci dessous indiquent la valeur des expressions suivant la valeur logique des op randes Les ta bleaux de droite donnent l quivalent num rique utilis par l alg bre de Boole sur la base des quivalences suivantes faux 0 vrai 1 e n gation compl ment logique x vrai si l op rande est faux faux dans l autre cas e ET produit logique x amp amp y vrai si les op randes sont tous les deux vrais faux dans les autres cas si le premier op rande est faux le second n est pas valu e OU som
199. es appel de fonction indexation s lection de membre s lection de membre post incr mentation post d cr mentation pr incr mentation pr d cr mentation adresse de indirection plus moins compl ment sur bits n gation logique 1x taille de x sizeof x conversion au type TYPE X 13 multiplicatifs multiplication division modulo reste 6 additifs addition soustraction 12 11 0 6 de d calage d calage gauche d calage droite 1 relationnels sup rieur sup rieur ou gal inf rieur inf rieur ou gal d galit ue S j diff rent bool ens sur bits ET intersection OU exclusif OU inclusif union o6 OU seme OU somme conditionnel 02 affectation affectation absolue ES affectation relative s quentiel s quentiel min certains op randes peuvent ou doivent tre des pointeurs a en italique les op rateurs d adressage en gras les op rateurs effectuant une affectation b tout op rateur pris dans les groupes marqu s de ce signe A CLARINVAL Le langage C 4 4 3 Le type des op randes Conversions de types Lors de l valuation d une expression il se peut que certains op randes soient convertis dans un autre type que leur type d origine Ces conversions sont principalement justifi es par la taille de la repr sentation des valeurs 3 1 L op rateur sizeof L op rateur sizeof renvoie sous la forme d un entier la taille en nombre d octe
200. es champs code _type_ ligne dont la valeur ne pourra tre d finie que par une clause d initialisation la d clara tion des variables D finition math matique structure relation Comme tout type de donn es un type structur d finit un ensemble ou domaine de valeurs D un point de vue math matique si nous disons que le type de chaque membre d une structure repr sente un sous domaine de valeurs le type structur constitue une relation entre ces sous domaines c est dire un sous ensemble de leur produit cart sien Chaque combinaison de valeurs admissible c est dire toute valeur d une variable structur e est un n uplet de cette relation 46 Soit la d claration struct date short int jour mois annee Si l on se restreint aux seules valeurs admissibles le domaine jour contient 31 valeurs 1 31 le domaine mois contient 12 valeurs 1 12 le domaine annee cod sur 4 chiffres contient 10 000 valeurs 0000 9999 leur produit cart sien contient 31 x 12 x 10 000 3 720 000 n uplets Certains mois ayant moins de 31 jours il est clair que le domaine date contient moins de valeurs et ne repr sente donc qu une partie de ce produit cart sien Op rations 1 Taille d une structure L op rateur sizeof peut tre utilis pour conna tre la taille d une structure On peut lui d signer comme op rande soit un type structur soit une variable structur e Exemples sizeo
201. es dans plusieurs mo dules fichiers sources compil s s par ment Se pose d s lors la question de l accessibilit des variables partir des diff rentes fonctions comme celle de l accessibilit d une fonction partir d une autre 30 1 Attributs d une variable D clarer une variable ou une fonction c est lui donner un nom identificateur en m me temps qu on en pr cise les attributs Une variable est caract ris e par les attributs suivants e son type d finissant le domaine o elle prend ses valeurs les types de base sont indiqu s par des mots cl s du langage voir chapitre 2 d autres types construits au d part des types de base seront tudi s au chapitre 8 e la port e de son identificateur qui d termine les endroits du programme d o elle peut tre d si gn e et atteinte e sa dur e de vie ou sa classe d finissant la p riode pendant laquelle un emplacement de m moire lui est allou sa valeur initiale e le droit de mise jour octroy aux programmes Puisque d clarer une fonction revient d clarer les variables param tres et r sultat qui en constituent l interface la plupart de ces attributs sont aussi ceux d une fonction 1 1 Port e et visibilit On appelle port e d un identificateur la partie de texte dans laquelle il peut tre utilis pour r f ren cer l objet qu il d signe on dit galement que cet objet est visible dans cette partie du texte
202. es param tres Sur la ligne de commande le nom du programme est suivi de mots s par s par des espaces Exemple echo Ah vous dirais je maman nom du programme echo param tres textes Ah vous dirais je maman La fonction main re oit deux param tres int main int argc char argv un entier argc argument count nombre de cha nes de caract res composant la commande g e un tableau argv argument vector de pointeurs vers les diff rentes cha nes suivis d un NULL A CLARINVAL Le langage C 11 4 Exemple argc 6 argv 0 echoo 1 gt Ah o 21 gt vous 3 gt dirais je 4 gt mamane 5 o 6 NULL Le programme standard echo copie en sortie ses param tres s par s par un espace echo c include lt stdio h gt int main int argc char argv argv tableau de pointeurs int i for i 1 i lt argc i boucle contr l e par le compteur argc printf s argvlil 1 3 Pointeurs de pointeurs On a vu qu un param tre formel d clar comme tableau peut de mani re quivalente tre d clar comme pointeur S il s agit d un tableau de pointeurs argv dans l exemple ci dessus on peut le d clarer comme un pointeur associ un tableau de pointeurs Exemples Le programme echo s crit alors comme ceci echo c include lt stdio h gt int main int argc char argv argv pointeur sur un tableau de pointeurs
203. es statiques Une variable stati que est cr e pendant le chargement du programme en m moire centrale sa valeur initiale est donc tablie avant l ex cution du programme en r alit cette valeur est calcul e par le compilateur qui l inscrit dans le texte binaire charger en m moire centrale En revanche une variable automatique est cr e pendant l ex cution du programme sa cr ation peut donc avoir recours une fonction du programme ou copier le contenu d une autre variable du programme Exemple g n ral Dans un programme hi rarchis les variables donn es cumulatives titre identifiant caract risant cha que sous ensemble d un m me niveau de d composition sont en principe d clar es localement l int rieur du bloc traitant les sous ensembles de ce niveau leur d claration peut les initialiser Nous reproduisons ici en le modifiant l g rement l exemple repris plus haut A CLARINVAL Le langage C 7 9 include lt stdio h gt int main void donn es lues short int no usine short int no atelier int total atelier l re lecture int signal scanf lhd 2hd d amp no usine amp no atelier amp total atelier le nbre de donn es obtenues doit tre 3 while signal 3 traitement d une firme long int total firme 0 var locale while signal 3 traitement d une usine short int usine traitee no usine id
204. et global de cette op ration est de mettre en place les moyens mat riels et logiciels n cessaires la communication avec le fichier FILE fopen char nom fichier char model e Le premier param tre de la fonction fopen est l adresse d une cha ne de caract res contenant le nom par lequel le syst me d exploitation d signe le fichier Ce nom peut prendre n importe quelle forme reconnue par le syst me d exploitation Exemples valides pour le syst me MS DOS C 4PPL ventes cdes dat CDES DAT e Le deuxi me param tre est l adresse d une courte cha ne de caract res indiquant de mani re cod e le mode d ouverture souhait Ce code signale les intentions du programme par rapport au fichier mention obligatoire 1 caract re r read le programme veut lire des donn es le fichier doit pr exister w write le programme veut cr er le fichier si un fichier du m me nom pr existe il est cras a append le programme veut augmenter le fichier en crivant de nouvelles donn es si le fichier n existe pas il est cr mention additionnelle facultative le programme souhaite faire de la mise jour c est dire la fois des op rations de lecture et d criture cette option n est possible que pour un fichier sur support adressable mention facultative b binary interpr ter le contenu du fichier comme tant binaire sinon interpr ter le contenu du fichier comme tant du t
205. et tableaux 3 1 Parent entre tableaux et pointeurs Soit une d claration de tableau 53 par exemple short int tIN Lorsqu on le suffixe par un indice le nom t d signe un l ment du tableau t i Employ seul le nom t d signe l adresse de d but du tableau t amp t 0 t n est donc pas synonyme de t 0 En d autres termes un identificateur de tableau d signe une constante contenant une adresse sauf dans les op rations du compilateur sizeof et amp o il d signe le tableau il s ensuit que t amp amp t sizeof t donne la taille du tableau pas de la constante adresse val variable variable variable variable variable variable adr 76 78 80 82 84 86 d sign t t 0 LL t 2 els t 4 ets d sign 2E X E 1 ATEA Et 3 t 4 E 5 Puisque le nom t d signe en r alit un mot de m moire contenant une adresse les deux modes de d signa tion illustr s ci dessus par indexation t i ou par indirection t i sont quivalents 54 Note C est cette quivalence qui justifie que les valeurs d indice commencent 0 plut t qu 1 3 2 Calculs d adresses par d placement Cette quivalence explique les r gles du calcul d adresse augmenter ou diminuer un pointeur d un d placement i ajoute ou soustrait au nombre adresse qu il contient i fois la taille sizeof du type d objet rep r Le d placement unitaire est gal la taille du type d objet rep r Exemple
206. eur contient l adresse d une autre variable Soit un pointeur p contenant l adresse d une variable v on dit que p pointe sur v et que v est rep r par p On peut affecter un pointeur une valeur adresse p amp v e La d claration d un pointeur a la forme d une d claration de variable ordinaire ceci pr s que le type indiqu est celui de l objet rep r par le pointeur le pointeur ne pourra jamais pointer sur un objet d un autre type l identificateur attribu au pointeur est pr fix par exemples short int v 0 variable de type short int short int p ev pointeur sur un objet de type short int initialis pour pointer sur l objet v short int q pointeur non initialis id adr val short int v 0 v 16 p amp v P 18 gq q 20 6 2 Manipulation des pointeurs et adresses par les fonctions L tude des pointeurs fait l objet du chapitre 9 On l voque ici dans le seul but de permettre l appel de fonc tions standards qui re oivent en param tres ou retournent en guise de r sultat des adresses Exemple La fonction scanf re oit en param tres les adresses des variables o elle doit ranger les valeurs qu elle lit au clavier int compteur initialisation d un comptage printf nDonnez la valeur initiale du compteur scanf d amp compteur amp adresse de compteur 7 Les tableaux premi re approche 7 1 M canis
207. eur du symbole lu cat gorie position longueur et texte dont elle renvoie l adresse la fonction appelante Le module d analyse lexicale comprend aussi la fonction lire expr qui lit une expression et la normalise en convertissant les majuscules en minuscules Le module d analyse syntaxique est form d une hi rarchie de fonctions anal _ dont chacune correspond un noeud de l arbre de d rivation certaines concernent un symbole terminal ex nom ou et d autres une r gle de composition ex expression ou fonction Le r sultat d une analyse peut tre un des suivants VRAI la composition ou le symbole est reconnu valide FAUX la composition n est pas reconnue et aucun symbole n en fait partie on peut tester l appartenance du symbole courant une autre composition FAUX erreur certains composants mais pas tous ont t reconnus on conclut que la composition est incorrecte C est encore l analyseur syntaxique qui active les routines s mantiques du programme Ces routines exec ex cutent les actions n cessaires au calcul et l affichage du r sultat Elles manipulent deux piles une pile des op randes ou param tres et une pile des fonctions appel es lorsqu un nombre est reconnu il est plac au sommet de la pile des op randes lorsqu un nom de fonction est reconnu il est plac au sommet de la pile des fonctions on lui associe la hauteur actuelle de la pile des op ra
208. eur peut d clarer un ou plu sieurs noms ou identificateurs synonymes Partout o doit tre r f renc un type de donn es dans une d cla ration de variables ou de fonctions en guise d op rateur de coercition ou comme op rande de sizeof il peut tre d sign par un de ses synonymes D claration et utilisation La d claration de synonymes prend la forme suivante typedef sp cification de type identificateur identificateur Ce format est le m me que celui des d clarations de variables le mot typedef prenant la place de l indica tion de classe Exemples d clar de synonymes typedef signed int Quantite typedef float Prix typedef unsigned int Numero typedef unsigned int size t 49 d clar de variables Prix prix net a payer Quantite qte en stock stock plancher Quantite qte commandee qte livree Numero no client no produit d clar de type enum valeur logique FAUX VRAI d clar de synonyme typedef enum valeur logique Valeur Logique d clar combin e typedef enum FAUX VRAI Valeur Logique d clar de variables Valeur Logique option VRAI reponse d clar de type struct date short int jour mois annee d clar de synonyme typedef struct date Date d clar combin e typedef struct short int jour mois annee Date ou typedef struct date short int jour mois annee Date d c
209. exte 63 Sur l organe p riph rique disque imprimante la fin de ligne peut tre indiqu e autrement par exem ple par une combinaison des deux caract res r n carriage return new line Le fait d interpr ter le contenu d un fichier comme tant un texte peut donc impliquer une transformation automatique des don n es v hicul es conversion entre les diff rents modes de repr sentation de la fin de ligne Au contraire l interpr tation binaire n entra ne aucune transformation des donn es v hicul es 64 Si ce texte est une constante du programme il devra tre libell C APPL ventes cdes dat Le langage C page 10 2 e La fonction fopen d finit une position courante dans le fichier il s agit du d but du fichier c est dire la premi re position occup e sauf dans le cas d une ouverture sous le mode append o il s agit de la fin du fichier c est dire la position apr s la derni re occup e CEEECEEECEEECC ECC CEE EEE T T e Si la connexion r ussit la fonction fopen cr e en m moire centrale une structure d crivant l tat du flot ouvert structure utilis e par les fonctions d acc s pour g rer le flot Entre autres informations cette structure contient l indicateur de position courante et les indicateurs d erreur et de fin de fichier voir ci apr s Le type de cette structure est d fini dans le fichier lt stdio h gt sous le nom FILE La fonction rend en r sultat l adresse d
210. f struct bon commande taille d un type sizeof commande en cours taille d une variable e Alignement des membres en m moire Soit la taille sizeof en octets d un type scalaire Sur certaines machines toute variable scalaire est align e en m moire c est dire plac e une adresse multiple de sa taille Dans ce cas il se peut que certains mem bres d une structure n occupent pas des positions contigu s mais soient s par s par des positions de remplis sage au contenu ind termin 46 Cette d finition math matique constitue la proposition de d part du mod le relationnel des donn es de CODD mod le sur lequel reposent les syst mes de bases de donn es relationnels A CLARINVAL Le langage C 8 8 Exemple Si la taille d une variable int est 2 et si la taille d une variable float est 4 la repr sen tation d une fiche produit dans une m moire o les donn es doivent tre align es comportera deux zones de remplissage struct fiche produit unsigned int no produit char nom produit 12 1 int prix de vente float taux tva nom prix taux no 00 o1 02 03 04 os oe o7 os 09 10 11 12 13 14 15 18 19 Dans une telle situation la taille de la structure est sup rieure la somme des tailles de ses membres Op rations 2 D signation des membres Tout programme peut agir sur les membres d une variable structur e La d signation d un membre se fait sous
211. f PRIVATE static La r cursivit de l analyse syntaxique une expression peut tre un appel de fonction un param tre de fonc tion est une expression est r alis e par l appel r cursif de la fonction anal expr Il s agit de r cursivit indirecte puisque cet appel n mane pas de la fonction anal expr elle m me mais de la fonction anal param appel e indirectement par anal expr La r cursivit de l analyse s mantique le r sultat calcul par une fonction devient op rande d une autre fonc tion est r alis e par l emploi d une pile de param tres A CLARINVAL Le langage C 12 20 Exercices Ecrire une version it rative de la fonction localiser du programme arbre2 c page 12 8 Un texte source en langage C contient habituellement des directives include dont chacune d si gne un autre fichier Dans le texte transmis au compilateur le texte de chaque fichier inclus remplace la ligne include qui le d signe Comme un texte inclus peut lui m me contenir des directives include le proc d est r cursif Rappel Si dans une directive include le nom de fichier est crit entre les signes lt gt ce fichier est prendre dans un r pertoire standard R diger un programme developC qui traitant les directives include crit dans un fichier le texte transmettre au compilateur C La commande d ex cution de ce programme doit lui fournir trois pa ram tres
212. fonctions n effectuant aucune manipulation sur les pointeurs de cha nage 82 Cf chapitre 11 A CLARINVAL Le langage C 12 7 2 R gles de programmation des fonctions r cursives 2 1 Terminaison de l algorithme Pour que l ex cution d un algorithme r cursif ne se r p te pas l infini tout appel r cursif doit tre condi tionnel c est dire r dig l int rieur d une construction alternative if ou switch dans laquelle il existe une issue non r cursive Exemple Les deux appels r cursifs de la fonction ocaliser sont plac s dans un bloc else ayant pour pendant une condition de non r cursivit if ppn NULL arbre2 c extrait void localiser Noeud ppn char mot chercher et ins rer un noeud ds le ss arbre d adr ppn if ppn NULL creer ppn mot ACTION si non trouv else Noeud pn ppn supprimer une indirection int test strcmp mot pn gt texte if test 0 ACTION pour le cas trouv if test lt 0 localiser spn gt fils g mot r c gauche if test gt 0 localiser amp pn gt fils d mot r c droite 2 2 Classe des variables Chaque nouvel appel d une fonction r cursive empile un nouvel exemplaire des param tres formels et des va riables automatiques de cette fonction Chaque niveau d appel poss de ainsi ses propres variables pn et test dans l exemple ci dessus Au retour d un
213. gt 0 et de type ind termin Appel Puisque le type des param tres formels est ind termin les param tres effectifs de l appel sont convertis en appliquant les r gles par d faut 77 un param tre effectif d un type entier plus court qu un int subit la promotion enti re un param tre effectif de type float est converti dans le type double un param tre effectif d un autre type ne subit aucune conversion 76 Cf chapitre 3 chapitre 10 77 Cf chapitre 4 Les appels de fonctions A CLARINVAL Le langage C 11 15 Exemple D clarations l ments d une ligne de facture char nom article 30 1 int quantite float prix Appel printf 3d s 7 2f quantite nom article prix impression d une ligne de facture La fonction printf re oit dans l ordre les param tres dans les formats suivants P p adresse char chaine format nombre entier int quantite adresse char nom article nombre r el double prix Lors de l appel de printf ces param tres sont rang s au sommet de la pile 78 13 12 11 10 double prix a char nom article pi int quantite char chaine format O NU HR Un 0 printf Ex cution Comment la fonction appel e peut elle acc der ses param tres sans nom Par un pointeur qui successive ment rep rera chacun de ces param tres Le fichier d en t te standard stdarg h standard argument contient les ma
214. guage BCPL Basic CPL B avatar de BCPL C successeur de B Plus tard viendra C C augment de nouvelles possibilit s pour la programmation dite par objets object oriented C est surtout un des nombreux langages qui se situent dans la lign e d ALGOL ALGOrithmic Language ce langage qui d s 1960 d finissait et mettait en oeuvre les concepts fondamentaux de la programmation de style algorithmique Depuis les ann es 80 UNIX qui n tait pas la propri t d un fabricant d ordinateurs particulier est devenu le syst me d exploitation d un grand nombre d ordinateurs de toutes sortes de marques Le succ s d UNIX a in vitablement entra n le succ s du langage C La version originale du langage C a t d crite dans la premi re dition de l ouvrage The C Programming Language publi e en 1978 par Kernighan et Ritchie En 1989 l ANSI American National Standards Ins titute d finissait une version normalis e du langage C qui contient quelques extensions par rapport la ver sion originale la seconde dition de l ouvrage de Kernighan et Ritchie d crit cette nouvelle version sur laquelle nous nous appuierons 2 2 Kernighan amp Ritchie Le langage C ANSI 2 dition traduction fran aise d Masson 1992 8 gag A CLARINVAL Le langage C 1 6 4 Etape 2 r alisation du programme 4 1 Etape 2 1 transformer l algorithme en fonction programm e Le texte que nous allons r dige
215. h gt sscanf NULL char incl char ligne analyse d une ligne include char type include 2 1 o amp if sscanf ligne include 1 lt gt type include nom fichier 2 switch type include 0 selon le type d inclusion case lt return design fichier adr gt r pert fichier case return nom fichier adr gt fichier return NULL ce n est pas une ligne include valide A CLARINVAL Le langage C 12 21 e Le paradigme de Programmation Fonctionnelle Un langage de programmation fonctionnelle permet de r diger un sous programme voire un pro gramme complet sous la forme d une expression Or dans une expression par exemple prix net arrondi prix net taux tva 100 les op rations ne sont pas chronologi quement ordonn es et aucune des valeurs produites qu il s agisse de valeurs interm diaires ou finales n est affect e une variable Un langage de programmation fonctionnelle pr d finit un certain nombre de fonctions dont la plu part s crivent au moyen d un op rateur ex lt gt and or et des types de valeurs de base ex float int Le programmeur ne d clare que des fonctions plus ventuellement des constantes et des types de valeurs d riv s des types de base La seule op ration disponible est l application d une fonction un argument d un certain type ou domaine pour obtenir en r
216. hort jour mois annee short jours mois short mois short annee gt nbre jours du mois truct date echeance struct date date d short delai date d mois delai 30 mois d ch ance si mois gt 12 corriger l ann e et le mois te d annee date d mois 1 12 te d mois 1 date d mois 1 12 te d jour jours mois date d mois date d annee fin mois turn date dj A CLARINVAL Le langage C 8 10 Initialisation des variables structur es La d claration d une variable structur e peut comporter une clause d initialisation e Initialisation constante Cette initialisation peut toujours se faire par une liste d expressions constantes dont chacune indique la valeur initiale d un membre en suivant l ordre de d claration des membres Exemple struct dat date de reference 27 11 1993 Si un membre est lui m me une variable composite structure ou tableau ses valeurs composent une sous liste entre accolades 47 Exemple types struct raison sociale char categorie 9 nom 25 struct localite short int no postal char nom 17 struct adr postale char rue nof31 struct localite loc struct constante variable initialis e const struct struct raison sociale ident struct adr postale adr etiquette TIES Saint Laurent Quai Mativa 38 4020 Li ge ma a e La liste d
217. i limite i i k Exemple Dans un texte trouver les positions des premier et dernier caract res non blancs Le bloc est vide et la construction for est utilis e seule fin de faire varier les indices char texte 80 1 cha ne de 80 caract res maximum int prem int dern indices limites strlen texte gt longueur de la cha ne 0 exclu for dern strlen texte 1 dern gt 0 amp amp texte dern dern traitement vide for prem 0 prem lt dern amp amp texte prem l prem traitement vide 2 3 do while Syntaxe do bloc while condition La condition est une expression qui peut tre valu e comme vraie ou fausse Si le bloc est form d une seule instruction ou construction les accolades peuvent tre omises La fin du bloc ne marquant pas la fin de la construction celle ci doit tre cl tur e par Interpr tation L ex cution du bloc se r p te tant que la condition est vraie L valuation de la condition est effectu e apr s chaque ex cution du bloc ce qui garantit que le bloc soit ex cut au moins une fois A CLARINVAL Le langage C 5 10 bloc l l faux cond vrai Utilisation Un cas typique d emploi de la construction do while est la r p tition d une tentative d op ration sur un objet individuel jusqu ce que son r sultat soit satisfaisa
218. i consiste distinguer des tats interm diaires dans un flux de donn es ex lt mis en page lt tri lt extrait lt lu Conception descendante Au premier niveau le programme main sera d compos en deux fonctions effectuer et publier le tirage e Crit re d identification de ces fonctions chacune est une op ration ind pendante sur un objet firage au m me titre que la fonction numero sur l objet boule On peut imaginer d autres fonctions ind pendantes sur l objet tirage comme par exemple le tri des 6 num ros de base Bien que d couvertes par une autre sorte de d marche ces fonctions respectent le crit re voqu au paragraphe pr c dent chacune entra ne un change ment d tat de l objet e Par ailleurs dans de tr s nombreux programmes on peut distinguer diff rents objets par exemple un fi chier d entr e et une liste imprim e Diff rentes fonctions seront identifi es pour chaque objet exemples lire le fichier et trier le fichier mettre la liste en page et imprimer la liste e Autre crit re conduisant la m me d composition les fonctions effectuer et publier correspondent deux phases du d roulement du programme phases nettement s parables Normalement les fonctions iden ifi es l aide de ce crit re ne rendent pas de valeur r sultat elles constituent ce que le langage PASCAL ap pelle des proc dures fonctions sans retour de valeur L op ration effectuer e
219. ification OUI NON montre un autre int r t de la technique si la codification poss de des variantes ou vient tre modifi e seule la ligne de d finition define doit tre adapt e tandis que le nom r p t l int rieur du programme reste inchang Exemple codification oui non anglaise define OUI y define NON VY La m me technique est galement souvent employ e pour indiquer une limite ou une grandeur inconnue au moment de l criture du programme ou susceptible de changer Exemple dimension d un tableau define N 42 int matrice carree N N for i 0 i lt N i texte livr au compilateur int matrice _ carree 42 42 for i 0 i lt 42 i REMARQUE Des macro d finitions constantes pourraient se substituer aux mots cl s du langage ce qui d finirait un langage de pseudo code compilable Exemple pseudo langage minimum defin PROGRAMME void main void defin CARACTERE char defin ENTIER long int defin REEL float defin DEBUT defin FIN defin SI LE defin ALORS defin SINON else define FIN SI defin TANT QUE while defin EXECUTER defin FIN TANT defin RETOURNER return defin O defin ET amp amp defin NON defin ENTRER scanf defin AFFICHER printf 3 2 Macro d finitions param
220. ignes chaque ligne est un tableau de colonnes Parmi les avantages des tableaux de pointeurs on notera les suivants Economie d espace Dans un tableau deux dimensions page lignes colonnes toutes les lignes l ments du tableau page ont une taille gale Le gaspillage d espace peut tre important si les textes enregistr s ont des lon gueurs utiles fort diff rentes ou cas particulier si le tableau comporte des cases vides dans ce cas un tableau de pointeurs conomisera l espace de m moire Exemple tableau des noms de mois char nom mois 12 10 janvier f vrier mars avril mai juin Mjuillet ao t septembre octobre novembre d cembre janviercoo f vriercee marscocooe avrilecooo maicooccooo juincoccoo Juilietoss aott oeeo seprempres octopresss tableau de pointeurs vers les noms de mois char nom mois 12 janvier f vrier mars Taveri mai juin Mjuillet ao t septembre octobre novembre d cembre janviere f vriero avrilo juillete A CLARINVAL Le langage C 11 3 Economie d op rations Supposons une fonction devant trier c est dire ordonner alphab tiquement une s rie de cha nes de carac t res L algorithme utilis est celui du tri par s lection e s lectionner dans l intervalle f 0 t N 1 le plus petit l ment et le permuter avec l l ment
221. ille b lt temp 6 3 Composition analyse de texte sprintf sscanf La fonction printf assemble des l ments pour composer un texte qu elle crit dans le flot de sortie stdout la fonction scanf isole les l ments d un texte re u du flot d entr e stdin fl Les fonctions sprintf et sscanf tendent ces techniques de composition ou analyse au traitement de textes en m moire centrale Ces fonctions sont d crites dans le fichier d en t te lt stdio h gt Comme printf la fonction sprintf print formatted string assemble les l ments composant un texte mais au lieu de transf rer le r sultat vers un flot de sortie elle le range dans un tableau en m moire centrale sous la forme d une cha ne de caract res Comme scanf la fonction sscanf scan formatted string isole les l ments d un texte mais au lieu de prendre le texte dans un flot d entr e elle le prend dans une cha ne de caract res d j pr sente en m moire centrale Ces deux fonctions se param trent de la m me mani re que printf et scanf ceci pr s qu en t te de la liste des param tres est ajout un pointeur vers la position courante dans la cha ne de caract res ini ini sprintf const char texte const char format sscanf const char texte const char format Exemples include lt stdio h gt sprintf char date txt struct short aa mm jj date transposer une
222. initialisation peut comporter moins de valeurs qu il n y a de membres d clar s dans ce cas seuls les premiers membres sont initialis s Comme dans tous les cas d initialisation incompl te les autres membres sont initialis s la valeur 0 Exemple struct bon commande commande en cours C cette d claration initialise uniquement le code _type_ ligne de l entete commande e Initialisation variable L initialisation d une variable structur e automatique peut se faire par une copie de structure Exemples struct date date du jour void fonction gt date struct date date commande date du jour date facture date commande 1 4 Types alternatifs les unions Une variable de type union est une zone de m moire dont le contenu peut tre interpr t de diff rentes mani res Chacune des interpr tations possibles est d clar e comme un membre de l union D claration Mis part le nom de la m thode de construction la d claration d un type d union est identique celle d un type de structure 47 Pourvu que la sous liste soit compl te elle peut ne pas tre plac e entre accolades cf chapitre 7 A CLARINVAL Le langage C 8 11 union tiquette de type liste des membres Exemple Un programme calculette doit analyser et ex cuter une expression arithm tique introduite au clavier L analyse de cette expression en isole les diff rents symboles nombres convertis en float op
223. ique FAUX VRAI enum valeur logique FAUX 0 VRAI 1 A CLARINVAL Le langage C 8 3 e M thode mixte la liste n indique que certaines valeurs les valeurs manquantes se d duisent par incr mentation des pr c dentes enum jour DIMANCHE 1 LUNDI MARDI MERCREDI JEUDI VENDREDI SAMEDI jours de 1 7 Il est permis d identifier la m me valeur par diff rents noms Exemples enum code sexe SEXE INCONNU MASCULIN M FEMININ F HOMME M FEMME F enum valeur logique FAUX VRAI NON 0 OUI lt enum valeur logique FAUX 0 VRAI 1 NON 0 OUI 1 Si la m me valeur peut tre d sign e par diff rents noms il est vident que chaque nom figurant dans une d claration doit tre univoque en d autres termes tous les noms apparaissant dans une m me d claration tiquette du type ou noms de membres doivent tre distincts Utilisation Variables Il est permis de d clarer et initialiser des variables appartenant un type num r Exemples tant donn es les d clarations ci dessus on peut crire enum code sex sexe enfant enum valeur logique option NON reponse enum jour aujourdhui Ni la compilation du texte ni l ex cution du programme ne sont mis en oeuvre des m canismes qui v ri fieraient qu tout moment la valeur d une variable ainsi d clar e est une des valeurs num r es
224. ire de l ex cuter avec toutes les combinaisons de param tres positifs n gatifs et nuls qu autorisent les pr conditions de l algorithme La fonction ci dessous r p te le test sur tous les couples de nom bres introduits au clavier jusqu ce que le premier de ces nombres soit 0 include lt stdio h gt fonctions de dialogue float puiss float n int p fonction test e void main void float r int e racine exposant 1 re lecture printf nDonnez racine et exposant scanf g d amp r amp e while r 0 test de la fonction printf n 3g exp d 3g n r e puissi r e lecture suivante printf nDonnez racine et exposant scanf g d amp r 8 amp e Le concept de lecture associ e une construction while est un concept abstrait Il faut entendre sous ce terme toute op ration fournissant au programme une nouvelle combinaison de donn es sur laquelle pourra s ex cuter une nouvelle fois le bloc d instructions qui constitue le corps de la boucle A CLARINVAL Le langage C 5 5 Exemple Voici un autre algorithme pour le calcul du PGCD de deux nombres DEBUT r lt reste de a b 1 re lecture TANT QUE r 0 EXECUTER DEBUT a amp b ber r lt reste de a b lecture suivante FIN FIN TANT lt b r sultat b FIN Simplification de la construction Lorsque l op ration de lecture est programm e sous la forme d une expression notamment
225. isiseerersrseeererersrees 2 2 Fermeture d un fichier fclose 2 3 EXeMpl re ententes 24 L s flots Standards 2088 alternant ee AE EES germe rendue it ends ie R 3 Traitement des exceptions soise a E E E sh dir Mo Matter nt AERE 3 1 Fonctions d analyse des exceptions ferror feof ceecee 3 2 Retours exceptionnels EOF NULL 4 Fonctions d acc s un fichier de texte 4 1 Lecture Ecriture d un caract re fgetc fputc seses 4 2 Lecture Ecriture d une cha ne de caract res fgefs fputs 4 3 Lecture Ecriture de donn es format es fscanf fprintf ss 9 Fonctions d acces aun fichier binaire iee tiens es bite nets tue ae ne de eat Ne 5 1 Lecture Ecriture d objets binaires fread fwrite esesseesess 5 2 Positionnement dans un fichier binaire fseek ftell 5 3 Application un syst me de fichiers relatifs A CLARINVAL Le langage C 6 Gestion de la m moire tampon fonction fflush ss Remarque importante sur les op rations de mise jour ss X rCICES ne nn nn nn tn nee arr PE EE rat CHAPITRE 11 STRUCTURES DE DONN ES COMPLEXES rennes 1 Pointeursiet tableaux enn nr E A A tandem nan state ent een Rens ete Nue l 1 Tableaux plusieurs dimensions dense drininn RE E nt dits N dan Adressage par d placement param trable a E E E A 1 2 Tableaux de pointeurs Les param tres de la commande d ex cution 1 3 Poin
226. iste des champs Un champ de bits est d clar comme ceci type identificateur longueur Le type doit tre un signeda int La longueur est une expression enti re constante indiquant le nombre de bits Si l on mentionne seulement la longueur apr s les le champ existe mais n est pas r f ren able Exemple L exemple ci dessus pourrait donner lieu aux d clarations suivantes d clar de type struct attributs unsigned mode 1 portee 2 droits class type 2 taille 2 val initiale 1 M Le d clar de variable tableau de 120 d clarations struct char nom 31 1 struct attributs attrib declar 120 d sign d un champ enregistrer une d clar de float declar i attrib type 3 r el sign declar i attrib taille 2 2 exp 2 Utilisation Chaque champ de bits se comporte comme un int sign ou non selon la d claration et dont la longueur en nombre de bits est pr cis e REMARQUE Chaque compilateur C pr cise ses propres conditions d utilisation des champs de bits notamment la longueur totale de la structure ainsi pour Turbo C toute structure de bits est un int et l ordre de succession des bits de droite gauche ou de gauche droite 48 Cf chapitre 4 A CLARINVAL Le langage C 8 14 2 D claration de noms de types Pour tout type de donn es type pr d fini ou type construit le programm
227. it comme float conversion d O u C unsigned nombre d cimal non sign i O o nombre octal non sign pr fix ou non par 0 S O integer nombre entier sous un des formats suivants Z d cimal octal pr fix par 0 hexad cimal pr fix par 0x ou 0X autant de caract res qu indiqu par largeur ou par d faut un seul les caract res d espacement ne sont pas saut s K le r sultat n est pas suffix par le terminateur 0 s C string cha ne de caract res sans caract res d espacement e g nombre r el sous le format Jmmmf Jdddfef xx ou Jmmmf JdddfE xx ES s pointeur adresse de m moire la plus longue cha ne exclusivement form e de caract res appartenant la liste 4 permet d inclure J dans la liste la plus longue cha ne form e de caract res n appartenant pas la liste 4 1 permet d inclure J dans la liste ne lit rien mais indique dans le param tre correspondant le nombre de caract res lus jusqu ici peut tre utile quand on doit v rifier la validit du texte introduit caract re intercalaire n est pas un code de conversion 4 Le r sultat est automatiquement suffix par le terminateur 0 b repr sente une liste de caract res quelconques exemples 89 Les donn es introduites peuvent tre librement espac es par des blancs des tabulateurs ou des sauts de lignes Toutefois une lecture sous le format c tra
228. ite les caract res d espacement comme n importe quel autre Exemple apr s avoir demand une r ponse O N oui non lire le caract re de r ponse et la touche fonction n de fin de r ponse printf Oui Non scanf c c amp reponse A chaque caract re d espacement intercal entre les sp cifications de format peut correspondre dans le flot de donn es une suite de 0 N caract res d espacement blancs tabulateurs sauts de lignes qui ne sont pas rang s dans les variables r sultats Tout autre caract re intercal entre les sp cifications de format doit tre introduit tel quel au clavier mais n est pas non plus rang dans les variables r sultats de la lecture Exemple l appel suivant demande une date dont les trois parties sont s par es par scanf 2hd 2hd 2hd amp Jj amp mm amp aa A CLARINVAL Le langage C 3 5 Exemples Demander l op rateur sous quelle forme il veut donner les dates sur la base de sa r ponse construire la cha ne d crivant le format Demander d introduire une date include lt stdio h gt char format date 2hd 2hd 2hd format d une date puts Vous pouvez introduire les dates sous trois formes puts jj mm aa jj mm aa jj mm aa printf Quel caract re de s paration choisissez vous scanf c c a amp format datel 4 lire s par fin r ponse format datel 9 format datel 4 garnir l
229. ition des op rations par embo tement de constructions est qu elle rend possible la d monstration qu un programme est correct une construction s quence it ration ou s lection poss de un seul point d entr e et un seul point de sortie la condition de ne pas programmer de sauts d s lors qu on est entr dans une construction il est certain qu on en sortira on peut attacher au point d entr e de toute construction une assertion affirmant la v rit des pr conditions requises pour pouvoir ex cuter la construction on peut attacher au point de sortie de toute construction une assertion affirmant la v rit des post conditions prouvant que la construction a produit son effet d s que ces deux s ries de conditions sont vraies pour une construction il est certain qu elles le restent si cette construction est embo t e dans une autre on peut ainsi d rouler un processus de d monstration incr mentale prouver la correction des constructions les plus int rieures et finir par prouver celle de la construction la plus globale Le fichier d en t te standard assert h contient une macro d finition assert expr de condition per mettant de tester les assertions pos es dans le programme Si l affirmation test e est vraie l ex cution du pro gramme se poursuit sinon elle s arr te apr s affichage d un message ad quat Exemple tester une boucle de mise z ro d un tableau de dimension d
230. iviseur premier inf rieur 20 REMARQUE penser au cas particulier de N lt 20 A CLARINVAL Le langage C 11 22 b Traitement des synonymes Soit P l emplacement que le calcul d signe pour stocker un nouveau descripteur Si cet emplacement est d j occup on lui associe une zone de d bordement P en m moire dynamique o sera rang le synonyme de Po lorsque P est occup e on lui associe semblablement une zone P et ainsi de suite Chaque descripteur P contient un pointeur vers le descripteur P suivant le dernier descripteur de la liste contient un pointeur nul PO P P2 emplacement calcul zones de d bordement c Le programme On utilisera deux types structur s e description d un Symbole nom 32 caract res dont le terminateur 0 attributs suite d octets cod s et pointeur vers le symbole suivant dans la zone de d bordement e description de la Table adresse d implantation en m moire nombre d entr es diviseur pour la fonction de calcul d adresse Les fonctions suivantes doivent tre fournies chacune peut recourir des sous fonctions e Table creer table int nbre entrees alloue et initialise l espace de m moire n cessaire et garnit le descripteur de la table e Symbole ajouter symbole Table p table Symbole p symbole si le symbole est d j pr sent dans la table la fonction rend un pointeur nul sinon elle rend l adresse de m moire o elle a copi le descripteur du s
231. l Quoique leur valeur ne soit jamais n gative les constantes enti res sont d un type sign sauf si elles comportent le suffixe U ou si la valeur est si grande qu elle ne peut s exprimer que dans le type unsigned long int S il y a lieu la promotion enti re est d abord appliqu e aux deux op randes la conversion arithm tique s ef fectue ensuite 4 Les calculs au sens large 4 1 Op rations arithm tiques Op rateurs Le langage C fournit les op rateurs arithm tiques de base dont voici la liste Groupes d op rateurs pr fixes valeur oppos multiplicatifs multiplication division y modulo reste de x y x y RS ON RER soustraction x y A CLARINVAL Le langage C 4 7 Exemples n i 1 position debut longueur 1 X gt position de fin n z lt n 4 302 750 millesime 4 est ce une ann e bissextile EAT A LAS Kay gt Z dans l alphabet ASCII prix 1 pct remiselcateg client 100 prix 1 pct remise categ client 100 1 rand 42 la fonction standard rand donne un entier pseudo al atoire l expression ram ne ce nombre dans l intervalle 1 42 y Op randes et r sultat Les op randes sont d un type entier ou r el sauf pour l op ration x y dont les deux op randes doivent avoir un type entier Si les deux op randes de la division x y sont d un type entier le r sultat est un entier sinon le quotient est un no
232. la d finition conditionnelle ci dessous l op ration VOIR n aura d effet que dans un programme compil avec une option TEST if defined TEST avec l option TEST afficher un msg define VOIR expr type printf expr type n expr ls sans l option TEST ne rien faire macro vide define VOIR expr type ndif les messages ne sont produits que si pour la compilation ce texte est pr c d de la ligne suivante define TEST Le pr processeur propose des formes quivalentes ifdef identificateur lt if defined identificateur ifndef identificateur lt if defined identificateur Inclusion conditionnelle Illustrons une utilisation int ressante de la compilation conditionnelle Supposons qu on ait cr diff rentes biblioth ques de fonctions math matiques sp cialis es d crites dans des fichiers d en t te m_base h fonctions de base m fin h applications financi res m_stat h applications statistiques etc Les fichiers d application ont besoin des fonctions de base le fichier m_base h est donc inclus dans chacun des autres m_fin h m_stat h include m base h include m base h Si les deux fichiers m_fin h et m_stat h sont eux m mes inclus dans un m me programme on doit viter de d finir deux fois le contenu de m_base h ce qui pourrait engendrer des erreurs Pour cela la technique suivante e
233. la forme suivante structure membre structure d signe la variable structur e membre d signe la variable membre Exemples d clar de types struct date short int jour mois annee struct entete_commande char code type ligne HR LE ET unsigned int no commande no client struct date date commande struct ligne commande char code type ligne RE UT A7 unsigned int no commande no produit qte commande struct bon commande struct entete commande entete struct ligne commande corps 15 d clar de variables struct bon commande commande en cours commande archivee d sign de membres commande en cours entete commande en cours entete no commande commande archivee entete date commande commande archivee entete date commande annee commande en cours corps i commande en cours corps i no produit commande en cours corps i qte commande Ces exemples le montrent l op rateur de s lection d un membre est associatif A CLARINVAL Le langage C 8 9 Exemple complet int date valide struct short int jour mois annee date test de la validit syntaxique d une date N B Les mois sont donn s dans l intervalle 1 12 extern short jours mois short mois short annee gt nbre jours du mois return date mois gt 1 amp amp date mois lt 12 amp amp date jour gt 1 amp amp date jour lt jours mois date mois dat
234. la valeur cod e qu il repr sente et dont le nom peut avoir une port e locale exemples const short int vrai 1 const short int faux 0 const float pi 3 1416 const char homme M const char femme F e une m me donn e peut tre d clar e la fois const et volatile Note Les mots const et volatile sont appel s des qualificatifs du nom de type REMARQUE Pour conomiser la r initialisation d une variable constante locale chaque entr e dans le bloc auquel elle appartient il est int ressant de la d clarer de classe static Ceci est particuli rement indi qu dans le cas d un fableau Exemple const static short int nbre jours dans mois 12 31 29 31 30 31 30 31 31 30 31 30 31 2 D claration des variables et fonctions 2 1 Canevas g n ral Le canevas g n ral d une d claration de variable est le suivant droit classe type identificateur initialisation Une clause d initialisation prend une des deux formes suivantes pour toute variable pour une variable auto seulement liste d expressions constantes expression variable Pour une variable scalaire une seule expression est utilis e et les accolades peuvent tre omises Les tableaux ci dessous indiquent quels l ments de ce canevas sont autoris s dans chaque cas identificateur la d claration d un identificateur est toujours obligatoire type la d claration d un type de donn es est
235. langage C 11 9 file c typedef struct elemt struct elemt suivant F static Elemt tete NULL queue NULL int inserer Texte ptr donnees typedef struct char nom vendeur 21 long int chiffre vente Releve typedef Releve Texte texte de l l ment include lt stdio h gt EOF include lt stdlib h gt NULL malloc free Texte corps lemt type de l l ment cha n ancrages ins rer un l ment en queue de la liste l Elemt nouveau malloc sizeof Elemt allouer une m moire memcpy amp nouveau gt corps ptr donnees sizeof Texte copier nouveau gt suivant NULL gt suivant inexistant if tete NULL si ler l ment X tete nouveau adresse de la t te de liste else sinon queue gt suivant nouveau cha ner pr c dent gt nouveau queue nouveau nouvelle adresse de la queue de liste return 1 int extraire Texte ptr donnees extraire un l ment en t te de la liste Elemt ancien ptr de manoeuvre if tete NULL return EOF X si liste vide EOF memcpy ptr donnees amp tete gt corps sizeof Texte copier ancien tete sauvegarder l adr de l l mt extrait tete ancien gt suivant nouvelle
236. laquelle sont cr s les param tres formels des fonctions et les variables automatiques locales aux diff rents blocs lorsque l ex cution entre dans une fonction ou un bloc les param tres ou variables de la fonction ou du bloc sont cr s au sommet de la pile lorsque l ex cution sort d une fonction ou d un bloc les param tres ou les variables de la fonction ou du bloc sont enlev s du sommet de la pile Exemple programme sch matique f fonction p param tre v variable f3 p3 auto v3r saruana z f2 p2 fauto v2 f1 p1 auto v1 f2 v1 f3 v1 main auto v0 f1 v0 tats de la pile ROBH 20 30 niveau d but appel appel appel 20 appel 830 f10 main main flO f20 retour f30 retour retour retour Le m canisme d empilement rend possibles les appels r cursifs d une fonction Exemple empilement des param tres de la fonction r cursive pgcd a b cf chapitre 1 main pgcd 8 20 A CLARINVAL Le langage C 7 7 Le tas heap est une r serve de m moire dont le programmeur en appelant la fonction standard malloc peut allouer des fragments diff rents objets cr s dynamiquement par le programme 6 1 3 Initialisation d une variable La d claration de certaines variables peut comporter une clause d initialisation Cette clause d termine quelle valeur initiale est rang e dans la variable chaque fois que celle ci est cr e A d
237. lar de variables Dat date echeance date paiement d clar de fonction Date date du jour void 4 La d claration de size_t size type fait partie de la biblioth que standard du langage C Elle d finit le format des indications de taille manipul es par les fonctions standards A CLARINVAL Le langage C 8 15 d clar de types en t te de commande typedef struct char code type ligne Numero no commande no client Date date commande Entete Commande ligne de corps typedef struct char code type ligne Numero no commande no produit Quantite qte commande Ligne Commande bon de commande en t te 15 lignes max typedef struct Entete Commande entete Ligne Commande corps 15 Bon Commande d clar de variables Bon Commande commande en cours commande archivee Il est permis de d clarer un synonyme pour un type d fini ult rieurement Exemple d clar de synonyme typedef struct date Date d clar de type struct date short int jour mois annee Port e des d clarations Comme pour la d claration d une variable l endroit du texte o est r dig e la d claration d un type d finit la port e globale ou locale de cette d claration La d claration d un type doit tre visible tout endroit du texte o ce type est r f renc en particulier tout endroit o on d clare une variable ou une fonction poss dant ce type
238. le typedef struct int categ longueur union float nbre char nom 32 oper texte Symbole char symb sv char posit expr Symbole pt symb extrair t d crire le symbole suivant d une expression partir de la position courante posit _ expr retourner la position suivante while isspace posit expr posit expr passer outre des espacements if posit expr 0 fin de l expression d crire un symbole fictif conventionnel pt _symb gt categ O pt symb gt texte oper 0 pt symb gt longueur 0 else if isdigit posit expr symb commen ant par un chiffre extraire un nombre pt _ symb gt categ 9 sscanf posit expr fsn amp pt _symb gt texte nbre amp pt symb gt longueur else if isalpha posit expr symb commen ant par une lettre extraire un nom pt _symb gt categ A sscanf posit expr abcdefghijkimnopqrs amp pt_symb gt texte nom amp pi uvwxyz 0123456789 n _Ssymb gt longueur else autre caract re extraire un op rateur pt _symb gt categ X sscanf posit expr c n amp pt _symb gt texte oper amp pt symb gt longueur return posit expr pt symb gt longueur position suivante A CLARINVAL Le langage C 9 24 Remarque A noter dans l appel sscanf les codes de format suivants n nombre d
239. le Ce proc d sert surtout pour autoriser l appel d une fonction qui ne sera d finie que plus loin dans le texte du module Exemple pgcdppcm c int ppcm int a int p extern pgcd int a int b rappel de d claration return a b pgcd a b int pgcd int a int b dE return a ET turn pgcd a b a de turn pgcd b a b 1 2 Dur e de vie et classe d une variable Une variable est cr e et d truite au cours de l ex cution du programme on veut dire par l qu un empla cement de m moire est allou puis lib r d sallou dans lequel les valeurs successives de la variable sont conserv es La dur e de vie d une variable est la p riode s tendant du moment de sa cr ation celui de sa destruction Cette dur e de vie est d termin e par la classe de la variable 33 Pour les autres identificateurs cette substitution est op r e par le compilateur A CLARINVAL Le langage C 7 5 e Une variable dynamique ou automatique classe auto est une variable de port e locale cr e lors de chaque entr e dans le bloc o elle est d finie et visible et d truite lors de chaque sortie de ce bloc sa dur e de vie est gale la dur e d ex cution du bloc entre deux ex cutions du bloc sa valeur est perdue e La d finition ci dessus reste valable si l on remplace variable locale par param tre formel et bloc par fonction e Une variable statique classe static
240. les types par typedef A CLARINVAL Le langage C 8 17 struct enum union D clarer le type prix r pondant la d finition suivante un prix est compos d un code de devise ou F et d un montant Un montant exprim en dollars code est un nombre r el un montant exprim en francs belges code F est un nombre entier long A CLARINVAL Le langage C 8 18 Chapitre 9 Les pointeurs 1 Concepts de base Supposons que nous voulions crire une fonction permuter charg e de permuter en m moire deux variables de m me type par exemple deux l ments d un tableau On ne peut appeler cette fonc tion en lui passant en param tres les variables permuter en effet une fonction appel e re oit une copie de ses param tres et ne dispose d aucun moyen pour modifier la valeur des param tres effec tifs dans la fonction appelante La solution consiste utiliser comme param tres des pointeurs 1 1 D finitions e Un pointeur est une variable qui en guise de valeur contient l adresse d une autre variable Soit un pointeur p contenant l adresse d une variable v on dit que p pointe sur v et que v est rep r par p e Aux pointeurs sont n cessairement associ s deux op rateurs d adressage amp l expression amp v fournit l adresse de v qu on peut affecter p en programmant p amp v Puisque l adresse de v est immuable et connue du compilateur l expression amp v est une expression cons
241. lle fichierl dat fichier2 lis fichier3 c Signaler les noms qui ne d signent pas des fichiers existants Pour obtenir la taille de chaque fichier appeler la fonction f faille exercice 2 du chapitre 10 Ecrire deux versions de ce programme l une utilisant un tableau de pointeurs et l autre un pointeur de pointeurs A CLARINVAL Le langage C 11 19 Listes cha n es En s inspirant du programme file c cf page 11 10 de traitement d une file cr er un programme de traitement d une pile Le programme vente c cf page 11 10 peut servir tester les fonctions de gestion de pile 1 2 1 0 a Un polyn me am1X Am2X7 a4X aoX est une somme dont chaque terme ou mon me poss de la forme ax o x est une variable a un coefficient non nul e un exposant entier gt 0 Un tel polyn me peut tre mat rialis sous la forme d une liste cha n e o chaque mon me est re pr sent par un noeud contenant un coefficient non nul un exposant et un pointeur vers le mon me suivant le pointeur est nul dans le dernier terme Exemples A 4x 2x 1 A B 10x 4xl0 9x8 1 Mettre au point un programme qui effectue les op rations suivantes B 6x 4x la cr er deux polyn mes sur la base des donn es introduites au clavier 1b titre de v rification afficher les deux polyn mes ainsi constitu s 2a cr er un polyn me gal la somme des deux pr c dents 2b afficher le polyn me
242. lobale d un identificateur ss 7 1 Usage priv ou public Exemples Directive d utilisation R gles de visibilit ss Extension de visibilit des d clarations globales 8xtern 7 4 F2 Du r d vieiet classe d une variable cencia en bent A EEE ai aE ai 7 5 Organisation de la m moire allou e un programme LL iiiisennnnnnnenenns 7 6 13 miualhisation d une variabl 5 2 nf anne IN ARE Mn AR ER SD PE AE ne Eaei M thode g n rale Initialisation des variables agr gats Initialisation des variables automatiques is 1 4 Droit d mise Jour d une variabl see ee Vent M ta RM R Reda ne 2 D claration des variables et fonctions ss 2 lo Can vas S n ral s 28 ear on ne St ne ete de nr E R E TE 2 2 D claration des variables nee ee nee eee ne een este ent en entend a er D claration primaires iris rennes st I i ne rod ER ENE ra een armee Rappel de d claration des variables globales ss 7 13 2 3 D claration des fonctions format ANSI inner 7 13 D claration primaire hassan nn nn nee te nn ee de Ne 7 13 D claration des param tres formels iii 7 14 Rappel de d claration prototype sise 7 15 2 4 D claration des fonctions ancienne forme ss 7 15 D claration primaire Rappel de d claration Exerci ES nie tre nn sn tenir en ina nn ne dit ter ERGS CHAPITRE 8 LES TYPES CONSTRU Garroni nien onn rer nn ere nee te ete een nt rene innocent fe a s 8 1 1 M thode
243. lt stdio h gt d f getchar putchar EOF include lt ctype h gt d f tolower gt lettre minuscule void main void int c caract re converti en int par getchar while c getchar EOF putchar tolower c Associativit Des sous expressions d affectation s associent de droite gauche Exemple c b a 0 c b ac0 Erreur fr quente confusion des op rateurs d affectation et d galit Il arrive facilement qu on oublie de doubler le signe d un test d galit On crit ainsi une expression d af fectation qui retourne son contexte une valeur num rique laquelle il sera donn une interpr tation logique Exemples if a 0 est toujours faux et la valeur de a est modifi e i 2 est toujours vrai et la valeur de a est modifi e if a b ne d pend pas de la valeur de a mais seulement de la valeur de b nul a 5 2 Affectation relative Op rateurs e Format var 0 val O est un des op rateurs binaires suivants e arithm tiques multiplication division modulo addition soustraction e de manipulation des bits lt lt gt gt d calage amp masques bool ens 21 Les op rations d affectation relative du langage C sont les quivalents de certaines instructions de base pr sentes dans tous les langages assembleurs A CLARINVAL Le langage C 4 16 e Op ration var Q
244. m tres pass s par r f rence simulation En C lors d un appel de fonction les param tres sont pass s par valeur la fonction appel e re oit une copie de la valeur de chaque param tre effectif et travaille sur cette copie Pour qu une fonction appel e puisse ma nipuler un objet obj de la fonction appelante on doit prendre un d tour passer par valeur un pointeur p_obj vers l objet param tre la fonction appel e acc de alors l objet param tre en adressage indirect p ob Dans d autres langages de programmation les param tres sont pass s par r f rence ou par adresse ce qui signifie que la fonction appel e re oit les adresses des param tres effectifs la fonction appel e acc de ces param tres effectifs en adressage direct obj En C on peut consid rer qu tant donn e la forme t i d une r f rence index e un param tre tableau est pass par r f rence pour les autres param tres on peut simuler cet adressage direct en tablissant l quivalence define obj obj ce qui au niveau de l criture du programme supprime un niveau d indirection Exemple fonction permutant les l ments d une date jj mm aa lt gt aa mm jj typedef struct short d 3 Date Num define date date param tre pass par r f rence simul void date permutee Date Num date modifier le param tr ffectif en adressage direct simul short temp date d 0 zone de manoeuvre d
245. mations mutuellement exclusives Exemple Pendant qu il analyse le texte d un programme un compilateur constitue une table des d clarations qu il rencontre Un compilateur C pourrait coder de la mani re suivante les attributs d une d claration de variable ou r sultat de fonction scalaire bits 0 mode de d clar 0 interne 1 extern l 2 port e et nature 00 fonction globale 01 variable globale 10 param tre local une fonction 10 variable locale un bloc 3 4 droit de mise jour 00 par d faut 01 const 10 volatile 11 const volatile 5 6 classe 00 static 10 auto 11 register 7 8 mode de repr sentation 00 entier non sign 01 entier sign 11 r el sign 9 10 taille 2 octets n 0 1 2 3 11 initialisation 0 clause absente 1 clause pr sente total 12 bits A CLARINVAL Le langage C 8 13 Chaque groupe de bits ainsi d fini constitue un champ de bits adjacents l int rieur d une variable Il existe deux mani res de traiter ces informations Une premi re mani re est de d finir une variable enti re pour l exemple ci dessus cette variable devrait tre de taille short elle contiendrait 16 bits et d agir sur les groupes de bits adjacents au moyen d op rations logiques de masquage 48 L autre mani re est de d finir une variable structur e dont les membres sont les diff rents champs de bits D claration struct tiquette de type l
246. mbre r el Exemple 3 0 4 0 0 75 mais 3 4 0 Les op randes subissent la promotion enti re et dans le cas des op rations binaires la conversion arithm ti que Le type du r sultat est le m me que celui des op randes apr s conversion REMARQUE IMPORTANTE Le r sultat d une op ration particuli rement une multiplication ou une divi sion doit parfois se repr senter dans un type diff rent de celui des op randes Il faut alors forcer un des op randes au type voulu pour le r sultat Exemples Soit les d clarations int prix de base 333 int pct remise 15 prix de base pct remise 100 gt 49 prix de base pct remise 100 gt 0 Toutes les valuations seraient correctes si l un des op randes tait un nombre r el prix de base float pct remise 100 49 95 prix de base float pct remise 100 49 95 int heure 24 heure 3600 gt secondes dans une journ e Les deux op randes tant du type inf le r sultat est lui m me du type int Si la taille d un int est 32 bits le r sultat sera math matiquement correct Si la taille d un inf est 16 bits le r sultat sera erron Solution donner l un des op randes le type long int long heure 3600 ou heure 3600L Remarques propos de la division x y donne le quotient et x y donne le reste de la division de x par y Le r sultat de ces op rations est ind fini si le diviseur vaut 0
247. me logique x y vrai si un op rande au moins est vrai faux dans les autres cas si le premier op rande est vrai le second n est pas valu A CLARINVAL Le langage C 4 10 Exemples tests de validit mois gt 0 amp amp mois lt 12 lt gt mois gt 0 amp amp mois lt 12 lt mois lt 0 mois gt 12 sexe M sexe F c gt A amp amp c lt Z c gt a amp amp c lt z c est une lettre lt c gt A amp amp c lt Z c gt a amp amp c lt z Op randes et r sultat Les op randes sont d un type entier ou r el Il subissent la promotion enti re et dans le cas des op rations binaires la conversion arithm tique Un op rande est consid r comme faux si sa valeur est gale 0 e vrai si sa valeur est diff rente de 0 16 Le r sultat est de type int et vaut 0 si la combinaison est fausse e 1 si la combinaison est vraie Les op rations r ellement effectu es sont donc les suivantes Ambigu t des valeurs logiques C est une particularit du langage C de ne pas avoir proprement parler de valeurs logiques yrai faux mais d effectuer une interpr tation logique de valeurs num riques Il est donc permis d crire if a au lieu de if a 0 Et il n est pas rare dans les programmes C de lire la tournure while c i ce qui signifie while c i 0 Remarques NE PAS OUBLIER de doubler les symboles am
248. ment gauche et droite de la nouvelle position du pivot L algorithme pour le placement du pivot est le suivant pour un tri en ordre d croissant partant de l extr mit gauche de l intervalle examin trouver la position du premier l ment in f rieur ou gal au pivot partant de l extr mit droite de l intervalle examin trouver la position j du premier l ment sup rieur ou gal au pivot si i lt j permuter les l ments correspondants continuer ainsi jusqu ce que j le pivot occupe alors son emplacement d finitif 5 2 7 4 8 9 1 i j 5 9 7 4 8 2 1 ij 5 9 7 8 4 2 1 ij 5 9 7 814 2 1 i j 9 5 7 814 2 1I ij 9 421 i j 9 421 ij 9 8 7 5 4 2 1 ij 9 8 7 5 4 2 1 ij 98754 ij 987542 ij 8 Soit un produit de quatre facteurs T T3 T T4 les multiplications peuvent tre effectu es en suivant diff rents ordres par exemple T T2 T3 T4 T1 T2 T3 T4 etc R digez la version proc durale d une fonction r cursive qui calcule le nombre d ordres d ex cution diff rents possibles pour un produit de q facteurs q gt 1 A CLARINVAL Le langage C 5 27 Illustration ordres possibles pour 1 facteur f d pour 4 facteurs f 4 B 4 f 4 f 4 fs 4 pour 5 facteurs f 5 m thodes nombre de solutions Ti 1 A T T M A D aep romo 2 BG T1 T T D A 2 Cema Ti T2 T3 T f Ti T Ts T
249. ment la m me valeur 4 5 45e 1 45e 1 45E1 4 5E0 4 5e0f 45e 1L A CLARINVAL Le langage C 2 7 Remarques Les lettres figurant dans une constante num rique peuvent indiff remment s crire en minuscules ou majuscules A strictement parler une constante num rique n est jamais sign e mais dans toutes les expressions o une telle constante peut tre employ e il est permis de la faire pr c der de l op rateur unaire moins qui rendra sa valeur n gative 3 La valeur d une constante de type char s exprime sous la forme d un caract re entre apostrophes e caract re repr sentable exemples a B 1 131 1 e caract re non repr sentable exemples n O xff voir ci dessous Remarque Une constante caract re peut tre remplac e par une constante enti re qui en indique la valeur num rique Liste des caract res non repr sentables escape sequences alert signal sonore backspace recule d une position sur la ligne courante form feed va au d but de la page suivante new line va au d but de la ligne suivante carriage return retourne la l re position de la ligne courante horizontal tab avance la position du tabulateur suivant sur la ligne vertical tab avance la ligne marqu e d une tabulation verticale caract res ayant une signification sp ciale dans le langage C suivi de 1 3 chiffres octaux valeur num rique x suivi de 1 2 chiffres hexad cimaux
250. ment valide c est dire qu elle le ram ne dans l intervalle O NI symb ent 2 ind Il arrive qu partir de deux valeurs de d part V et V2 diff rentes la fonction A70 ou la fonction A20 donne un r sultat identique On dit qu alors V et Vz sont synonymes pour la fonction Les syno nymes demandent un traitement particulier qui sera d crit au paragraphe suivant La fonction A70 d coupe des tranches dans le nom sur lesquelles elle effectue un calcul donnant un r sultat ent Nous adopterons pour cette fonction la formule qui consiste additionner la valeur num rique binaire de chaque couple de deux lettres cons cutives dans le nom Cette formule donne moins de synonymes que si les tranches d coup es comprenaient un seul caract re car il existe dans le lexique moins de permutations de groupes identiques que de permutations de lettres identiques Illustration en supposant que les majuscules commencent la valeur num rique 01 C 03 N 14 H 08 el 09 B 02 C 03 I 09 LC 03 01 A 01 E 05 E 08 N 14 TP 16 N 14 E 05 TC 03 39 39 20 20 CH 0308 NI 1409 IE 0905 CH 0308 BA 0201 CA 0301 N 1400 E 0500 NC 1403 FAP 1600 2613 2217 1604 1901 La fonction h2 consiste prendre le reste de la division par D ind ent modulo D en choisis sant comme diviseur le plus grand nombre D inf rieur ou gal au nombre N d emplacements qui ne poss de pas de d
251. mes de base Un tableau est une portion d espace en m moire permettant de stocker dans une s rie de mots contigus plu sieurs variables du m me type On appelle dimension d un tableau le nombre d l ments qu il contient A CLARINVAL Le langage C 2 12 D claration des tableaux La d claration d un tableau s effectue dans les m mes formes que celle de n importe quelle variable avec l adaptation suivante le nom de variable commun tous les l ments est suffix entre crochets J par la dimension du tableau 2 Exemple long int total ventes du mois 12 La d claration d un tableau peut comporter une clause d initialisation Cette clause num re dans une liste entre accolades les valeurs initiales de tous les l ments du tableau chacune de ces valeurs est d finie de la mani re habituelle par une constante ou plus g n ralement par une expression de valeur constante Exemple short int nbre jours dans mois 12 31 29 31 30 31 30 31 31 30 31 30 31 D signation d un l ment de tableau l indexation La d signation d un l ment du tableau se fait au moyen d une expression form e de deux parties le nom unique identifiant tous les l ments suivi entre crochets J d une expression arithm tique appel e indice dont la valeur obligatoirement enti re indique la position de l l ment dans le tableau Si d est la dimension du tableau cette valeur peut s chelonner de 0 d 1 nb
252. n Usage priv ou public e Sauf s il est d clar static un objet variable ou fonction d fini comme global dans un module peut tre r f renc et utilis par des fonctions d finies dans d autres modules On dit qu un tel objet est public e Si sa d claration le qualifie de static un objet variable ou fonction d fini comme global est prot g contre tout acc s ext rieur il ne peut tre atteint que de l int rieur du module o il se trouve d clar Un tel objet est priv l Exemples La fonction compter ci apr s compte le nombre de fois o elle est appel e et chaque fois qu elle est ex cu t e renvoie le num ro courant la fonction appelante Pour pouvoir commencer le comptage une valeur quelconque une autre fonction init doit initialiser le compteur Celui ci doit donc tre une variable globale accessible aux deux fonctions Par essence les deux fonctions init et compter sont usage public tandis que la variable compteur est priv e et n est accessible qu aux fonctions d finies dans le m me module include lt stdio h gt define PRIVATE static PRIVATE int compteur 0 variable globale priv e void init void initialisation facultative du comptage printf donnez la valeur initiale scanf d amp compteur int compter void comptage return compteur le compteur est incr ment avant d tre renvoy en
253. n dynamique de m moire de savoir si un objet est d j cr c est dire si un espace de m moire lui est d j allou Le concept de poin teur nul est une r ponse ce probl me Un pointeur est nul lorsqu il ne rep re aucun objet c est dire lorsqu aucune adresse ne lui est affect e Par convention un pointeur nul contient la valeur 0 ATTENTION Un pointeur non initialis n est pas nul il ne contient pas 0 mais une adresse inconnue 0 est donc une valeur g n rique admissible pour tout pointeur Plusieurs fichiers d en t te standards dont lt stdlib h gt lt stdio h gt la red finissent sous le nom mn monique NULL define NULL 0 La constante NULL ou 0 peut intervenir dans les op rations suivantes e initialisation d un pointeur sa d claration int p NULL e op ration d affectation p 0 param tre l appel d une fonction r sultat retourn par une fonction return NULL e tests d galit ptr 0 L existence de pointeurs nuls donne un sens aux op rations logiques portant sur des pointeurs int p float q les pointeurs peuvent pointer sur des types d objets diff rents p vrai si p rep re un objet faux si p est nul p vrai si p est nul Jaux si p rep re un objet P amp amp q vrai si p et q rep rent chacun un objet faux si l un des deux est nul p q vrai si p ou q rep re un objet faux si les deux sont nuls 4 3 Exemple La fonction standard memcpy es
254. n param tre Rappel de d finition Une fonction A peut tre appel e par une fonction B programm e dans un autre fichier source que celui o A elle m me est d finie Pour cela le prototype rappel de la signature de la fonction A appel e doit tre ins r en guise de rappel de la d finition dans le fichier source contenant le texte de la fonction B appelante Le prototype rappel n est videmment pas suivi du corps de la fonction type identificateur d claration des param tres formels Le rappel de d claration est suivi du terminateur e param tres dans le rappel de d finition d une fonction la d claration de chaque param tre peut tre r duite la seule indication de son type l identificateur a une utilit purement documentaire Soulignons que la mention d un identificateur bien choisi am liore grandement la lisibilit du programme Exemples int pgcd int int int ppcm int int float puiss float int ou mieux float puiss float racine int exposant A CLARINVAL Le langage C 2 11 6 Les pointeurs et les constantes adresses premi re approche 6 1 D finitions e Soit une variable v De m me que l expression sizeof v fournit la taille de v l expression amp v fournit l adresse de v Puisque cette adresse est immuable et connue du compilateur l expression amp v est une cons tante de type adresse e Un pointeur est une variable scalaire qui en guise de val
255. ndes c est dire la position laquelle sera plac le r sultat de la fonction et au dessus de laquelle seront empil ses param tres lorsqu est reconnue la fin d un appel de fonction on ex cute et enl ve l op ration indiqu e au sommet de la pile des fonctions et au sommet de la pile des op randes l emplacement des param tres est lib r Exemple somme 9 produit 8 7 6 7 8 6 56 56 EEE 2 gt 0 2 gt 0 2 gt 0 9 Il 8 7 6 Ces piles sont r alis es sous la forme de tableaux Toutes les fonctions de calcul programm es poss dent la m me interface elles re oivent en param tre l adresse de la partie du tableau pile contenant leurs op randes et placent leur r sultat la position 0 de cette partie de tableau dans l exemple ci dessus la fonction produit re oit en param tre l adresse de la partie gris e de la figure Une table descriptive des fonctions ex cutables indique pour chacune le nombre minimum et maximum d op randes admis la gamme de fonctions ex cuta bles peut donc ais ment tre tendue z 0 z2 0 x A CLARINVAL Le langage C 12 11 calc h include lt stdio h gt define msg texte puts texte affichage des messages define PRIVATE static pour d cl globales priv es DECLARATIONS COMMUNES 1 ANALYSE LEXICALE ET SYNTAXIQUE codifications
256. ndi qu es par des pointeurs de tels pointeurs sont parfois qualifi s des pointeurs d ancrage de la liste dans le programme 72 t te queue l l w ee e 4 e e e Structures de donn es La structure repr sentant un relev poss de le type d fini ci dessous typedef struct char nom vendeur 21 long int chiffre vente Releve Chaque l ment de la liste cha n e aura la structure suivante typedef struct elemt struct elemt suivant Releve texte Elemt suivant est un pointeur vers l l ment suivant dans la liste pour rendre possible la d claration de son type struct elemt l tiquette elemt doit n cessairement tre d clar e avant l accolade d ouverture Les pointeurs d ancrage sont d clar s de la mani re suivante static Elemt tete NULL queue NULL e Gestion de la file Au d part la liste cha n e est inexistante et les pointeurs d ancrage sont initialis s l adresse NULL Les fonctions d insertion et d extraction d un l ment m moris ont la d finition suivante int inserer Releve releve extrair Releve releve e param tre adresse du relev courant e retour EOF lt 0 en cas d chec gt 0 en cas de r ussite 72 Le concept de file caract rise le mode d acc s aux donn es pas leur repr sentation mat rielle En effet si l on connaissait la longueur maximale de la file on pourrait la mat rialiser dans un tableau A CLARINVAL Le
257. ne cha ne de caract res la fa on d une liste define VIDE T Li define PREMIER T txt txt 0 define SUITE T txt amp txt ex int nbre_blancs char txt return strcmp txt VIDE T 0 0 PREMIER_T txt 1 0 nbre_blancs SUITE T txt ex int afficher T char txt comme printf indique 1 return strcmp txt VIDE T 0 0 printf c PREMIER T txt afficher T SUITE T txt le nbre de caract crits R alisation du support fonctions primitives On demande de cr er avec les moyens traditionnels du langage C les fonctions primitives qui per mettront le traitement fonctionnel de listes de nombres r els Soit la liste 0 5 1 2 31 1 7 2 Elle doit en m moire centrale prendre la forme d une liste cha n e de la fa on suivante gt 0 5 1 0 gt 2 31 gt 1 7 gt 2 0 1 D finir les types de donn es n cessaires 2 Programmer les fonctions primitives suivantes VIDE N rend une liste vide AJOUTER N l m liste ajoute un l ment en t te de la liste et rend la liste modifi e PREMIER N liste rend la valeur du premier l ment de la liste SUITE N liste rend la partie de la liste qui suit le premier l ment Remarque Une liste peut tre repr sent e par l adresse de son premier l ment 83 Un
258. ne de ces fonctions laquelle peut cacher les deux autres A CLARINVAL Le langage C 5 28 Remarques 1 Distinguer le nombre d l ments pr sents dans le tableau et le nombre d emplacements c est dire la dimension du tableau Au retour le programme appelant doit recevoir l indication du nou veau nombre d l ments pr sents si ce nombre est sup rieur la dimension du tableau cela signifie que l insertion demand e n a pu se faire le tableau tant plein 2 Les param tres des diff rentes fonctions peuvent tre l l ment ins rer le tableau des indica tions de dimension ou position Ecrire un programme de test demandant la fonction standard rand les valeurs ranger dans le ta bleau A CLARINVAL Le langage C 5 29 A CLARINVAL Le langage C Chapitre 6 Le pr processeur Le pr processeur transforme le texte source fourni par le programmeur conform ment aux directives de transformation que celui ci y a incorpor es et transmet le texte modifi au compilateur diteur pr processeur Toute ligne du texte source dont le premier caract re non blanc est porte une et une seule directive pour le pr processeur Le caract re initial peut tre librement pr c d et suivi de blancs 1 Mise en page du programme Les premi res transformations subies par le texte source sont des op rations de mise en page 1 concat nation de lignes si le der
259. nelles non standards include math plus h 3 Les macro d finitions 3 1 Macro d finitions constantes Au lieu d crire en de multiples endroits du programme une m me valeur constante on peut la remplacer par tout par un nom plus parlant Cette technique est tr s fr quemment employ e pour les valeurs cod es Exemples codification des sexes 1 homme 2 femme define HOMME 1 define FEMME 2 codification de la r ponse oui non define OUI To define NON THS Une macro d finition constante est une ligne de la forme suivante define nom texte de remplacement Le nom doit tre un identificateur valide en C Les programmeurs ont l habitude d crire en majus cules un nom de macro d finition c est devenu une convention de fait Le texte de remplacement est un texte quelconque Il doit tre pr c d d au moins un espace et s tend jusqu la fin de la ligne S il doit s tendre sur plusieurs lignes il suffit d crire le caract re en fin de chaque ligne coup e Le texte de remplacement peut tre vide c est dire inexistant Ceci se pr sente notamment dans certains cas de compilation conditionnelle cf infra Le premier exemple ci dessus codification des sexes montre un premier int r t de la technique des noms sont beaucoup plus parlants que des valeurs cod es A CLARINVAL Le langage C Le deuxi me exemple cod
260. nier caract re non blanc d une ligne est le caract re ce caract re est supprim et le texte de la ligne suivante est accol cet endroit 2 suppression des commentaires textes entre La derni re op ration du pr processeur est la suivante 3 concat nation des cha nes de caract res adjacentes Exemple texte fourni par le programmeur int main void d monstration puts Miroir dis moi suis je la plus belle premi re transformation int main void puts Miroir dis moi suis je la plus belle p J p texte livr au compilateur int main void puts Miroir dis moi suis je la plus belle A CLARINVAL Le langage C 6 1 2 Les fichiers d en t te h La directive include ordonne au pr processeur d inclure dans le texte source transmis au compilateur le texte du fichier qu elle d signe Ce fichier est appel un fichier d en t te et habituellement poss de un nom de la forme nom h header La directive include existe dans deux formats include lt fichier gt le fichier est cherch dans les r pertoires standards de l environnement de d veloppement en C include fichier le fichier est cherch conform ment sa d signation puis s il n est pas trouv dans les r pertoires standards Exemples biblioth que des fonctions math matiques standards include lt math h gt bibl de fonctions addition
261. nom voir ci apr s e retour n ant La cha ne de contr le contient des codes d finissant le format sous lequel les valeurs doivent tre introduites au clavier Le premier code d finit le format de la premi re valeur le deuxi me code d finit le format de la deuxi me valeur et ainsi de suite formats one character ee a principaux decimal integer 237 r el en notation scientifique 45e 2 r el en point flottant 0 45 r el dans le format le plus adapt e ou f character string Li ge repr sentation du caract re ceci n est pas un code de format commandes alert signal sonore principales backspace recule d une position sur la ligne courante form feed va au d but de la page suivante new line va au d but de la ligne suivante carriage return retourne la 1 re position de la ligne courante horizontal tab avance la position du tabulateur suivant sur la ligne vertical tab avance la ligne marqu e d une tabulation verticale nul caract re nul marque de fin de texte caract res ayant une signification sp ciale dans le langage C Appel de fonction et passation des param tres La fonction main demande l ex cution des fonctions puiss printf et scanf on dit qu elle appelle ces fonctions En C un appel de fonction s crit de la mani re suivante nom de fonction liste des param tres effectifs Chaque param tre effectif est une expression constante variable expression arithm
262. ns de lecture transf rent des donn es d un flot d entr e vers le programme en m moire centrale les fonctions d criture transf rent vers un flot de sortie des donn es du programme en m moire centrale d apr s la quantit d information transf r e chaque appel ID q q IDP certaines fonctions transf rent un seul caract re certaines fonctions transf rent le texte d une ligne compl te certaines fonctions transf rent une ou plusieurs donn es d crites par un format Ee caract re ligne donn es format es lecture getchar gets scanf stdin get character get string scan with format pu criture tchar puts printf stdout put character put string print with format A CLARINVAL Le langage C 3 1 Signal de fin de fichier EOF Les fonctions de lecture de donn es d entr e peuvent retourner la fonction appelante un signal de fin de fi chier Le m me signal est renvoy en cas d incident technique Ce signal est un int de valeur n gative d fini dans lt stdio h gt sous le nom EOF end of file Pour donner au clavier un signal de fin de fichier enfoncer simultan ment dans l environnement UNIX les deux touches ctrl D dans l environnement MS DOS les deux touches ctrl Z dans l environnement VAX VMS les deux touches ctrl Z 2 1 Entr e Sortie d un caract re getchar putchar La fonction getchar lit le caract re suivant dans le
263. nstruction n est utilisable que dans une instruction goto Il n y a donc pas de possi bilit de confusion entre une tiquette d instruction et un identificateur de variable ou de fonction 5 Fin d ex cution du programme fonction exit La fonction exit est d finie dans le fichier d en t te standard stdlib h de la mani re suivante void exit int status A CLARINVAL Le langage C 5 16 R dig dans n importe quelle fonction l appel de la fonction exit status cl ture imm diatement l ex cution du programme en renvoyant au syst me de commande de l ordinateur la valeur status Dans la fonction main l intruction return status provoque le m me effet Par convention dans le syst me UNIX exit 0 signifie que l ex cution s est d roul e normale ment et le renvoi de toute autre valeur qu il s est produit des conditions particuli res au sujet des quelles l information n cessaire doit tre fournie par la documentation du programme On peut donner en guise de param tre l une des constantes EXIT SUCCESS ou EXIT FAILURE Ces constantes sont d finies dans le fichier d en t te lt stddef h gt 6 La r cursivit La r cursivit est un autre m canisme de composition d op rations On qualifie de r cursif un algorithme qui se rappelle lui m me En C l algorithme rappel doit n cessairement avoir la forme d une fonction On a donn au chapitre 1 un algorithme r cursif pour le calcul du plus grand commun
264. nt une premi re tentative doit tre effectu e avant que le r sultat puisse tre test Exemple introduction d une r ponse OUI NON au clavier printf noui OU non scanf c c amp reponse c lit le caract re introduit et le range dans la variable c lit le caract re n de fin de r ponse sans le stocker ces deux formats ne peuvent pas tre s par s par un espace while reponse o reponse Remarquer dans cet exemple la formulation while condition de validit g n ralement plus lisible que while conditions d erreur parce qu elle explicite le but du traitement 3 Les constructions alternatives 3 1 if Syntaxe if condition blocl else bloc2 La condition est une expression qui peut tre valu e comme vraie ou fausse Si un bloc est form d une seule instruction ou construction les accolades peuvent tre omises Si le second bloc est vide la construction peut tre simplifi e en omettant else bloc2 Interpr tation La condition est valu e Si elle est vraie bloc est ex cut sinon bloc est ex cut A CLARINVAL Le langage C 5 11 faux l vrai SERAT cond bloc2 bloc1 fin Lorsque plusieurs constructions i f sont embo t es chaque mot else apparaissant dans un bloc appartient la derni re construction i du m me bloc qui n a pas encore de else correspon
265. ntier Elle doit tre crite entre parenth ses Rappel utile Un caract re est d un type entier On peut donc tester un code alphab tique Chaque point d entr e l int rieur du bloc est tiquet sous une des deux formes suivantes Chaque tiquette case identifie le point d entr e o commence l ex cution des instructions dans le cas o la valeur de l expression test e est celle qui figure la suite du mot case L tiquette default est facultative Elle identifie le point d entr e o commence l ex cution des instructions lorsque la valeur de l expression test e n est pas une de celles qui sont reprises dans les tiquettes case Chaque valeur de cas est repr sent e par une expression constante d un type entier il s agira prati quement toujours d une simple constante litt rale Plusieurs valeurs peuvent conduire au m me point d entr e en d autres termes diff rentes tiquettes de cas peuvent identifier un m me point d entr e L tiquette default peut tre plac e n importe o mais il est logique de la placer apr s les tiquet tes de cas explicites Il n y aurait aucun sens indiquer plusieurs fois la m me tiquette Normalement le traitement d un cas doit s arr ter avant d atteindre l accolade de fin du bloc d instructions C est ce que signifie l instruction break qui ordonne de sortir imm diatement de la construction dans l exemple on va ex cuter return Conseil Les diff r
266. obligatoire sauf dans la d claration d une fonction Remarque Si dans une d claration le mot int est pr c d d au moins un autre mot il peut tre omis 38 Exception possible une variable volatile A CLARINVAL Le langage C 7 11 d claration port e classe classes type initialisation droits de primaire visibilit Pnpiese APRIS implicite autoris e mise jour RS SC EC RS D globale module puoli por volatile fonction globale static static module public priv a e a aa Joue formel fonction register volatile locale bloc register volatile static a La d claration d une fonction quivaut la d finition d une variable r sultat de cette fonction b Un objet global d clar explicitement static est priv sinon il est public cet emploi du qualificatif static est malheureux c Une variable static si elle n est pas explicitement initialis e l est implicitement la valeur 0 d L initialisation des param tres formels est effectu e par l appel de la fonction e Les deux qualificatifs const et volatile peuvent figurer dans la m me d claration f Les qualificatifs const et volatile sont autoris s dans la d claration d une fonction bien qu ils n aient dans ce cas aucune utilit rappel de port e classe classe type initialisation droits de d claration visibilit implicite explicite implicite autoris e mise jour variable extern non const globale volatile
267. odifie en cons quence la position courante int fputs char textel FILE ptr fichier param tres l adresse de la cha ne de caract res contenant le texte crire le terminateur 0 n est pas crit le pointeur du flot vis retour un nombre positif ou nul EOF en cas d erreur ATTENTION La fonction puts ajoute elle m me le caract re n de fin de ligne au texte qu elle crit dans le flot stdout et la fonction gets supprime elle m me le caract re n de fin de ligne du texte qu elle lit dans le flot stdin f8 Les fonctions fputs et fgets ne font rien de tel le caract re n est pr sent l int rieur des textes transf r s 68 Cf chapitre 3 Le langage C page 10 6 4 3 Lecture Ecriture de donn es format es fscanf fprintf e La fonction fscanf lit partir de la position courante dans un flot de texte en entr e une s rie de don n es d crites par leurs formats et modifie en cons quence la position courante int fscanf FILE ptr fichier char format param tres pointeur du flot vis cha ne de caract res d crivant les formats d affichage suivie de 0 n adresses de variables qui recevront les donn es lues retour nombre de variables garnies EOF en cas d erreur ou de fin de fichier La fonction scanf est quivalente fscanf stdin e La fonction fprintf crit la position courante dans un flot de texte en sortie une s rie de
268. om fichier 17 A exemple txt A CLARINVAL Le langage C 2 16 Un tableau de cha nes de caract res peut tre d fini par une d claration de la forme suivante char nom nbre cha nes long max cha ne Exemple d claration char jour 7 9 dimanche lundi mardi mercredi jeudi vendredi samedi Fa O CRE ES R ARE a i m a nfejhfe ujnjd ij R g 1 m afe a ifefefef mlelr cirie dl i o DR amp ND nn d signation de la cha ne dimanche jour 0 d signation de son initiale jour 0 0 7 4 Initialisation des tableaux Syntaxe de d claration simplifi e Comme pour toute variable la d claration d un tableau peut comporter une liste d initialisation d finissant la valeur initiale de chaque l ment Un certain nombre de simplifications d criture sont possibles e Initialisation partielle Si une liste fournit moins de valeurs qu il n existe d l ments initialiser les derniers l ments sont mis la valeur 0 Exemples ar nom TrcKHrerpISJ S AE NS Tan gt 10 10 10 0 0 0 0 0 0 0 0 0 char jour 7 9 d 1 m m j v s garnit correctement l initiale de chaque nom de jour de la semaine le reste de chaque nom est rempli de z ros binaires e Initialisation par une cha ne de caract res Un tableau de caract res peut tre initialis par une cha ne de caract res plut t que par une
269. on des membres prend donc la forme des d clarations de variables Exemple d clar de type struct date short int jour short int mois short int annee ou struct date short int jour mois annee d clar de variables struct date date echeance date paiement jour mois annee Les r les des variables membres sont identifi s par leurs noms Dans la repr sentation mat rielle les diff rents membres sont contenus dans des champs qui se suivent dans l ordre de d claration des membres Les membres d une structure peuvent tre de types quelconques scalaires ou non A CLARINVAL Le langage C 8 6 Exemples La structure fiche produit a notamment pour membre un tableau nom_ produit d clar de type struct fiche produit unsigned int no produit char nom produit 12 1 int prix de vente float taux tva Une structure entete commande peut avoir pour membre une structure d un autre type date d clar de types d finition du type bon de commande comprenant des lignes de 2 types le type de lign st indiqu par un code ligne d en t te struct entete commande char code type ligne JR EL K7 unsigned int no commande no client struct date date commande ligne de corps struct ligne commande char code type ligne LR Mile E unsigned int no commande no produit qte commande On peut d finir un tableau de str
270. onnue define OK return VRAI r ml m2 if m1 KO if m2 err OK r ml m2 if m1 KO if m2 amp amp err syntaxe err OK r ml m2 if m1 KO while m2 OK Pit El 2 return r1 r2 X FONCTIONS D ANALYSE SYNTAXIQUE toutes les f ont la m me signature Logique anal_ void les f exec_ texte_du_symb sont les routines s mantiques Logique anal calc void f PRIVATE sauf anal calc anal debut void anal_expr void anal_fin void anal_nbre void anal_fonct void anal nom void anal parg void anal virg void anal pard void anal params void anal param void anal param void r gle calcul lt d but gt expr 0 K Logique anal calc void anal debut initialiser l analyse syntaxique if anal expri XX expr err err syntaxe expression invalide expression manquante if anal fin err expression invalide XX INOT X27 OK initialisations PRIVATE Logique anal debut void void exec debut void pt err syntaxe FAUX annuler l indicateur d erreur exec debut 0 initialiser les routines s mantiques symb OK init OK lire le ler symbole A CLARINVAL Le langage C 12 14 r gle expr nbre fonct X PRIVATE Logique anal expr void return anal nbre anal fonct FAA nbre fonct
271. ons standards 9 1 Fonctions math matiques Liste des fonctions fichier lt math h gt Le fichier d en t te math h d finit des fonctions math matiques standards En voici un certain nombre Les param tres et le r sultat de ces fonctions sont tous de type double Pour les fonctions trigonom triques les angles sont exprim s en radians sin x sinus de x cos x cosinus de x tan x tangente de x asin x arc sinus de x dans l intervalle x 2 7 2 x 1 1 acos x arc cosinus de x dans l intervalle 0 n x 1 1 atan x arc tangente de x dans l intervalle x 2 7 2 sinh x sinus hyperbolique de x cosh x cosinus hyperbolique de x tanh x tangeante hyperbolique de x exp x fonction exponentielle e log x logarithme n p rien ln x x gt 0 log10 x logarithme base 10 logio x gt 0 pow x y xY erreur six 0ety lt 0 ou si x lt 0 et y n est pas un entier sqrt x Vx x2 gt 0 fabs x valeur absolue x exprim e dans le format double ceil x le plus petit entier gt x exprim dans le format double floor x le plus grand entier lt x exprim dans le format double Gestion des erreurs fichier lt errno h gt Pour v rifier le r sultat de l appel d une fonction de la biblioth que math h le programme doit tester la varia ble errno error number Cette variable est d finie dans le fichier d en t te errno h lequel d finit galement les valeurs cod es de ce signal
272. ou pointeur rep rant un objet d un autre type tz Ces conversions n ont gu re de sens qu entre les membres diff rents d une union Exemple struct tete commande pt tete struct ligne commande pt ligne union bon commande struct tete commande tete struct ligne commande ligne en cours pt bon amp en cours LE 2 tete struct tete commande pt bon ligne struct ligne commande pt tete on peut maintenant crire pt tete gt no client lt gt pt bon gt tete no client pt _ligne gt qte commande lt pt bon gt ligne qte commande 4 5 Pointeurs et nombres entiers Un pointeur ou une adresse de m moire a le m me format qu un unsigned int puisque par d finition le type int poss de la taille d un registre adresse MAIS l interpr tation du contenu est toute diff rente que l on pense ici aux op rations d addition et soustraction Il est donc possible sans perte d information d op rer la conversion d un pointeur ou d une constante adresse au type unsigned int o un autre type entier de taille gale ou sup rieure il est aussi possible de convertir une valeur enti re en pointeur La conversion doit tre explicite par le biais d un op rateur de coercition Ce d tour permet certains calculs qui ne pourraient tre effectu s directement sur les pointeurs Exemple struct tete commande pt cde int posit no client dans tete commande unsigned amp
273. ous la forme du caract re de soulignement le premier caract re d un mot ne peut pas tre un chiffre Exemples while return n p puiss prix unitaire Qte etat 1 Etat 2 MIN La longueur maximum d un mot est de 31 caract res En C une minuscule et une majuscule ne sont pas quivalentes et interchangeables Les trois mots re sultat Resultat RESULTAT sont diff rents et d signeraient trois objets distincts Les mots cl s du langage sont tous en minuscules Par tradition on pr f re crire en minuscules Liste des mots r serv s Le programmeur ne peut pas red finir les mots cl s du langage ceux ci sont r serv s auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if static while 4 En r alit un mot peut tre plus long mais le compilateur n est oblig de consid rer que les 31 premiers caract res A CLARINVAL Le langage C 1 8 4 2 Variante En vertu des possibilit s syntaxiques du langage des variantes sont possibles float puiss float n int p lever n la puissance p float resultat 1 0 for p gt 0 p resulta for p lt 0 p resulta return resultat n Cette variante remarquablement compacte a t obtenue en utilisant diverses possibilit s du langage C dont certains op rateurs gadgets e si O est un op
274. p amp et amp et simples sont d autres op rateurs La r gle de l valuation partielle en vertu de laquelle le second op rande n est quelquefois pas valu est techniquement n cessaire pour l op rateur amp amp afin de rendre possible la recherche dans un tableau ou un fi chier d un l ment non n cessairement pr sent TANT que le num ro d l ment est inf rieur au nombre d l ments pr sents test toujours possible ET que l l ment d sign n est pas celui qu on cherche test im possible lorsque le pr c dent donne le r sultat faux incr menter le num ro d l ment 16 Le langage C s carte ici de l alg bre de Boole pour laquelle vrai est figur par le seul nombre 1 A CLARINVAL Le langage C 4 11 Exemple chercher la premi re occurrence de 0 dans un tableau for i 0 i lt dimens tableau amp amp n i 0 i apr s cette instruction i pointe soit sur la posit imm diatement apr s le tableau soit sur le ler 0 l int rieur du tableau remarquer le traitement vide chaque r p tition de la boucle variante amp amp ni lt gt amp amp n i 0 lt gt so E for i 0 i lt dimens tableau amp amp n i i 4 4 Manipulation des bits Introduction Il n est pas n gligeable le nombre d informations qui peuvent tre repr sent es dans un espace de m moire plus petit qu un octet c est dire avec moins de 8
275. par x Pour prendre l adresse du membre on crira amp x gt id lt amp x gt 1id Si le membre id est un pointeur x gt id lt x gt 1id effectue un adressage indirect via ce pointeur A CLARINVAL Le langage C 9 15 5 2 Manipulation des types Priorit Groupes d op rateurs Op rations Notation Associativit 14 pr fixes taille de sizeof x lt conversion au type TYPE x Taille sizeof x Les expressions suivantes donnent la taille d une donn e adresse constante ou pointeur et non pas la taille de l objet rep r sizeof T o T est un nom de type quelconque sizeof p o p est un pointeur ou une constante adresse Conversion de type TYPE x On peut convertir une adresse ou un pointeur p quelconque en adresse d un objet de type T en crivant T p On peut convertir une expression de valeur enti re en adresse d un objet de type T en crivant T i On peut sans perte d information convertir une adresse ou un pointeur p quelconque dans le type unsigned int en crivant unsigned int p La conversion peut galement se faire vers un autre type entier 5 3 Op rations arithm tiques Groupes d op rateurs 12 additifs addition xty gt soustraction x y D placement d adresse A une constante adresse ou un pointeur rep rant un l ment d un tableau on peut ajouter ou soustraire une valeur enti re celle ci est automatiquement convertie en d placemen
276. pression L instruction return peut figurer tout endroit du corps d une fonction Elle provoque une sortie imm diate de la fonction en cours et le retour l op ration suivante de la fonction appelante La fonction main est cens e appel e par le syst me de commande de l ordinateur et retourne ce syst me Dans la plupart des fonctions l instruction return a pour op rande l expression dont la valeur est le r sultat que la fonction rend la fonction appelante Si le corps d une fonction ne contient pas l instruction return son ex cution se termine la prise en charge de l accolade finale 4 3 goto tiquette Toute instruction ou construction peut tre pr c d e d une tiquette Une tiquette d instruction est un iden tificateur nom valide en C Elle est suivie du signe deux points tiquette Pour pouvoir tiqueter l accolade de fin d un bloc on doit la faire pr c der d une instruction vide tiquette La port e d une tiquette s tend sur toute la fonction o elle est d clar e L instruction goto rompt la s quence normale d ex cution de la fonction o elle est r dig e pour la poursui vre imm diatement au point de cette fonction identifi par l tiquette r f renc e goto tiquette Remarques Les possibilit s offertes par les expressions et constructions du langage C sont si riches que l instruc tion goto n est pratiquement jamais employ e Une tiquette d i
277. pression 1 texte 1 texte2 msg langue num msg langue 13 lif macro expression 2 Le pr processeur value dans l ordre les macro expressions si l une d entre elles est vraie 0 le texte i qui la suit imm diatement est conserv et les autres d truits si aucune n est vraie et pourvu que figure une ligne else texte n est conserv et les autres sont d truits Chaque fexte i est un texte quelconque Souvent il ne contient que des macro d finitions et autres directi ves pour le pr processeur il peut n anmoins contenir du texte en langage C proprement parler Il est possible d embo ter des constructions if endif Exemple if LANGUE F fran ais OUL E define OK O elif LANGUE N n erlandais Ja define OK Jg else anglais Yes define OK Y endif define KO N e Chaque macro expression doit tre une expression constante d un type entier elle ne peut contenir ni l op rateur sizeof ni aucun op rateur de conversion de type Tous les nombres sont interpr t s comme tant du type long int A CLARINVAL Le langage C 6 6 L expression defined identificateur ou defined identificateur est vraie vaut 1 si l identifica teur est d clar par define La valeur affect e cet identificateur n est pas prise en consid ration elle peut donc manquer dans la d claration Exemple gr ce
278. pulation des adresses Prise d adresse amp x L expression amp x fournit l adresse de l objet x L op ration est valu e par le compilateur et le r sultat est une constante L objet x ne peut tre ni un champ de bits dans une structure ni une variable de classe register ni le r sultat d une expression en particulier d un appel de fonction Adressage indirect x L expression x d signe indirectement l objet rep r par le pointeur x qui ne peut pas tre g n rique Les op rateurs s associent de droite gauche x lt x pointeur sur pointeur e S lection d un composant d une variable agr gat Note Les op rateurs s lectionnant un composant l int rieur d une variable agr gat poss dent la priorit la plus haute Cette option a pour effet pratique de simplifier l criture des r f rences usuel les sans cette r gle on devrait beaucoup plus souvent employer des parenth ses Indexation x y x peut tre un l ment d un tableau de pointeurs S lection de membre en adressage direct x id Pour prendre l adresse du membre id d une structure ou union x on crira amp x id lt amp x id Si le membre id est un pointeur x id lt gt x id effectue un adressage indirect via ce pointeur S lection de membre en adressage indirect x gt id x est un pointeur rep rant une structure ou une union x gt id lt x id adresse indirectement le membre id de la structure ou de l union rep r e
279. r sultat Dans la fonction puiss calculant n une variable locale est n cessaire pour pr parer le r sultat renvoyer la fonction appelante float puiss float n int p lever n la puissance p float resultat 1 variable locale for p gt 0 p result for p lt 0 p result return resultat 31 Attach une variable locale le qualificatif static a une autre signification Le double emploi avec double signification de ce qualificatif unique est malheureux Suggestion prendre le d tour d une macro d finition define PRIVATE static A CLARINVAL Le langage C 7 2 Dans un programme hi rarchis les variables donn es cumulatives titre identifiant caract risant cha que sous ensemble d un m me niveau de d composition seront en principe d clar es localement l int rieur du bloc traitant les sous ensembles de ce niveau Nous reproduisons ici l exemple du chapitre 5 Lisant des relev s de fabrication par ateliers on imprime les totaux de fabrication par usines et le total g n ral il s agit d une firme poss dant plusieurs usines Ce programme est hi rarchis sur trois niveaux traitement de l ensemble firme traitement de chaque sous ensemble usine trai tement de chaque l ment atelier include lt stdio h gt int main void donn es lues short int no usine short no atelier int total atelier int signal
280. r sultat Les proc dures la et 2a consisteront r p ter la s quence suivante d terminer le coefficient et l exposant du mon me suivant soit la par lecture au clavier soit 2a par calcul ou recopie transmettre ces donn es en param tres une fonction attacher _terme qui cr e un nouveau noeud et en rend l adresse ranger dans le pointeur du noeud pr c dent ou pour le premier terme dans le pointeur d ancrage Dans une liste doublement cha n e chaque maillon est form d un corps et de deux pointeurs de cha nage vers le maillon pr c dent et le maillon suivant Ce double cha nage permet de parcourir la liste dans les deux sens avant arri re Pour ancrer la liste dans le programme au lieu d employer deux pointeurs de d but et fin de liste il sera plus pratique d utiliser deux maillons vides pointant respectivement vers le premier et le der nier maillons r els pointeur de position courante A CLARINVAL Le langage C 11 20 Dans une liste vide ces deux maillons pointent l un vers l autre L insertion d un maillon dans une liste vide s effectue donc de la m me fa on que dans le cas g n ral entre deux maillons ESCAREA EI pointeur de position courante On demande de programmer les fonctions de manipulation d une liste doublement cha n e dont cha que maillon a pour corps un pointeur void vers un objet de type quelconque Les fonctions sui vantes sont r ali
281. r constitue une fonction Une fonction est une partie de programme qui re oit des arguments ou param tres la racine N et l exposant P et g n ralement rend une valeur en r sultat doivent se suivre dans l ordre illustr ici float puiss float n int p A d claration ou signature de la fonction type du r sultat nom param tres formels les param tres re us par une fonction sont dits formels d claration d un param tre formel type nom FF lever n entre exemple de commentaire la puissance p un commentaire n est pas analys par le compilateur des commentaires peuvent tre plac s n importe o B d finition ou corps de la fonction sous la forme d un blocentre les parties X Y du texte d un bloc doivent se suivre dans l ordre illustr ici float resultat X d claration des variables locales c est dire accessibles aux seules op rations l int rieur du bloc resultat 1 0 Y op rations ou instructions while p gt 0 certaines instructions peuvent contenir des blocs A xn 4 up RS de habituellement ces blocs ne contiennent pas de d clarations de variables while p lt 0 resultat resultat n p p 1l return resultat Dans ce texte e les mots anglais sont des mots cl s du langage C d finis par les cr ateurs de ce langage e les lettres isol es et les noms fran ais sont les identificateurs des objets d finis par le programmeur Quelques l ments
282. r dre E CPR RTE ARR TARN PERTE Sur 9 16 5 45 Comparaison Sesen eri renier trentaine e A EEPE NEA APENA EEEE OE a EEE eanes aee lens 9 17 S3 Op rations logigUe Scs sscnoriniiscerersersseisesisrisiri isei roisses svesno vis teniri stoot AEE R Ee Kn SNES KeS E n re 9 17 5 6 Expression conditionnelle expri expr2 expresse 5 7 Op rations d affectation ses 5 8 Incr mentation d cr mentation iii 5 9 Appelde foncton ER ea ee en re A te te M Es ai tee 6 Quelques fonctions utilitaires ssssssssssssnsenseneresreeeeerernnse 6 1 Manipulation des cha nes de caract res fichier lt string h gt 6 2 Allocation dynamique de m moire fichier lt stdlib h gt 6 3 Composition analyse de texte sprintf sscanf sise 6 4 Conversion de nombres fichier lt stdlib h gt eseessessesessssssesssssssrssrsessessrsessessese 6 5 Interaction avec le langage de commande de l ordinateur fichier lt stdlib h gt 6 6 Gestion du calendrier et de l horloge fichier lt time h gt XOPCIC S nm E nr le nt ete eme tete eue da eat nt es en Patent ere ee eee eue CHAPITRE T0 LES FICHIERS ni MR en nine AETA EA EAEE EAE AAI ASEEN EEEE RENE 1 Introduction le concept de fichier Classification des fichiers d apr s la nature de leur support Classification des fichiers d apr s la nature de leur contenu 2 Connexion et d connexion d un fichier ss 2 1 Ouverture d un fichier fopen esessesesesseeeeeeee
283. r la position elle m me mais un code signifiant que telle position doit tre prise comme origine Le langage C page 10 10 e La fonction ftell indique sous la forme d un long int la position courante dans un fichier La premi re position du fichier est la position 0 long int ftell FILE ptr fichier param tre pointeur du flot vis retour position courante EOF en cas d erreur Exemple la fonction f faille indique la taille d un fichier d j ouvert include lt stdio h gt long int f taille FILE pt fichier taille d un fichier param tre pointeur du fichier ouvert long int posit courante derniere posit posit courante ftell pt fichier m moriser fseek pt fichier 0 SEEK END aller la fin de fichier derniere posit ftell pt fichier fseek pt _fichier posit courante SEEK SET restaurer return derniere posit r pondre 5 3 Application un syst me de fichiers relatifs Un fichier relatif est un fichier sur support adressable dont les enregistrements sont num rot s Il est possi ble de retrouver imm diatement tout enregistrement d s lors qu on en conna t le num ro Cette organisation implique quelques contraintes tous les enregistrements doivent tre de la m me longueur la position de l enregistrement i pour une num rotation commen ant 0 est gale SEEK SET
284. r ne contient plus de donn es e erreur toute autre cause de non aboutissement de la fonction 3 1 Fonctions d analyse des exceptions ferror feof La structure FILE d crivant l tat de chaque flot de donn es contient des indicateurs d erreur et de fin de fi chier Ces indicateurs sont analys s par les fonctions ferror et feof e feof ptr fichier entree est vrai 0 lorsque la lecture a atteint la fin du fichier end of file e ferror ptr fichier est vrai 0 si la derni re op ration tent e sur le flot a chou pour une autre raison 66 Cf chapitre 3 Le langage C page 10 4 De plus la variable globale errno d finie dans le fichier lt stdio h gt contient un code identifiant la der ni re erreur qui s est produite sur un flot quelconque Les valeurs de cette variable sont d finies dans le fichier lt errno h gt 67 3 2 Retours exceptionnels EOF NULL Certaines fonctions comme fopen dont le r sultat est un pointeur renvoient le pointeur NULL z ro en cas d erreur Certaines fonctions comme fclose dont le r sultat est un entier renvoient la valeur EOF valeur n gative en cas de fin de fichier end of file ou d erreur 4 Fonctions d acc s un fichier de texte Les fonctions d acc s aux flots standards stdin et stdout d crites au chapitre 3 sont des cas particuliers de fonctions plus g n rales permettant d acc der un fichier de texte quelconque Nous pr
285. r un programme de mise jour d un fichier rela tif par exemple une liste de messages num rot s Le langage C page 10 15 Le langage C page 10 16 Chapitre 11 Structures de donn es complexes Par l utilisation de pointeurs il est possible de construire des agencements de donn es sophistiqu s Ce cha pitre a pour ambition d ouvrir modestement cette perspective 1 Pointeurs et tableaux 1 1 Tableaux plusieurs dimensions Soit un tableau de nombres short int deux dimensions define L 3 define C 6 define T short int T tIL C Fonctionnellement c est dire pour les op rations qui le traitent il est consid r comme un tableau de 3 li gnes et chaque ligne comme un tableau de 6 colonnes for 1 0 1 lt L 1 for c 0 c lt C siela Mat riellement il est construit dans des positions de m moire contigu s et prend l aspect suivant l 2 31 4 s 6 2 4 6 s i1o 12f 3 6 9 12 15 18 adr 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 Soit une r f rence t LIGNE COLONNE cer le d placement unitaire pour l indice COLONNE est 2 c est dire sizeof T le d placement unitaire pour l indice LIGNE est 12 c est dire sizeof T C L adresse est gale t sizeof T C LIGNE sizeof T COLONNE ou t sizeof T C LIGNE COLONNE Pour une r f rence t LIGNE l adresse est t
286. racine du sous arbre gauche SM gt N si un sous arbre droit existe pour N ins rer M dans ce sous arbre sinon cr er M comme racine du sous arbre droit En g n ralisant cet algorithme devient e Localiser le mot M dans un arbre de racine N siM N le noeud N contient d j le mot M effectuer l action pr vue ex lire remplacer ou supprimer N siM lt N si un sous arbre gauche existe pour N localiser M dans ce sous arbre sinon le noeud M n existe pas effectuer l action pr vue ex ins rer M comme racine du sous arbre gauche siM gt N si un sous arbre droit existe pour N localiser M dans ce sous arbre sinon le noeud M n existe pas effectuer l action pr vue ex ins rer M comme racine du sous arbre droit arbre2 c include lt stdio h gt printf include lt stdlib h gt malloc include lt string h gt strcpy stremp typedef struct noeud struct noeud fils g fils d char texte 15 1 Noeud N B pointeur ppn gt pointeur modifiable pn gt noeud n static void creer Noeud ppn char mot cr er un noeud et placer son adresse dans le pointeur ppn du noeud p re Noeud pn ppn malloc sizeof Noeud obtenir m moire pn gt fils g NULL pn gt fils_d NULL cha nages vides strcpy pn gt texte mot ACTION cr er le texte A CLARINVAL Le langage C
287. re amp symb longueur else if isalpha p expr symb commen ant par une lettre extraire un nom symb categ NOM X N B caract valides sscanf p expr abcdefghi klmnopqrstuvwxyz 0123456789 n amp symb texte nom amp symb longueur else autre caract re extraire un op rateur symb categ OPER sscanf p expr c n amp symb texte oper amp symb longueur symb posit p expr position de d but du symbole p_expr symb longueur position suivante return amp symb retourner l adr du descr de symbole A CLARINVAL Le langage C 12 13 calc_stx c T ANALYSE SYNTAXIQU PJ EL include calc h VARIABLES ET FONCTIONS GLOBALES POUR L ANALYSE SYNTAXIQUE Symbole symb_sv void f de lecture du symbole suivant PRIVATE Symbole pt symb ptr vers la descr du symbole courant PRIVATE Logique err syntaxe indicateur d erreur global MACRO INSTR DE TRAITEMENT DES ERREURS composition ou symbole non reconnu define KO return FAUX composition incorrecte signal t m morise l erreur defin rr texte return msg texte err syntaxe VRAI FAUX symbole reconnu lit le symbole suivant define symb OK return pt_symb symb sv VRAI composition rec
288. re jours ji 2 3 4 5 6 7 8 D JO TI dans_mois 0 Exemples d signation d un l ment nbre jours dans mois mois 1 total des ventes de d cembre total ventes du mois 11 Parcours d un tableau Il est fr quent qu un programme doive parcourir un tableau c est dire en examiner ou traiter tous les l ments Le parcours d un tableau adopte le sch ma d op ration ci dessous indice lt premi re position examiner souvent 0 init TANT QUE indice lt dimension ou derni re position examiner TANT QUE cond EXECUTER traiter l l ment d sign par l indice EXECUTER oper indice lt indice 1 incr FIN TANT FIN TANT Pour cela on programmera une boucle while ou mieux une boucle for init cond incr oper Exemple initialisation des totaux de ventes 12 La dimension d un tableau peut tre indiqu e par toute expression arithm tique ayant une valeur enti re constante Exemple int elt 3 4 A CLARINVAL Le langage C 2 13 whil j for i 0 i lt 12 i total ventes du mois i total ventes du moisi FEL Exemple calcul du total des ventes depuis le d but de l ann e le num ro de mois_en_cours tant compris entre 1 et 12 rappel x y amp x x y total ventes ann 03 for i 0 i lt mois en cours i total ventes ann total ventes du moisi Traitement des tableaux par les fonctions Le chapitre 9 traitant des pointeurs d veloppera les diff r
289. rep rait un objet d un autre type un nombre entier une structure contenant un champ identifiant la fonction trier resterait inchang e sauf sur le point suivant une fonction de comparaison sp cifique chaque type d objet devrait tre appel e au lieu de stremp On peut donc imaginer une fonction trier g n rale qui outre l adresse du tableau de pointeurs et sa dimen sion recevrait en param tre l adresse de la fonction de comparaison utiliser Toutes les fonctions de com paraison adopteraient les m mes conventions que la fonction standard stremp param tres deux pointeurs pl et p2 r sultat int lt 0 si pli lt p2 0 si pl p2 gt 0 si p1 gt p2 Exemple comparaison de deux nombres entiers temp int pl int p2 comparaison de 2 entiers turn pl p2 Voici des exemples d appels de la nouvelle fonction trier char chaine 100 100 pointeurs vers des cha nes int nombre 300 300 pointeurs vers des entiers trier cha ne 100 amp stremp gt trier cha ne 100 stremp trier nombre 300 amp intemp lt gt trier nombre 300 intcmp On voit que le nom d une fonction d signe en r alit une constante contenant l adresse de cette fonction strcmp amp amp strcmp Il s agit de l adresse de d but du corps ex cutable de la fonction Dans la fonction frier le param tre formel qui recevra copie de cette adresse
290. repr sentation de ces valeurs La d finition compl te d un type de donn es comporte galement la sp cification pr cise des op rations possibles sur les donn es de ce type que l on songe par exemple l op ration qui ne s applique qu aux types entiers mais aussi aux diff rences de comportement de la division enti re et de la division r elle A l instar des autres langages de programmation le langage C propose au programmeur des types pr d finis identifi s par des noms r serv s int float etc et propose certaines m thodes pour d finir des types particuliers adapt s aux probl mes traiter Ces m thodes sont l num ration la structure et l union Tou tes ces m thodes construisent de nouveaux types de donn es au moyen d une liste de composants g n rale ment appel s membres f Voici le sch ma de base commun de d claration d un type construit m thode de construction tiquette de type liste des membres Exemples enum code sexe SEXE INCONNU 5 MASCULIN M FEMININ F 3 valeurs permises struct date short int jour mois annee combinaison de 3 entiers union nombre long int entier float reel 2 interpr tations possibles entier OU r el enum struct union sont les noms pr d finis des m thodes de construction code sexe date nombre sont les tiquettes que le programmeur attribue aux types d finis entre accolades sont li
291. rmalisme n a pas la rigueur des langages de programmation employ s pour r diger les programmes 2 3 Etape 1 3 optimiser l algorithme Ne peut on am liorer cet algorithme le rendre plus lisible supprimer des op rations parasites rendre la m thode moins co teuse en temps d ex cution g n raliser davantage la solution A CLARINVAL Le langage C 1 4 Premi re optimisation Dans les trois cas d apr s la valeur de P l algorithme ci dessus commence par ex cuter l affectation R lt 1 L algorithme peut tre modifi de mani re telle que cette instruction soit r dig e une seule fois au d but METHODE DEBUT R 1 0 SIP gt 0 ALORS DEBUTI lt P compteur TANT QUEI gt 0 EXECUTER DEBUTR amp RxN I I 1 FIN FIN TANT FIN FIN SI SIP lt 0 ALORS DEBUTI lt P compteur TANT QUEI lt O0 EXECUTER DEBUTR lt R N I I 1 FIN FIN TANT FIN FIN SI FIN Deuxi me optimisation supprimer les alternatives SI qui font double emploi avec les tests effectu s dans les constructions TANT QUE METHODE DEBUT R 1 0 IP compteur TANT QUE I gt 0 EXECUTER DEBUTR amp RxN Il 1 FIN FIN TANT TANT QUEI lt Q0 EXECUTER DEBUTR lt R N I I 1 FIN FIN TANT FIN Troisi me optimisation utiliser directement P comme compteur d it ration Ceci implique qu on n ait plus besoin de la valeur de P apr s l ex cution de l algorithme METHODE DEBUTR lt 1 0 TANT QUEP gt 0 EXECUTER DEBUTR lt RxN P P 1
292. rne de cette fonction d veloppe une suite de nombres partir d une graine seed qui par d faut vaut 1 Pour une m me graine la suite de nombres sera toujours la m me Il est donc recommand d initialiser la suite de nombres en fournissant par la fonction srand une valeur de d part elle m me changeante Mani re simple prendre la valeur par laquelle la fonction fime repr sente la date et l heure de l instant pr sent include lt stdlib h gt d f de rand srand include lt time h gt d f de time srand time 0 donne une valeur de d part pour rand A CLARINVAL Le langage C 4 24 9 2 Gestion des caract res fichier lt ctype h gt Le fichier d en t te standard ctype h character type d finit des fonctions is de test d un caract re et deux fonctions to de conversion d un caract re Les fonctions de test renvoient un int 0 faux ou diff rent de 0 vrai isprint isgrap isdigit islower isupper isalph BE a isalnum ispunct t caract re imprimable y compris caract re imprimable sauf chiffre d cimal lettre minuscule anglaise non accentu e lettre majuscule amp lt islower c isupper c lt isdigit c isalpha c lt isgraph c amp amp isalnum c caract re d espacement f na Ar w n ntn caract re de contr le dans l alphabet ASCII positions 0
293. rt int jour mois annee date echeance date paiement union long int entier float reel resultat Port e des d clarations de types Comme pour la d claration d une variable l endroit du texte o est r dig e la d claration d un type d finit la port e globale ou locale de cette d claration La d claration d un type doit tre visible tout endroit du texte o elle est r f renc e en particulier tout endroit o on d clare une variable ou une fonction de ce type Une variable ne sert qu m moriser une information entre l ex cution de deux instructions elle existe dans le contexte d utilisation form de ces instructions autant que possible on d clare donc les va riables localement En revanche il est dans la nature de la plupart des d clarations de types d avoir une port e globale et m me de figurer dans les fichiers d en t te h REMARQUE Une tiquette de type n est jamais employ e seule elle est toujours pr c d e du nom de la m thode de cons truction il n y a donc aucun inconv nient technique employer le m me nom comme tiquette de type et comme identificateur de variable pour le compilateur la confusion n est pas possible Ceci peut n anmoins entra ner des difficult s de lecture pour le programmeur on pr f rera donc l viter 4 Exemples enum code sexe code sexe struct date date On n a pas tendu cette facult jusqu autoriser par exemple qu une tiquette
294. s de construction de types de donn es ss 8 1 TA G n ralit s ss ronron ent naa eaa E EA EAE AAE se en nt 8 1 Port e des d clarations de f pes sers inertie ta AEEA E EANA EAT ARAE ET 8 2 NOTE R f rence un type construit d fini ult rieurement sien 8 3 1 2 Types codifi s les num rations D claration snra E assis n ant nie tre entend ann RE RARE a EE a E EA BETATT SANITAIRE MIE CMP SRE AE ADR ANR DL ME EN ADS PT OR A An sean Port e d s d clarations assises e draft E nette tritndehes del A E eE a SEDES Remarque m thodologique isnrsnseninfnianneane ee e R EE a Aa o tee din aE nent 1 3 Types composites les structures D clarations Op rations 1 Taille d une structure ss Op rations 2 D signation des membres ss ssssnsesneneenenennneenenens 8 9 Op rations 3 Copie d structures zishhinitaininiiinianihnitimatin iii ieia i s ia e i een 8 10 Initialisation des variables structur es ted iua anedon onie aa a a is 8 11 1 4 Typ s lt rnatifs lt les UMIONS sosirii ipi eera dedere iia oseane ea eetika tiie as aiaei 8 11 D claration Utilisation sernir ea a e a e nee tete E E aaa ts Ea a tendre Op rations 1 5 Les champs de bits D claration Utilisation sarengate nn e a a a aa a a Saet eead diee 2 D claration de noms d typen isinri eienen tniii a a K EE eee E E 8 15 D claration et utilisation Port e des d clarations IDA LALE AEAEE EEAS EAE EE EAE EEE E EE S A CLARINV
295. s des expressions conditionnelles Il est possible de cette mani re d embo ter des expressions conditionnelles Exemple la version r cursive de fonction pgcd de calcul du plus grand commun diviseur de deux nombres peut tre r crite de la mani re suivante int pgcd int a int b return a lt b pgcd a b a b lt a pgcd b a b a b 7 2 Expression s quentielle op rateur Op rateur e Format exprl expr2 e Op ration exprl est valu e en premier lieu mais sa valeur n intervient pas dans la d termination du r sultat expr2 est valu e en second lieu sa valeur devient le r sultat de l op ration Cas d emploi exprl est ex cut e comme une action pr alable l valuation d expr2 Pour tre utile cette action pr alable doit comporter l affectation d une valeur une variable ou effectuer un change d information avec l utilisateur du programme Syntaxiquement une expression s quentielle peut tre utilis e l o est autoris e une expression simple no tamment en guise de condition Exemple forcer l utilisateur donner une r ponse autre que 0 while scanf d g amp n n 0 r p ter la lecture Associativit L op ration est associative Le nombre de sous expressions successives est donc illimit Dans tous les cas le r sultat est simplement la valeur de la derni re sous expression A CLARINVAL Le langage C 4 21 Ex
296. s effectu es A CLARINVAL Le langage C 5 17 if gauche gt droite si l intervalle est vide return 1 gt non trouv else int milieu indice milieu gauche droite 2 if x lt tf milieul chercher dans la moiti gauche return chercher x t gauche milieu 1 if x gt t milieul chercher dans la moiti droite return chercher x t milieu 1 droite return milieu x t milieu gt trouv include lt stdio h gt include chercher c void main void test de la fonction chercher int t 7 1 2 4 8 16 32 64 exemple de tableau ordonn int n printf Donnez un nombre entier scanf d n printf n se trouve la position d chercher n t 0 7 1 Pour que l ex cution d un algorithme r cursif ne se r p te pas l infini 1 tout appel r cursif doit tre situ l int rieur d une alternative dans laquelle il existe une issue non r cur sive la fonction de recherche dichotomique comporte deux issues non r cursives si le test d galit est satisfait issue trouv si gauche gt droite intervalle vide issue non trouv 2 la r p tition de l appel r cursif doit faire voluer les donn es vers une condition d issue non r cursive dans une recherche dichotomique chaque nouvel appel de la fonction r duit l intervalle examiner
297. s fichiers d en t te h e ex cute les autres directives Le relieur ou diteur de liens combine en un seul texte ex cutable les diff rents fichiers objets n cessaires La liste des fichiers objets rassembler est fournie par un fichier cr au moyen de l diteur de textes Exem ple pour le syst me Borland Turbo C A CLARINVAL Le langage C 1 14 puiss prj puiss c chaque fois qu un de ces fichiers est modifi test c puiss h l diteur de liens reconstruit le programme ex cutable la mention des fichiers h entre parenth ses peut tre omise diteur pr processeur liste des objets ETE ex cution ll Remarque Les programmes pr processeur compilateur et relieur sont souvent activ s en une seule com mande 5 Un autre exemple 5 1 Algorithmes Calculer le plus grand commun diviseur PGCD de deux nombres et B et leur plus petit commun multiple PPCM Les algorithmes de r solution se fondent sur les relations math matiques suivantes e type des arguments les deux nombres A et B sont des entiers strictement positifs PGCD si A B le PGCD est A ou B le PGCD de deux nombres est inchang si l on substitue au plus grand la diff rence des deux soit si A B PGCD A B A ou B si lt B PGCD A B PGOD A B A si gt B PGCD A B PGCD A B B 6 Exemple tir de N WIRTH Programmer en MODULA 2 Presses Polytechniques Romandes Lausann
298. s op rent la troncature enti re d un nombre r el e instruction d affectation float n int i i n e affectation du r sultat d une fonction int tronque float n return n A CLARINVAL Le langage C 4 5 conversion d un nombre entier en r el lors de l appel d une fonction affectation des param tres effectifs aux param tres formels e d claration de la fonction float puiss float n int p appel de la fonction sir DUESS 23 was 2 gt 2 0F Op rateur de coercition TYPE En dehors des cas d affectation on peut forcer la conversion d un op rande d un certain type dans un autre type en faisant pr c der cet op rande du nom du type destinataire entre parenth ses TYPE x Cette cons truction est connue sous le nom anglais de cast operator op rateur de moulage et en fran ais sous le nom d op rateur de coercition Exemple op rateur de conversion au type int int n le but de la fonction tronque ci dessus serait plus apparent si on crivait int tronque float n return int n Les op rateurs de conversion s associent de droite gauche On peut donc crire float fraction 3 5 float int fraction ce qui s value int 3 5 3 float 3 3 0 3 3 Conversions implicites Dans le cas d une op ration pour laquelle le type du r sultat n est pas indiqu par le programmeur ex a b le compilateur assure des conversions implicites Elles sont
299. s options propres chaque type d ordinateur les p bits de gauche sont mis 0 d calage logique ou prennent la m me valeur que le bit de signe d calage arithm tique Op rations bool ennes Les op rations bool ennes sur bits appliquent s par ment sur chaque bit de leurs op randes les fonctions de l alg bre de Boole Les op rations deux op randes combinent entre eux les bits occupant la m me position dans les deux op randes e compl ment x force les autres 0 e OU inclusif union x y laisse inchang es les positions qui sont 0 dans les deux op randes la fois force les autres 1 e OU exclusif x y force 0 les positions qui ont la m me valeur dans les deux op randes force 1 les positions qui ont une valeur diff rente dans les deux op randes inverse chaque bit de l op rande e ET intersection x amp y laisse inchang es les positions qui sont 1 dans les deux op randes la fois Le tableau ci dessous indique quel est le r sultat pour chaque couple de bits A CLARINVAL Le langage C 4 13 Habituellement le premier op rande est la variable manipul e test e ou mise jour tandis que le second op rande est une constante donn e sous forme hexad cimale qui joue le r le d un masque appliqu sur la variable Exemples N B les bits sont num rot s de droite gauche partir de 0 pour la compr hension dans les exemples ci dessous
300. s programmeurs et c est toujours le cas puisque tout programmeur aura des successeurs il doit fournir aux utilisateurs futurs de ces fonctions une documentation un mode d emploi suffisante et correcte en m me temps il souhaite pro t ger les textes qu il a programm s de toute intrusion indiscr tion ou modification malencontreuse La documentation d une fonction doit fournir les renseignements suivants e le nom de la fonction e la liste ordonn e des param tres e le type des param tres et le type du r sultat compl ter par la liste des valeurs exclues e un commentaire pr cisant les autres pr conditions ventuelles e si un param tre ou le r sultat poss de des valeurs cod es bien d finies un commentaire num rant ces valeurs avec leur signification e un commentaire expliquant de mani re compr hensible la transformation op r e sur les param tres A l exception des commentaires ces indications composent le prototype de la fonction La documentation des fonctions est donc faite dans les fichiers d en t te nnnnnn h ce sont les seuls fi chiers auxquels les programmeurs utilisateurs auront acc s Pour viter une dispersion excessive de la documentation on groupera dans un m me fichier d en t te la des cription de toutes les fonctions d un m me module ou d une m me famille C est ainsi qu ont proc d les cr ateurs des fonctions de la biblioth que standard associ e au langage C Ex
301. s s lectionnables le nombre de cas n est pas limit 2 en revanche le type de condition est souvent restreint En C il s agit de la construction switch aiguillage Pour que ces constructions puissent s embo ter il faut et il suffit que toute construction soit elle m me consi d r e comme tant une instruction Les sch mas ci dessus faisaient d j cette interpr tation pour la s quence 25 Exception possible une intervention ext rieure au programme En C ce peut tre la modification d une variable volatile test e dans la condition cf chapitre 7 A CLARINVAL Le langage C 5 2 Exemple la version non r cursive de la fonction pgcd donn e au chapitre 1 est form e d un em bo tement de constructions des trois types we pgEe imite ap at 19 return 1 2 Conventions g n rales du langage C Terminateur d instruction Toute instruction de base instruction expression ou instruction de saut voir plus loin doit tre termin e par un point virgule Par elle m me une construction n est pas cl tur e par un point virgule Bloc La d finition le corps d une fonction prend la forme d un bloc En C comme dans tous les langages de la lign e d ALGOL la construction s quentielle connue sous le nom de bloc pr sente la particularit de pouvoir contenir la d claration de variables locales seulement accessibles aux instructions de ce bloc Les d clarations doivent pr
302. saut Les instructions de saut rompent la s quence normale d ex cution d une construction 4 1 break continue Comme on vient de le voir l instruction break peut figurer dans le bloc d instructions d une construction switch D une mani re analogue l instruction break peut figurer dans le bloc d instructions d une cons truction it rative while for ou do while Elle provoque un saut imm diat l instruction dont l ex cution doit suivre celle de Ja plus petite construction switch ou boucle qui l entoure L instruction continue peut figurer dans le bloc d instructions d une boucle while for ou do while Elle provoque le passage imm diat l it ration suivante de la plus petite construction it rative qui l entoure contrairement break elle ne met pas fin au bouclage Exemple Un tableau contient une cha ne de caract res repr sentant une expression analyser L analyse doit s arr ter break d s la rencontre du terminateur de cha ne 0 de plus elle doit pas ser outre continue des blancs et autres caract res sans repr sentation graphique include lt ctype h gt fonctions de test des caract res char expr 80 1 long maxi de l expr 80 int posit posit 0 posit lt 80 posit if expr posit 0 break if lisgraph expr posit l continue switch expriposit trait des caract res pris en consid ration A CLARINVAL Le langage C 5 15 4 2 return ex
303. se placer sur le pr fixe de l enreg et l extraire ae fseek pt_fichier sizeof prefixe taille enreg long num SEEK SET posit ftell pt fichier m moriser la position fread amp prefixe sizeof prefixe 1 pt fichier if feof pt fichier return EOF lt gt posit inoccup e se replacer au d but de l enregistrement F7 fseek pt fichier posit SEEK SET return prefixe num ro ou EOF Le langage C page 10 12 zs int lire_rel PARAMETRES lire un enregistrement chercher l enregistrement int prefixe chercher rel num NULL taille enreg pt fichier if feof pt_fichier return EOF lt gt posit inoccup e fseek pt fichier sizeof num SEEK_CUR passer le pfx if prefixe gt 0 si l emplacement est occup fread pt_enreg taille_enreg 1 pt fichier fx lire else si l emplacement est inoccup fseek pt_fichier taille_enreg SEEK_CUR passer return prefixe num ro ou EOF On peut d finir des fonctions de mise jour plus sophistiqu es qui v rifient d abord l tat le contenu du fichier et n effectuent l op ration demand e que si cet tat l autorise Ces fonctions re oivent les m mes para m tres et renvoient le m me r sultat que les fonctions de base e inserer rel si l enregistrement n exis
304. senter une liste sous une forme litt rale qui pourrait tre celle ci LISTE texte ex LISTE 0 5S o ZE Bez 2 Ah Le traitement d une liste s effectue toujours au moyen d une fonction r cursive inspir e de ce sch ma le traitement programm s applique au PREMIER l ment de la liste l appel r cursif suivant s applique la SUITE de la liste le bouclage r cursif s arr te lorsque la liste est VIDE A CLARINVAL Le langage C A 12 22 L int r t de la programmation fonctionnelle vient de ce qu elle fait une grande conomie de concepts Elle ne recourt qu un tr s petit nombre de notions math matiques et ne requiert pas de concepts suppl mentaires de technique informatique tels que tableaux instructions proc dures constructions algorithmiques modes d adressage direct et indirect modes de transmission des pa ram tres port e des identificateurs dur e de vie des variables etc Le prix pay pour cette simpli cit est incontestablement celui d une plus grande abstraction Programmation fonctionnelle en langage C Tel quel le langage C permet la programmation fonctionnelle l exception du traitement de listes Le programmeur doit se limiter la seule instruction return ex unsigned long int factorielle unsigned long int n return n 0 1 n factorielle a 1 Les macro d finitions suivantes permettent de traiter u
305. ser e initialisation d une liste cr ation des maillons d ancrage e d placement du curseur modification et renvoi de la position courante first pointer sur le premier maillon utile last pointer sur le dernier maillon utile forward current avancer sur le maillon suivant backward current reculer sur le maillon pr c dent e gestion des maillons programmer sans utiliser aucun pointeur de manoeuvre insert current ins rer un maillon devant le maillon courant et en renvoyer l adresse remove current supprimer le maillon courant et placer le curseur sur le suivant e acc s l objet donn es attach au maillon courant attach current object attacher l objet au maillon courant detach current d tacher l objet du maillon courant get current rendre l adresse des donn es Toute fonction recevant en param tre une adresse current modifie et renvoie la position courante Ecrire un programme de test dans lequel les objets attach s aux maillons seront par exemple les mots d un texte En guise d application r aliser un programme qui simule le tableau d affichage des trains au d part dans une gare une structure Train doit tre d finie heure pr vue destination cat gorie de train retard la liste des trains est doublement cha n e on doit pouvoir ins rer supprimer modifier d placer un train dans la liste la fen tre d affichag
306. sions que des op rations de base x Ilestdonc n cessaire de combiner ces op rations dans un algorithme Ceci suppose l existence de m canismes de composition des op rations Voici les plus courants e La s quence est une suite d op rations effectu es l une apr s l autre en suivant l ordre de leur men tion DEBUT op ration 1 op ration 2 FIN A CLARINVAL Le langage C 1 2 vraie cette condition est test e avant chaque ex cution de la s quence Pour que la r p tition finisse par s arr ter la s quence r p t e doit contenir des op rations capables de rendre la condition fausse Si d s le d part la condition est fausse la s quence d op rations n est pas ex cut e TANT QUE condition EXECUTER s quence FIN TANT e La s lection choisit parmi plusieurs une seule s quence d op rations et l ex cute le choix est dict par une condition Une des s quences possibles peut tre vide de toute op ration si cette s quence est s lectionn e aucune op ration n est donc ex cut e SI condition ALORS s quence SINON s quence e L it ration consiste r p ter l ex cution d une s quence d op rations tant qu une condition reste FIN SI Premi re version de l algorithme ALGORITHME PUISSANCE ARGUMENTS REEL z0 N ENTIER P RESULTAT REEL R METHODE SIP 0 ALORS R 1 0 FIN SI SIP gt 0 ALORS DEBUT R 1 0 ex cuter P fois R lt R x N FIN FIN SI SIP lt 0 ALORS DEB
307. soit la d claration short int p si p contient l adresse 76 p a pour r sultat 78 si sizeof short 2 Pour d videntes raisons de coh rence la m me r gle s applique aux constantes adresses Exemple soit la d claration short int t 12 si le tableau est implant partir de l adresse 76 amp t 0 vaut 76 amp t 0 1 vaut 78 53 Cf chapitre 2 54 L quivalence est pouss e jusqu autoriser l indexation d un nom de pointeur et l indirection via un nom de tableau Soit la d claration int i t N p t i entier t tableau p pointeur Les d signations suivantes sont autoris es et quivalentes t i t i p i pli Puisque t i lt t i i t ilest m me permis d crire i t Puisque t lt amp t on peut aussi crire amp t i tli diff rent de amp t i lt amp tli A CLARINVAL Le langage C 9 5 Le programme ci dessous illustre cette r gle de calcul include lt stdio h gt void main void float fiA p sur fl fl pointe sur f1 0 taille de l l ment sur lequel on pointe print f n n sizeof float d sizeof p sur fl contenu du pointeur converti en entier non sign affich en hexad cimal printf n p_ sur fl vaut 3x unsigned int p sur fl print n p sur fl 1 vaut x unsigned int p sur fl printf n amp f1 0 vaut x unsigned int amp f1 0 printf n amp f1 0 1 vaut x
308. sort void tableau size t nbre elements size t taille element int comparer const void pl const void p2 void bsearch const void cle fait partie de l l ment cherch const void tableau size t nbre elements size t taille element int comparer const void cle const void element La fonction bsearch rend l adresse de l l ment contenant la cl indiqu e elle rend NULL si aucun l ment ne satisfait cette condition La fonction de comparaison doit respecter les conventions de la fonction standard strcmp param tres deux pointeurs p1 et p2 dans bsearch p1 cle et p2 d signe successivement les l ments du tableau r sultat int lt 0 si pl avant p2 0 si pl p2 gt 0 si p1 apr s p2 3 2 Fonctions liste de param tres variable La fonction standard printf et ses d riv es 6 sont des exemples de fonctions recevant des param tres en nombre variable et de type variable un tableau de caract res puis de 0 n valeurs de type quelconque D claration Une telle fonction est d clar e de la mani re suivante int printf char format en t te de la liste de param tres doit figurer au moins un param tre nomm et de type d fini dans l exemple le pointeur format vers la cha ne de caract res de contr le en queue de la liste les points de suspension repr sentent les derniers param tres en nombre quelconque
309. srand Lude lt time h gt time x x FONCTIONS MANIPULANT L OBJET boule int rand in int min int max ramener dans l intervalle min max le nombre al atoire re u de rand return min rand 1 max min int numero void tirer une boule nombre al atoire dans 1 42 return rand in 1 42 XXXXX FONCTION UTILISANT LES 2 OBJETS boule ET tirage int unique int boule int tirage 6 1 int position position de la boule test e cette boul st d j ou non plac e dans le tableau renvoie le n de boule si OK sinon 0 c d FAUX i i 0 i lt position i if boule tirageli return 0 turn boule X XXX FONCTIONS MANIPULANT L OBJET tirage void effectuer int tirage 6 1 effectuer le tirage int i srand time 0 initialiser le g n rateur rand for i 0 i lt 7 i tirer 7 num ros do r p ter la tentative tirage i numero si le num ro while unique tirage i tirage i a d j t tir void publier int tirage 6 1 publier le r sultat int i for i 0 i lt 7 i printf d tiragel i A CLARINVAL Le langage C 5 23 PROGRAMME void main void int tiragel 6 1 tableau r sultat du tirage effectuer tirage
310. sse L adresse de la fonction f elle m me peut tre rang e dans un pointeur 5 59 Cf chapitre 11 A CLARINVAL Le langage C 9 19 6 Quelques fonctions utilitaires 6 1 Manipulation des cha nes de caract res fichier lt string h gt Le fichier d en t te standard lt string h gt d finit un certain nombre de fonctions pour la manipulation des tableaux de caract res et cha nes de caract res Voici les principales Les noms de fonctions sont form s des abr viations suivantes CoMPare CoPY conCATenate CHaRacter LENgth Dans les d finitions qui suivent MEMory STRing STRing and Number dans les fonctions STR N s1 et s2 sont des adresses char de tableaux ou cha nes de caract res a Fonctions de comparaison int COEL int memcmp s2 s1 n S trcmp s2 s1 trncmp s2 s1 n dans les fonctions MEM s1 et s2 sont des pointeurs g n riques void n est une valeur enti re positive indiquant une longueur c est dire un nombre de caract res cest un int que la fonction convertit en char compare les n premiers octets de s1 et s2 compare les cha nes s1 et s2 jusqu leur terminateur 10 la cha ne la plus courte est cens e prolong e par des caract res 10 compare les cha nes s1 et s2 concurrence de n caract res la cha ne la plus courte est cens e prolong e par des caract res 10 ces fonctions retournent un int lt Osis2 lt s
311. st s les membres composants du type construit Apr s avoir ainsi d clar un type on peut d clarer des variables ou des fonctions appartenant ce type Exemples enum code_sexe sexe_enfant struct date date echeance date paiement struct date date du jour void union nombre resultat enum code sexe struct date union nombre identifient les types pr alablement construits sexe enfant date echeance date paiement resultat sont des identificateurs de variables date _du_ jour est l identificateur d une fonction sans param tres renvoyant la date du jour en cours 41 La programmation par objets qui au lieu de type de donn es parle de classe d objets permet ga lement de construire les op rations applicables aux objets d une classe Elle appelle m thodes ces op rations A CLARINVAL Le langage C 8 1 Une criture simplifi e permet de d finir en une seule d claration et le type et les variables qui le poss dent Exemples enum code sexe SEXE INCONNU MASCULIN M FEMININ F sexe enfant struct date short int jour mois annee date echeance date paiement union nombre long int entier float reel resultat Dans ces d clarations simplifi es l tiquette de type en italique dans les exemples ci dessus est facultative on l omet donc le plus souvent 2 Exemples enum SEXE INCONNU MASCULIN M FEMININ F sexe enfant struct sho
312. st couramment employ e le fichier m_base h d finit un nom qui le d signe lui m me et le contenu du fichier n est compil que si ce nom n est pas encore d fini m_base h if defined M BASI si pas encore inclus define M BASI signaler l inclusion et traiter le texte endif 3 5 Remarques sur la gestion des macro d finitions Avec les prototypes de fonctions les macro d finitions constituent le contenu principal des fichiers d en t te nnnnnn h L effet d une macro d finition s tend de l endroit o elle est d finie jusqu la fin du fichier source A moins que cet effet soit annul par une ligne A CLARINVAL Le langage C 6 7 Options la compilation La commande de compilation comporte une option D permettant de d finir des macro constantes dont la valeur n est donc pas fig e par define dans le texte du programme On peut ainsi arr ter la dimension d un tableau au moment de compiler le programme Exemples fixation de la dimension N d un tableau par l option de compilation DN 80 d finition de l option TEST d ex cution DTEST 4 Suppl ment La d monstration des programmes assert La proposition fout programme peut tre obtenu par l embo tement de trois types de constructions la s quence l it ration la s lection fonde les m thodes dites de programmation structur e Aux yeux de cette m thodologie un des principaux int r ts de la compos
313. suivant On veut lister les mots d un texte dans l ordre lexicographique c est dire alpha b tique La solution consiste conserver en m moire tous les mots rencontr s Chaque mot lu est recherch dans l ensemble des mots d j enregistr s s il n existe pas on le range en m moire Comment organiser l ensemble des mots en m moire centrale Le premier mot rencontr est plac la ra cine d un arbre binaire Les mots suivants sont rang s dans les noeuds de l arbre de mani re telle que le sous arbre gauche de n importe quel noeud N contienne uniquement des mots class s dans l alphabet avant le mot du noeud N et que son sous arbre droit contienne uniquement des mots class s apr s Exemple arbre binaire construit en lisant le vers ci dessous Plaisirs ne tentez plus un coeur sombre et boudeur Baudelaire hauteur Y 4 plaisirs 24 N 3 ne tentez K o 24 N 2 coeur plus un e N N e 1 boudeur et sombre e pointeur nul Un arbre binaire dont les noeuds sont ordonn s de cette mani re est appel un arbre binaire de recherche Le nombre maximum de noeuds travers s c est dire test s lors d une recherche est gal la plus grande hauteur de l arbre A la condition que l arbre soit quilibr c est dire que toutes ses branches aient la m me hauteur la performance de l algorithme de recherche dans un arbre binaire est comparable celle de la recher che dichotomique dans un tableau ordonn
314. sultat son image dans un co domaine f a i La m thode de com binaison des op rations est celle de la composition de fonctions consistant appliquer une fonction ou un op rateur pr d fini au r sultat d une autre application de fonction c est dire construire une expression La programmation fonctionnelle ignore les concepts d instruction et d ordonnancement chronologique des instructions bloc if while Au lieu de la construction if on emploie un op rateur de fonc tion conditionnelle tel que l op rateur du langage C au lieu des constructions en boucle on uti lise des fonctions r cursives La programmation fonctionnelle ignore le concept de variable emplacement modifiable en m moire a fortiori ignore t elle le concept de tableau Au lieu de cela elle manipule des listes de valeurs de longueur variable Ces listes sont toujours parcourues par des fonctions r cursives Pour permettre le traitement des listes un langage de programmation doit au minimum d finir les fonctions primitives suivantes VIDE AJOUTER l m liste PRE SUIT H ER liste liste Fa rend une liste vide c est dire ne comprenant aucun l ment ajoute un l ment en t te de la liste ex AJOUTER A AJOUTER h VIDE rend le premier l ment de la liste rend la partie de la liste qui suit le premier l ment Il doit aussi permettre de pr
315. t par le fait qu une expression aussi complexe soit elle est capable de cr er une seule valeur Il est donc n cessaire de disposer d autres m canismes de composition des op rations des m canismes que l on dit de contr le de s quence Instructions Les op rations combin es par un m canisme de contr le de s quence s appellent des instructions Une ins truction est une formule syntaxique prescrivant l ex cution de certaines actions Une expression est une premi re forme d instruction Pour pouvoir combiner sans restriction plusieurs ex pressions le r sultat de chacune doit tre m moris dans une variable Un nombre quelconque d instruc tions peuvent manipuler les m mes variables lire leur contenu ou le modifier Seules les expressions modifiant l tat de certaines variables ou effectuant un change d information entre le programme et son environnement sont utiles en tant qu instructions Tels sont les diff rentes formes d expres sions d affectation et certains appels de fonctions Exemples n2 puiss n 2 printf Bonjour a A CLARINVAL Le langage C 5 1 Constructions Tout programme peut tre obtenu par l embo tement de trois types de constructions la s quence l it ration la s lection La s quence est une suite d instructions ex cut es l une apr s l autre La forme d une s quence est la sui vante pseudo code langage C DEBUT op rations instructions FIN e L it
316. t 07 e s lectionner dans l intervalle 1 t N 1 le plus petit l ment et le permuter avec l l ment t 17 e continuer de la m me mani re pour les intervalles f 2 t N 1 jusque t N 2 t N 1 Si les cha nes de caract res sont stock es dans un tableau de caract res deux dimensions les comparaisons et permutations d l ments devront se faire par les fonctions utilitaires strcmp et strcpy Si l on constitue un tableau de pointeurs vers les diff rentes cha nes les comparaisons continueront se faire par la fonction stremp mais les permutations seront beaucoup plus rapides puisqu elles ne d placeront que des pointeurs et utiliseront les op rateurs de base du langage C trier c include lt string h gt stremp define GENERIC void qualificatif de pointeur void trier GENERIC item int nbre items int i j min indices for i 0 i lt nbre items 1 1 pour les intervalles O N 1 1 N 1 N 2 N 1 chercher l item cha ne minimum min i for j i l j lt nbre items if strcmp item j item min lt 0 min j if min i permuter les pointeurs d items i amp min GENERIC temp zone de manoeuvre temp item i item i item min item min temp Les param tres de la commande d ex cution La commande d ex cution d un programme C peut lui passer d
317. t d finie dans le fichier d en t te string h de la mani re suivante void memcpy void dest const void src unsigned int n Elle copie dans le tableau dest les n premiers octets du tableau src apr s quoi elle retourne l adresse du tableau dest Cette fonction suppose que les deux pointeurs dest et src pointent sur des espaces de m moire effectivement allou s A CLARINVAL Le langage C 9 12 La fonction ci dessous est une g n ralisation de memcpy Si l espace dest n est pas allou on en demande un par la fonction standard d allocation de m moire d finie comme ceci dans le fichier stdlib h void malloc unsigned int size include lt stdlib h gt d f malloc NULL include lt string h gt d f memcpy void copie void dest const void src unsigned int n fonction de copie g n ralis obtient un bloc de m moire de destination si n cessaire en cas d erreur ou impossibilit retourne NULL N B ptr NULL lt gt lptr if src NULL n lt 0 return NULL param invalides if dest dest malloci n allouer un bloc dest if dest return NULL malloc n a pu allouer return memcpy dest src n copier 4 4 Pointeurs sur des objets de types diff rents Soit un pointeur ou une adresse rep rant un objet de type t par un op rateur de coercition explicite on peut le convertir en adresse
318. t d adresse en tant multipli e par la taille du type d l ment rep r Le r sultat doit rep rer un l ment du tableau Ces calculs peuvent englober la position suivant imm diatement le dernier l ment du tableau Compte tenu des priorit s p d d signe l l ment d adresse p d p d lt p d augmente de d la valeur de l objet sis l adresse p Soustraction de deux pointeurs ou adresses On peut effectuer une soustraction entre deux pointeurs ou constantes adresses rep rant des l ments d un m me tableau Le r sultat est gal la diff rence des indices correspondants Le calcul peut englober la position suivant imm diatement le dernier l ment du tableau A CLARINVAL Le langage C 9 16 5 4 Comparaisons Priorit Groupes d op rateurs Op rations Notation Associativit 10 relationnels sup rieur x gt y gt sup rieur ou gal x gt y inf rieur x lt y inf rieur ou gal x lt y d galit gal x y gt diff rent x y Comparaisons dans les limites d un agr gat Toutes les comparaisons ont un sens entre deux adresses ou pointeurs quelconques rep rant des composants l int rieur d un m me agr gat tableau union ou structure c est dire dans les limites d une portion d es pace explicitement contr l e par une d claration du programme La position suivant imm diatement le der nier l ment d un tableau est assimil e un de ces l ments Autres compar
319. t d un pointeur ou d une constante adresse et de la constante NULL ou 0 la constante NULL est convertie dans le type de l autre expr s il s agit d un pointeur ou d une adresse quelconque et d un pointeur g n rique void le r sultat est un pointeur g n rique void aucune autre combinaison expr2 expr3 impliquant des pointeurs n est autoris e Exemple la fonction suivante retourne un pointeur sur une cha ne de caract res char prefixe char sexe char etat civil return sexe M Monsieur etat civil C Mademoiselle Madame 5 7 Op rations d affectation Priorit Groupes d op rateurs Op rations Notation Associativit 02 affectation affectation absolue X Y lt affectation relative x y Affectation absolue p adr Si p est un pointeur adr peut tre un pointeur g n rique ou la constante g n rique NULL ou 0 De plus sip est un pointeur g n rique l valuation de adr doit donner une adresse ou un pointeur quelconque sip est un pointeur pour un type d objet d termin l valuation de adr doit donner une adresse ou un pointeur valide rep rant un objet du m me type A CLARINVAL Le langage C 9 18 Affectation relative p i p i p i est une abr viation de p p i p i est une abr viation de p p i p peut tre un pointeur non g n rique associ un tableau alors doit tre une expression de valeur enti re indiquant un d placement d adress
320. t l op rateur humain via des terminaux cran clavier imprimante e entre programmes se d roulant successivement par le truchement de fichiers collections de donn es conserv es sur des supports magn tiques disques disquettes bandes e entre programmes s ex cutant simultan ment travers des r seaux de t l communication Nous programmerons ces op rations changes avec l utilisateur dans une autre fonction void main void void vide ni r sultat ni param tres test de la fonction puiss appelle les fonctions printf affichage l cran scanf lecture au clavier float r int e printf n introduisez la racine r elle scanf g e amp r printf n introduisez l exposant entier scanf d amp e printf n 3g exp d g n r e puissi r e Dans la d finition d une fonction le mot cl void vide signifie soit que cette fonction ne re oit pas de param tres soit qu elle ne renvoie pas de r sultat Un programme C est un ensemble de fonctions Un programme C est un ensemble de fonctions r dig es par le programmeur ex main puiss ou conserv es dans des collections ou biblioth ques standards c est dire fournies avec le compilateur du lan gage ou non ex printf scanf 5 Parmi les fonctions d un programme C il doit exister une et une seule fonction main Mis part un cas par ticulier qui sera
321. taines actions C est une particularit du langage C qu on puisse parfois valuer une expression simplement pour en ex cuter les actions sans transmettre la valeur qui en r sulte une expression englobante On utilise alors l expression en guise d instruction ordre donn l ordi nateur d ex cuter certaines actions Exemple un appel de fonction est une expression appel d une fonction en tant qu op rande n2 puiss n 2 appel d une fonction en tant qu instruction printf Bonjour n la valeur retourn e par la fonction nombre de caract res affich s n est pas r cup r e 2 Ordre d valuation des expressions Quelle est la valeur de l expression 12 8 2 7 Est ce 10 ou 16 Pour toute expression comportant plusieurs op rateurs il est n cessaire de dicter l ordre dans lequel les op ra tions doivent tre effectu es ou valu es A CLARINVAL Le langage C 4 2 A cette fin les repr sentations math matiques habituelles exploitent les possibilit s d un espace deux dimen sions 12 8 8 12 5 L criture unidirectionnelle d un programme n cessite d autres m canismes 2 1 Emploi des parenth ses Le programmeur peut enfermer une sous expression entre parenth ses Cette sous expression doit consti tuer par elle m me une expression correctement form e Toute sous expression entre parenth ses est valu e avant que son r sultat serve d op rande l expression contenante
322. tante de type adresse Sl Comme sizeof l op ration amp est une op ration valu e par le compilateur l expression p d signe indirectement non pas le pointeur p mais l objet v sur lequel il pointe sert ici d op rateur d indirection La d claration d un pointeur a la forme d une d claration de variable ordinaire ceci pr s que le type indiqu est celui de l objet rep r par le pointeur qui est lui m me du type adresse l identificateur attribu au pointeur est pr fix par imitation de l op ration d indirection cet identificateur peut tre pr c d des qualificatifs const et volatile modifiant le droit d acc s au pointeur pas le droit d acc s l objet rep r exemples short int v variable de type short int short int p ev pointeur sur un objet de type short int initialis pour pointer sur l objet v 51 L op ration amp adresse de n a aucun sens et elle est interdite avec une variable de classe register ou un champ de bits dans une structure de bits Si v est le nom d un tableau ou le nom d une fonction l op rateur amp est facultatif 52 Cf chapitre 7 A CLARINVAL Le langage C 9 1 on peut crire short int v t 12 const p amp v q L5 y scalaire t tableau p pointeur constant initialis q pointeur variable non initialis Illustration des d finitions id adr val short int v 0 v 16 short int
323. te pas l crire e remplacer rel si l enregistrement existe crire sa nouvelle version e supprimer rel si l enregistrement existe crire EOF dans le pr fixe rel _io c suite int inserer rel PARAMETRES if chercher rel num NULL taille enreg pt fichier EOF return EOF lse return ecrire rel num pt enreg taille enreg pt fichier int remplacer rel PARAMETRES if chercher rel num NULL taille enreg pt fichier EOF return EOF lse return ecrire rel num pt enreg taille enreg pt fichier PALI EEIE ILEN LPE NE EFES NERI E ENA 0 SR E BE E ANR E ETE P EE EA e OR ES NIE ENEE E E LEE ER LNE LY se tu int supprimer rel PARAMETRES l adresse de l enreg n est pas consid r e peut tre NULL if chercher rel num NULL taille enreg pt fichier EOF return EOF else int prefixe EOF marquer l emplacement inoccup if fwrit amp prefixe sizeof prefixe 1 pt fichier lt 1 return EOF en cas d insucc s fseek pt fichier taille enreg SEEK CUR passer return num Le langage C page 10 13 6 Gestion de la m moire tampon fonction fflush Pour les fonctions d acc s un fichier est une suite d octets et chacune de ces fonctions peut transf rer un nom bre quelconque d octets contigus Or tous les octets d un disque magn tique ne sont pas adressables indi
324. teurs de pointeurs seseeeeeeeeeeeeeeeeeeee 2 Pointeurs et structures 2 1 Structures contenant des pointeurs 2 2 Listes chaines fn net an EAA An Ra Rand dents at Liste cha n e selon une structure de file ss Liste cha n e selon une structure de pile ta E N EE NEEE Eerie Nir Eshi Eies 3 Pointe rs et Jonction an mienen ninaa ien a Met ne e a a a a a te Blo Pointe rs d FONCIONS irii E E EEE EN EE EAEN E EEEE EE E R E EOR Syntaxes de d claration d un pointeur de fonction ss Syntaxes d appel d une fonction Fonctions standards de traitement d un tableau ordonn qsort bsearch 3 2 Fonctions liste de param tres variable D clarations sn A RERO are nn he En A Et ne D Macro d finitions fichier lt stdarg h gt sise 3 3 Param tres pass s par r f rence simulation XOPCICOS Ernie le En crane ane relie done us dur case tentent aa en dre nent n test ele CHAPITRE 12 STRUCTURES R CURSIVES e are de M a de tn te lee 1 Parcours d un arbre de recherche binaire ss Le concept d arbres tin idee rene tn ee nt ne On ent tnt ati Repr sentation d un arbre binaire sise Op rations sossscicssninst irnia Arbre AVL cuota reei Commentaire 2 R gles de programmation des fonctions r cursives ss 2 1 Termnais nd l algorithme ess unes tte Re ne E E ei ant din due ne 2 27 Class d s variables sn es er N T cr nr ten en nee SV re en A e
325. tique appel de fonction fournissant une valeur A CLARINVAL Le langage C 1 11 Ceci produit dans l ordre les effets suivants 1 passation des valeurs des param tres effectifs la fonction appel e qui les range dans les param tres for mels dont elle contient la d claration une copie de la valeur du premier param tre effectif est rang e dans le premier param tre formel une copie de la valeur du deuxi me param tre effectif est rang e dans le deuxi me param tre formel etc en C les param tres sont pass s par valeur appel puiss y e param tres effectifs 4 4 d claration float puiss float n int p param tres formels les param tres effectifs et formels se correspondent par leur position dans les listes de param tres et non pas par leurs noms un param tre effectif donn sous la forme d une expression arithm tique ne poss de pas de nom 2 ex cution des op rations de la fonction appel e 3 si la fonction appel e retourne un r sultat r ception de cette valeur par la fonction appelante 4 poursuite de l ex cution de la fonction appelante Puisqu une fonction appel e travaille sur des copies de ses param tres elle peut modifier la valeur de ses param tres formels ce qui laisse inchang e la valeur des param tres effectifs dans la fonction appelante La fonction puiss peut donc utiliser son param tre formel p pour compter les it rations du traitement Une fonction
326. tre diff rence par rapport l exemple pr c dent le contenu du tableau est modifiable Sauf dans ce dernier cas lorsque l on cite une cha ne de caract res litt rale on manipule son adresse Les instructions ci dessous produisent donc le m me effet printf amp Bonjour n printf p msg printf Bonjour n printf t msg A CLARINVAL Le langage C 9 9 3 5 Note sur les pointeurs comme r sultats de fonctions La discussion sur l utilisation des cha nes de caract res va nous permettre d illustrer une r gle importante Si une fonction renvoie pour r sultat un pointeur ou une adresse l objet rep r doit tre soit une constante litt rale e soit un objet global e soit un objet local la fonction appel e objet d clar static si l objet n tait pas static il serait d truit lors de la sortie de la fonction appel e et la fonction appelante recevrait l adresse d un objet qui n existe plus e soit un objet dont l adresse a elle m me t pass e en param tre la fonction appel e exemples les fonctions strcpy et memcpy ci dessus Sauf dans le dernier cas on dit parfois que le pointeur renvoy par la fonction sert de poign e handle en anglais pour manipuler un objet cach Exemple La fonction nom mois re oit en param tre un num ro de mois elle retourne la fonction appelante le nom du mois plus exactement un pointeur vers ce nom Dans la premi re version ci
327. ts de la valeur de son op rande Cet op rande est e soit une expression pour la lisibilit il est recommand de placer l expression entre parenth ses exemples sizeof qte sizeof 234e 12 sizeof heure 3600 sizeof prix 1 taux 100 e soit une sp cification de type la taille indiqu e est commune toutes les valeurs de ce type une sp cification de type prend la forme d une d claration de variable sans identificateur il est obligatoire de placer la sp cification du type entre parenth ses exemples sizeof float sizeof unsigned long int sizeof int 40 tableau de 40 donn es int Remarque sizeof est une fonction interne du compilateur Son r sultat connu d s le stade de la com pilation et non modifiable par l ex cution du programme est donc une constante 3 2 Conversions forc es Dans le cas d une op ration pour laquelle d une mani re ou d une autre le programmeur fixe lui m me le type du r sultat attendu le r sultat calcul est converti dans le type demand Une conversion forc e peut provoquer une perte d information Par exemple le passage d un type r el un type entier entra ne la perte de la partie fractionnaire du nombre d origine Op rations d affectation Une conversion forc e se produit dans les diff rents cas d affectation une variable de type d termin de la valeur produite par l valuation d une expression Exemples les deux exemples ci dessou
328. type structur est en programmation fonctionnelle pr sent comme un type produit cart sien A CLARINVAL Le langage C 12 23 3 Programmer le constructeur de liste LISTE N texte ex LISTE N 0 5 1 2 31 1 7 Oo LOS 2431 172 0 Dans le texte les nombres sont s par s par un ou plusieurs espaces Pour extraire du texte le nombre suivant on utilisera la fonction standard sscanf Pour ajouter ce nombre la liste en m moire employer la fonction AJOUT ER N Cette insertion d un nouveau nombre doit tre suivie d une correction des cha nages e Applications R diger en programmation fonctionnelle les fonctions suivantes affichage du contenu d une liste de nombres calcul de la somme d une liste de nombres recherche du plus petit l ment d une liste de nombres calcul de la longueur d une liste de nombres nombre d l ments jonction de deux listes la deuxi me se pla ant la suite de la premi re inversion d une liste cette fonction utilise la pr c dente Adapter le syst me de traitement d un arbre AVL de mani re telle que l algorithme ocaliser soit utilis pour trois op rations diff rentes ins rer obtenir ou supprimer un l ment Parmi ses param tres la fonction localiser doit recevoir un code d op ration consulter ins rer supprimer Un programme interactif doit d rouler de mani re r p titive le sc nario suivant
329. typedef enum FAUX VRAI Logique typedef enum NUL NBRE NOM OPER Categ Lexicale description d un symbole typedef struct char posit Categ Lexicale categ int longueur union float nbre stock en format float char nom 32 char oper texte Symbole DECLARATIONS COMMUNES 2 ROUTINES SEMANTIQUES signature d une fonction de calcul define routine fonct Logique fonct int nb params float valf nb params nombre d op randes effectifs val tableau des valeurs param tres val 0 re oit le r sultat retourne FAUX en cas d impossibilit description d une fonction de calcul typedef struct char nom 32 routine action int minp maxp faction adr du corps ex cutable de la f minp maxp nbre de param tres min max maxp 1 lt gt max illimit Fonction calc c CALCULATEUR D ESSIONS include calc h void liste fonct void affiche la liste des f disponibles char lire expr void renvoie l adr du texte ou NULL Logique anal calc void renvoie VRAI 1 ou FAUX 0 void main void lire et calculer une suite d expr liste fonct while lire expr anal calc A CLARINVAL Le langage C 12 12 calc _lex c ANALYSE LEXICALE include lt stdio h gt sscanf include lt ctype h gt traitement des caract res
330. u fichier actuellement pr sente sous l organe de lecture ou d criture la position courante Le i Me acc s commence la position suivant imm diatement la derni re position trait e lors de l acc s i 1 pour cette raison de tels supports sont qualifi s de s quentiels Les messages envoy s sur un r seau de communication les touches enfonc es un clavier d filent sem blablement De plus sur ces supports un programme peut faire soit des op rations de lecture soit des op rations d cri ture pas un m lange des deux Dans le cas d une bande magn tique un second programme peut lire un fi chier crit par un programme pr c dent Le langage C page 10 1 Classification des fichiers d apr s la nature de leur contenu Pour les fonctions d acc s de la biblioth que stdio h le contenu d un fichier peut tre interpr t de deux mani res e soit tout simplement comme une suite d octets au contenu quelconque un tel fichier est qualifi de binaire e soit comme un texte d coup en lignes dans les transferts entre les fonctions d acc s et le programme appelant chaque occurrence du caract re n new line repr sente la fin d une ligne 63 2 Connexion et d connexion d un fichier 2 1 Ouverture d un fichier fopen Aucune action ne peut tre entreprise sur un fichier avant que celui ci ait t connect au programme par la fonction fopen qui ouvre entre eux un flot de donn es L eff
331. uctures d clar de type bon de commande en t te 15 lignes max struct bon commande struct entete commande entete struct ligne commande corps 15 d clar de variables struct bon commande commande en cours commande archivee D claration des membres La d claration des membres d un type structur poss de la forme des d clarations de variables Cependant compte tenu que cette d claration prend place dans le cadre d une d finition de type c est dire la descrip tion d un mod le et non pas d une d finition de variable effective c est dire la r servation d un espace en m moire centrale la d claration des membres ne comporte ni l indication d une classe de m moire ni une clause d initialisation Outre les mentions obligatoires de toute d claration de variable type et identificateur on peut expliciter pour chaque membre les droits d acc s const et volatile 45 Le type d un membre ne peut pas tre un type d fini ult rieurement cf supra A CLARINVAL Le langage C 8 7 On pourrait donc faire par exemple les d clarations suivantes struct entete commande const char code type ligne PA NC ET unsigned int no commande no client struct date date commande struct ligne commande const char code type ligne JE LR 7 unsigned int no commande no produit qte commande Dans ce cas il sera impossible pour les programmes de modifier le contenu d
332. ui ne sont pas toujours interchangeables A CLARINVAL Le langage C 5 19 Composition s quentielle Chaque fonction peut tre appel e par une instruction expression dont le r sultat est m moris dans une varia ble de liaison la s quence des instructions doit refl ter l ordre chronologique var toupper c signal putchar var Cette m thode de composition pr sente l inconv nient de n cessiter des variables interm diaires var En outre une composition d instructions ne peut pas figurer l int rieur d une expression Le second inconv nient peut tre supprim en adoptant la forme d une expression s quentielle signal var toupper c putchar var Composition par embo tement On peut r diger une expression form e d appels de fonctions embo t s signal putchar toupper c Cette m thode fait l conomie des variables interm diaires Lorsqu elle est possible on la pr f rera donc la composition s quentielle On remarquera que l ordre de r daction des appels de fonctions embo t s dans une expression est l inverse de l ordre chronologique de leur ex cution Composition cach e encapsulation Avec les deux m thodes ci dessus le programme doit conna tre le d tail du fonctionnement de l op ration afficher un caract re en majuscule qu il demande c est dire la liste des fonctions composantes foupper et putchar et le flux de donn es interne l op ration afficher
333. un bloc de m moire de t octets contigus rend l adresse du bloc allou ou NULL en cas d chec void calloc size t n size t t alloue un bloc suffisant pour stocker n objets de taille t et initialise tous les octets 0 rend l adresse du bloc allou ou NULL en cas d chec void realloc void b size_t t best l adresse d un bloc pr alablement allou la taille de ce bloc est ajust e pour tre gale t le contenu des positions conserv es n est pas modifi rend l adresse du bloc allou ou NULL en cas d chec void free void b b est l adresse d un bloc pr alablement allou par une des fonctions pr c dentes cet espace est lib r le programme n y a plus acc s Letype size t size type est un type entier non sign d fini dans le fichier d en t te L espace allou reste accessible pourvu que le pointeur renvoy soit conserv par le programme Exemple La fonction ci dessous permute en m moire deux objets d un m me type quelconque donc de taille quelconque cette taille est videmment donn e en param tre L algorithme utilisable est temp lt a a lt b b lt temp o temp est un espace de manoeuvre de taille variable obtenu par allocation dy namique Dans la premi re version le pointeur temp est une variable automatique non conserv e entre les ap pels successifs de la fonction A chaque appel il est donc n cessaire d allouer un nouveau bloc de m moire
334. une cha ne de caract res litt rale par exemple Bonjour n est un tableau de caracte res constant Elle poss de toutes les propri t s d un tableau ordinaire deux exceptions pr s 1 il est im possible d en modifier le contenu 2 elle ne poss de pas de nom identificateur Lorsque le compilateur rencontre dans le texte du programme une cha ne de caract res litt rale il stocke le texte prolong d un terminateur 0 dans un tableau sans nom et manipule en r alit l adresse de ce tableau Les seuls emplois possibles d une cha ne de caract res litt rale sont e l affectation de son adresse un param tre de fonction emploi fr quent ex l appel printf Bonjour n passe en param tre l adresse du texte Bonjour n le param tre formel correspondant dans la fonction printf est un pointeur e l affectation de son adresse un pointeur nommable peu utile ex char p msg p msg Bonjour n e l initialisation d un pointeur lors de sa d claration mani re d tourn e de rendre la constante nommable ex char p msg Bonjour n e l initialisation d un tableau de caract res ex char t_msg Bonjour n Ce dernier emploi est le seul qui copie le texte plut t que son adresse Le tableau t msg est ajust une taille suffisante pour contenir le texte et son terminateur 0 le texte est copi dans ce ta bleau et la cha ne de caract res litt rale n est pas cr e par ailleurs Au
335. une variable il est implicite et peut ne pas tre crit pour une fonction Si un rappel de d claration est r dig l int rieur d un bloc ou d une fonction l extension de visibi lit est limit e la port e locale si le rappel de d claration est r dig au niveau global du second module l extension de visibilit est globale pour ce second module Ces rappels de d clarations sont habituellement rassembl s dans des fichiers d en t te h inclure dans les modules utilisateurs modulel c modulel h module2 c int v global 1 extern int v global include modulel h int fonct void int fonct void REMARQUE C est le programme relieur qui substitue aux identificateurs des objets publics les adresses d implantation de ces objets en m moire Souvent le programme relieur est capable de combiner entre eux des modules r dig s dans diff rents langages C et COBOL par exemple les identificateurs publics doivent alors poss der une forme reconnaissable par ce relieur commun Les limitations suivantes sont fr quentes l identificateur ne peut pas comporter de tiret sa longueur est limit e par exemple 8 caract res il n est pas fait de distinction entre majuscules et minuscules par exemple puiss et PUISS constituent un seul identificateur e Il est possible de placer dans un module le rappel de d claration d une fonction ou d une variable globale publique ou priv e d finie dans le m me modu
336. val n est rien d autre qu une criture abr g e pour var var 0 val Comme on le voit le r sultat n est pas ind pendant de la valeur pr c dente de la variable d sign e par l ex pression de gauche pour cette raison on parle d affectation relative Cas d emploi L int r t des expressions d affectation relative r side dans le fait que l expression de gauche doit tre valu e une seule fois plut t que deux Exemples n abs i abs j 2 l affectation relative permet d appeler 2 fois au lieu de 4 la fonction abs valeur absolue pour calculer les indices prix taxe prix prix taxe longueur sizeof float son tat son tat le bit le bit var 1 lt lt p mei var amp 1 lt lt p met 1 quel que soit 0 quel que soit EF CT EUTET td iso w w permuter 2 l ments d un tableau sans employer de zone de manoeuvre ali 5 afj Bi 00000101 00000011 ali afj l 00000110 alH Saa 00000101 ali afjl 00000011 x Associativit Par suite de l associativit des op rations d affectation le dernier exemple ci dessus pourrait s crire 5 3 Incr mentation d cr mentation Op rateurs Groupes d op rateurs 15 suffixes post incr mentation x post d cr mentation x 14 pr fixes pr incr mentation x pr d cr mentation TX 22 Les op rateurs d incr ment
337. vant qui doit tre un int ex printf d 2f n largeur qte qte largeur prix prix Par d faut la pr cision est 6 Si la pr cision est 0 le point d cimal est supprim sauf si pr sentation scanf scan with format La fonction scanf lit dans le flot stdin une s rie de donn es d crites par leurs formats int scanf char format y esy param tres cha ne de caract res d crivant les formats d affichage suivie de 0 n adresses de variables qui recevront les donn es lues retour nombre de variables garnies EOF en cas d incident ou de fin de fichier La cha ne de contr le qui peut tre plac e dans un tableau de caract res contient des codes d finissant le format sous lequel doivent tre lues les valeurs entr es au clavier elle peut aussi contenir des caract res inter calaires qui seront trait s de la mani re indiqu e plus loin A CLARINVAL Le langage C 3 4 Une sp cification de format est compos e comme ceci amp saut largeur taille conversion Les seules parties obligatoires sont le pr fixe et le code de conversion saut la valeur lue par cette sp cification de format est saut e elle n est affect e aucune variable de la liste de param tres nombre maximum de caract res lus au clavier pour cette variable taille de la variable Chalf short ini par d faut un nombre cure est trait comme int 1 double par d faut un nombre r el Sl tra
338. vi duellement l unit adressable est le secteur qui contient par exemple 512 octets Chaque acc s physique au disque transf re donc un bloc ou une page d un ou plusieurs secteurs Semblablement chaque acc s phy sique une bande magn tique ou une ligne de t l communication transf re un bloc d octets Il est donc n cessaire de cr er en m moire centrale une zone tampon interm diaire buffer organe p riph rique g programme Toute demande d acc s manant du programme transf re des donn es entre la m moire tampon et le pro gramme Lorsque tout le contenu de la m moire tampon a t trait un transfert s effectue entre le tampon et l organe p riph rique Fn cas d criture on peut tout moment appeler la fonction fflush pour forcer le vidage du contenu du tampon c est dire son transfert vers l organe p riph rique int fflush FILE ptr fichier param tre pointeur du flot vis retour 0 EOF en cas d erreur Remarque importante sur les op rations de mise jour La mise jour d un fichier s effectue par des op rations d criture insertion remplacement suppression habituellement elle implique galement des op rations de lecture consultation La r gle suivante est impos e dans l utilisation des fonctions de la biblioth que C standard entre l ex cution d une fonction d criture et celle d une fonction de lecture on doit forcer l criture du
339. x cute trois boucles imbriqu es l une dans l autre 1 boucle garnissant les 7 positions du tableau 2 r p tition du tirage d un num ro si la fonction numero a renvoy un num ro d j tir 3 comparaison de ce nouveau num ro avec chacun des pr c dents pour sa voir s il a d j t tir Afin de rendre la programmation moins complexe on d cide d isoler la bou cle 3 dans une fonction de test unique e Isoler une partie du traitement dans une fonction distincte aide le programmeur dominer intellectuellement le programme A cette fin la meilleure m thode consiste d simbriquer les constructions algorithmiques it ratives while for do alternatives if switch et r cursives Dans notre programme la fonction effectuer comportera seulement deux boucles imbriqu es plut t que trois On peut aussi consid rer que la fonction unique compl te la cha ne des fonctions appliqu es l objet boule A CLARINVAL Le langage C 5 22 Exemple Rappel Lorsqu on passe un tableau en param tre une fonction celle ci re oit en r alit l adresse de ce tableau et non pas une copie du contenu du tableau En cons quence si la fonction appel e modifie le contenu du tableau cette modification alt re le contenu du param tre effectif dans la fonc tion appelante loto c XKXKXXX DEFINITION DES FONCTIONS STANDARDS Lude lt stdio h gt printf Lude lt stdlib h gt rand
340. x variables aux quelles l ex cution de la fonction acc de le plus fr quemment e La classe extern est celle des rappels de d claration d une variable globale et donc statique Organisation de la m moire allou e un programme Les classes de variables que le langage C appelle des classes de m moire refl tent la structure de l espace de m moire centrale allou un programme C en ex cution Cet espace est logiquement d coup en quatre segments sans compter les registres du processeur e segments statiques le segment des instructions et le segment des donn es e segments dynamiques la pile stack et le tas heap 34 Plus exactement une variable statique est cr e lors du chargement du programme texte binaire ex cuta ble en m moire centrale c est dire avant que commence l ex cution du programme 35 On peut consid rer que le r sultat d une expression en particulier le r sultat d un appel de fonction est de classe register A CLARINVAL Le langage C 7 6 Au chargement du programme c est dire au d marrage de l ex cution les instructions des diff rentes fonctions sont cr es dans le segment des instructions les variables statiques sont cr es dans le segment des donn es la pile est vide le tas est vide instructions donn es pile tas ue globales statiques SRE statiques fonction2 var locales statiques La pile stack est la structure dans
341. ymbole e Symbole localiser symbole Table p table char nom donne au programme l adresse du descripteur du symbole dont le nom est fourni en param tre Pointeurs de fonctions En s inspirant de la fonction trier cf page 11 13 programmer une fonction g n rique de recher che dichotomique dans un tableau de pointeurs vers des l ments de type quelconque Parmi ses pa ram tres cette fonction doit recevoir l adresse de la fonction de comparaison ad quate Quant son r sultat il est le pointeur rep rant l l ment recherch et non pas un pointeur vers ce pointeur ou le pointeur NULL en cas d chec Programmer deux versions de cette fonction l une recevant en param tre un tableau de pointeurs l autre recevant des pointeurs de pointeurs L algorithme de la recherche dichotomique est donn la fin du chapitre 5 page 5 17 A CLARINVAL Le langage C 11 23 Programmer une fonction de tri d une liste doublement cha n e Les l ments de la liste sont de type quelconque Parmi ses param tres la fonction de tri doit recevoir l adresse de la fonction de comparaison ad quate A CLARINVAL Le langage C 11 24 Chapitre 12 Structures r cursives Certains ensembles de donn es sont d finis r cursivement Les algorithmes qui manipulent de tels ensembles sont eux m mes toujours r cursifs 1 Parcours d un arbre de recherche binaire Le concept d arbre La structure d arbre s illustre facilement par un

Download Pdf Manuals

image

Related Search

Related Contents

取扱説明書 - yodobashi.com    Télécharger la fiche technique  ファイル【PDF:331KB】  Xsquare Suite 03.05.06 Release Notes    

Copyright © All rights reserved.
Failed to retrieve file