cours programmation c

Upload: mannokh

Post on 10-Apr-2018

222 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/8/2019 Cours Programmation C

    1/76

    Rpublique Tunisienne

    Ministre de lEnseignement Suprieur et de la RechercheScientifique

    Institut Suprieur dInformatique de Mahdia

    CoursProgrammation C

    Anne Universitaire 2010/2011

  • 8/8/2019 Cours Programmation C

    2/76

    Table des matires

    CHAPITRE 1 : INTRODUCTION GENERALE AU LANGAGE C............................................................... 5

    1. TERMINOLOGIE INFORMATIQUE :................................... ........................................................... ................. 52. INTRODUCTION AU LANGAGE C......................................................... ........................................................ 6

    2.1. Historique.............................. ........................................................... ............................................... 62.2. Prsentation gnrale du langage C .......................................................... ..................................... 7

    CHAPITRE 2 : STRUCTURE DUN PROGRAMME C............................................. ..................................... 9

    1. STRUCTURE DUN PROGRAMME C ..................................................... ........................................................ 92. LES COMPOSANTS ELEMENTAIRES DU C : .................................................... ............................................ 10

    2.1. Les identificateurs ......................................................... ........................................................... ..... 102.2. Les mots-clefs ...................................................... ........................................................... ............... 112.3. Les commentaries........ ............................................................ ...................................................... 112.4. Les constantes ..................................................... ........................................................... ............... 11

    2.4.1. Les constantes entires ...................... ...................... ...................... ...................... ...................... ............... 11

    2.4.2. Les constantes relles .................... ..................... ...................... ..................... ..................... ...................... 122.4.3. Les constantes caractres ...................... ...................... ...................... ...................... ...................... ............ 122.4.4. Les constantes chanes de caractres ...................... ...................... ...................... ...................... ................ 13

    3. LES TYPES DE DONNEES ........................................................... ........................................................... ..... 134. DECLARATION DE VARIABLES ........................................................... ...................................................... 13

    CHAPITRE 3 : LA SYNTAXE DU LANGAGE C (LES OPERATEURS)......................... .......................... 15

    1. L'AFFECTATION ................................................... ........................................................... ......................... 152. LES OPERATEURS ARITHMETIQUES .................................................... ...................................................... 163. LES OPERATEURS RELATIONNELS ...................................................... ...................................................... 164. LES OPERATEURS LOGIQUES BOOLEENS....................................................... ............................................ 175. LES OPERATEURS LOGIQUES BIT A BIT ......................................................... ............................................ 176. LES OPERATEURS D'AFFECTATION COMPOSEE ...................................................... ................................... 18

    7. LES OPERATEURS D'INCREMENTATION ET DE DECREMENTATION ........................................................ ..... 188. L'OPERATEUR VIRGULE.................................................. ........................................................... ............... 189. L'OPERATEUR CONDITIONNEL TERNAIRE ..................................................... ............................................ 1910. L'OPERATEUR DE CONVERSION DE TYPE .......................................................... ................................... 1911. L'OPERATEUR ADRESSE....................................................... ........................................................... ..... 1912. REGLES DE PRIORITE DES OPERATEURS................................................... ............................................ 19

    CHAPITRE 4 : LES TYPES DE DONNEES ....................................................... ............................................ 21

    1. LES TYPES PREDEFINIS................................................... ........................................................... ............... 211.1. Les types caractres ...................................................... ........................................................... ..... 211.2. Les types entiers .................................................. ........................................................... ............... 221.3. Les types flottants .......................................................... ........................................................... ..... 23

    2. DEFINITION DE NOUVEAUX TYPES ..................................................... ...................................................... 23

    CHAPITRE 5 : LES FONCTIONS DE/S STANDARDS................................... ............................................ 24

    1. INTRODUCTION .................................................... ........................................................... ......................... 242. LES FONCTIONS DENTREES ..................................................... ........................................................... ..... 24

    2.1. La fonction scanf ........................................................... ........................................................... ..... 242.2. La fonction gets ................................................... ........................................................... ............... 252.3. Les fonction getch(), getche() et getchar() .......................................................... ......................... 25

    3. LES FONCTIONS DE SORTIES..................................................... ........................................................... ..... 263.1. La function printf....................................... ........................................................... ......................... 263.2. La fonction puts.. ........................................................... ........................................................... ..... 263.3. La fonction putchar ....................................................... ........................................................... ..... 26

  • 8/8/2019 Cours Programmation C

    3/76

    CHAPITRE 6 : LES INSTRUCTIONS DE BRANCHEMENT CONDITIONNEL..................................... 27

    1. IF ELSE .................................................... ........................................................... ................................... 272. SWITCH ...................................................... ........................................................... ................................... 28

    CHAPITRE 7 : LES STRUCTURES REPETITIVES ........................................................... ......................... 30

    1. INTRODUCTION :........... ........................................................... ........................................................... ..... 30

    2. LES STRUCTURES REPETITIVES .......................................................... ...................................................... 302.1. While ......................................................... ........................................................... ......................... 302.2. do-While .................................................... ........................................................... ......................... 322.3. for .................................................... ........................................................... ................................... 33

    CHAPITRE 8 : LES TABLEAUX........................................................................ ............................................. 35

    1. LES TABLEAUX A UNE DIMENSION ..................................................... ...................................................... 351.1. Dclaration et mmorisation........... ........................................................... ................................... 351.2. Initialisation et rservation automatique ................................................... ................................... 361.3. Accs aux composantes ........................................................... ...................................................... 361.4. Affichage et affectation............................................................ ...................................................... 37

    2. LES TABLEAUX A DEUX DIMENSION ................................................... ...................................................... 372.1. Dclaration et mmorisation........... ........................................................... ................................... 37

    2.2. Initialisation et rservation automatique ................................................... ................................... 382.3. Accs aux composantes ........................................................... ...................................................... 392.4. Affichage et affectation............................................................ ...................................................... 39

    CHAPITRE 9 : LES CHAINES DE CARACTERES...................... ........................................................... ..... 40

    1. DECLARATION :................................................... ........................................................... ......................... 402. MEMORISATION :............................. ........................................................... ............................................. 403. ACCES AUX ELEMENTS : .......................................................... ........................................................... ..... 414. UTILISATION DES CHAINES DE CARACTERES :................ ........................................................... ............... 415. TABLEAUX DE CHAINE DE CARACTERES : .................................................... ............................................ 43

    CHAPITRE 10 : LES TYPES DE VARIABLES COMPLEXES.................................................... ............... 44

    1. NOTION DE STRUCTURE ........................................................... ........................................................... ..... 44

    1.1. Dclaration de structure : ....................................................... ...................................................... 441.2. Accs aux membres dune structure :...................................... ...................................................... 461.3. Initialisation dune structure : .......................................................... ............................................ 461.4. Affectation de structures : ....................................................... ...................................................... 461.5. Comparaison de structures : ................................................... ...................................................... 471.6. Tableau de structures :.............................. ........................................................... ......................... 471.7. Composition de structures : .................................................... ...................................................... 47

    2. LES CHAMPS DE BITS ..................................................... ........................................................... ............... 473. LES ENUMERATIONS : .................................................... ........................................................... ............... 484. LES UNIONS : ....................................................... ........................................................... ......................... 48

    4.1. Utilisation des unions............ ........................................................... ............................................. 495. LA DECLARATION DE TYPES SYNONYMES : TYPEDEF ...................................................... ......................... 50

    CHAPITRE 11 : LES POINTEURS......................................................................................... ......................... 51

    1. INTRODUCTION .................................................... ........................................................... ......................... 512. ADRESSE ET VALEUR DUN OBJET :...................... ........................................................... ......................... 513. NOTION DE POINTEUR :. ........................................................... ........................................................... ..... 524. ARITHMETIQUE DES POINTEURS : ...................................................... ...................................................... 535. ALLOCATION DYNAMIQUE....................................................... ........................................................... ..... 546. POINTEURS ET TABLEAUX :............................................ ........................................................... ............... 56

    6.1. Pointeur et tableau une dimension :..................................... ...................................................... 566.2. Pointeurs et tableaux plusieurs dimensions ...................................................... ......................... 57

    7. TABLEAU DE POINTEURS : ....................................................... ........................................................... ..... 578. POINTEUR ET CHAINE DE CARACTERE:....... ........................................................... ................................... 589. POINTEUR ET STRUCTURES : .................................................... ........................................................... ..... 58

    9.1. Structures dont un des membres pointe vers une structure du mme type .................................... 599.2. Allocation et libration d'espace pour les structures ..................................................... ............... 59

    10. ALLOCATION D'UN TABLEAU D'ELEMENTS : FONCTION CALLOC ...................................................... ..... 59

  • 8/8/2019 Cours Programmation C

    4/76

    11. LIBERATION D'ESPACE : PROCEDURE FREE ....................................................... ................................... 60

    CHAPITRE 12 : LES FICHIERS............................................................................................. ......................... 61

    1. INTRODUCTION .................................................... ........................................................... ......................... 612. DEFINITION ET PROPRIETES : ................................................... ........................................................... ..... 61

    2.1. Types d'accs : .................................................... ........................................................... ............... 622.2. Codage ...................................................... ........................................................... ......................... 62

    2.3. Fichiers standard .......................................................... ........................................................... ..... 623. LA MEMOIRE TAMPON ................................................... ........................................................... ............... 624. MANIPULATION DES FICHIERS : ......................................................... ...................................................... 62

    4.1. Dclaration : ....................................................... ........................................................... ............... 624.2. Ouverture : fopen .......................................................... ........................................................... ..... 62

    4.2.1. Valeur rendue ..................... ..................... ...................... ..................... ...................... .................... ............ 634.2.2. Conditions particulires et cas d'erreur ................... ...................... ...................... ...................... ................ 63

    4.3. Fermeture : fclose ......................................................... ........................................................... ..... 644.4. Destruction : remove............. ........................................................... ............................................. 644.5. Renommer: rename ....................................................... ........................................................... ..... 644.6. Changer le mode daccs : chmod .................................................... ............................................ 644.7. Positionnement du pointeur au dbut du fichier : rewind ........................................................ ..... 654.8. Positionnement du pointeur dans un fichier : fseek ....................................................... ............... 65

    4.9. Dtection de la fin dun fichier squentiel : feof .................................................. ......................... 655. LECTURE ET ECRITURE DANS LES FICHIERS SEQUENTIELS......................................................... ............... 65

    5.1. Traitement par caractres ....................................................... ...................................................... 655.2. Traitement par chane de caractres : ....................................................... ................................... 665.3. E/S formates sur les fichiers :........ ........................................................... ................................... 67

    CHAPITRE 13 : LES FONCTIONS........................................................... ...................................................... 69

    1. INTRODUCTION .................................................... ........................................................... ......................... 692. MODULARISATION DE PROGRAMMES........................................................... ............................................ 69

    2.1. Avantages de la modularisation :........................ ........................................................... ............... 703. DEFINITION DE FONCTIONS ...................................................... ........................................................... ..... 704. DECLARATION DE FONCTIONS ........................................................... ...................................................... 725. NOTION DE BLOC ET PORTEE DES IDENTIFICATEURS ....................................................... ......................... 73

    5.1. Variables locales :..................................... ........................................................... ......................... 735.2. Variables globales : ...................................................... ........................................................... ..... 73

    6. RENVOI DUN RESULTAT : ....................................................... ........................................................... ..... 737. PARAMETRES DUNE FONCTION ......................................................... ...................................................... 748. PASSAGE DES PARAMETRES PAR VALEUR .................................................... ............................................ 749. PASSAGE DE L'ADRESSE D'UNE VARIABLE (PAR VALEUR)................................................ ......................... 75

    9.1. Passage de l'adresse d'un tableau une dimension....................................................... ............... 759.2. Passage de l'adresse d'un tableau deux dimensions.................................................... ............... 76

  • 8/8/2019 Cours Programmation C

    5/76

    Cours programmation : langage C Chapitre1 : introduction gnrale au langage C

    Chapitre 1 : Introduction Gnrale au langage C

    Objectifs

    Connatre quelques termes informatiques utiles Avoir une ide sur les langages de programmation Initiation au langage C

    Elments de contenu

    Terminologie informatique Dmarche suivre pour rsoudre un problme

    Les langages de programmation Prsentation gnrale du langage C

    1. Terminologie informatique :

    Information : toutensemble de donnes qui a un sens (textes, nombres, sons, images,

    vido, instructions composant un programme). Toute information est manipule sous

    forme binaire (ou numrique) par lordinateur.

    Informatique : Science du traitement automatique de linformation.

    Ordinateur : machine de traitement de linformation (acqurir, conserver, restituer eteffectuer des traitements sur les informations).

    Programme : suite dinstructions lmentaires, qui vont tre excutes dans lordre parle processeur. Ces instructions correspondent des actions trs simples, comme

    additionner deux nombres, lire ou crire une case mmoire, etc.

    Systme informatique : ensemble de moyen matriel et logiciels (programmes) pour

    satisfaire les besoins informatiques des utilisateurs.

    Systme dexploitation : ensemble de programmes pour servir dinterface entrelutilisateur et la machine. Soccupe de grer les diffrentes ressources de la machine et

    de ses priphriques.

    Dmarche suivre pour rsoudre un problme :-comprhension du problme-spcification : quoi faire ?-conception : comment faire ? (algorithmes)-codage (langage de programmation).- test et validation.-maintenance.

    5

  • 8/8/2019 Cours Programmation C

    6/76

    Cours programmation : langage C Chapitre1 : introduction gnrale au langage C

    : consiste crire une suite dinstruction dans un langage

    Algorithme : successions daction destine rsoudre un problme en un nombre fini

    Langage de programmation : langage structur sans ambigut utilis pour dcrire des

    Les principaux langages :

    es principaux langages compils sont :

    et scientifique ;

    ientifique ;

    Quelques langages interprts :

    rtificielle ;

    de fichier textes ;

    nternet ;

    ique ;

    Compilation, dition de liens et chargement : Un programme crit en langage volu

    2. Introduction au langage C

    2.1.Historique

    en 1972 par Dennis Richie et Ken Thompson chercheurs aux Bell Labs

    afi

    Programmation

    comprhensible par un ordinateur.

    dinstructions.

    actions (ou algorithmes) excutables par un ordinateur. Historiquement, le premier

    langage informatique a t lassembleur. Or, la programmation en assembleur est

    souvent fastidieuse et dpend troitement du type de machine pour lequel il a t crit.

    Si lon dsire ladapter une autre machine (porter le programme), il faut le rcrire

    entirement. Cest pour rpondre ces problmes quont t dvelopps ds les annes

    50 des langages de plus haut niveau. Dans ces langages, le programmeur crit selon des

    rgles strictes, mais dispose dinstructions et de structures de donnes plus expressives

    quen assembleur. Par exemple, dans certains langages comme MATLAB, on pourra

    crire en une ligne que lon dsire multiplier deux matrices, alors que le programme

    correspondant en assembleur prendrait quelques centaines de lignes.

    L

    - C/C++ : programmation systme- ADA : logiciels embarqus ;- Cobol : gestion ;- Fortran : calcul sc- Pascal : enseignement.

    - BASIC : bricolage ;- LISP : Intelligence A- Prolog : idem ;- Perl : traitement- Python : programmation systme, I- Java applets : Internet ;- MATLAB : calcul scientif- Mathematica : idem.

    (sous forme de code source) doit subir ces trois tapes pour tre excut par unordinateur. Le compilateur est un programme qui transforme un module en code source

    en un module en code objet (code machine). Lditeur de lien (programme) essaye de

    mettre ensemble les diffrents modules dun programme. Le chargeur soccupe

    damener en mmoire centrale un programme complet et prt tre excut.

    Le C a t conu

    n de dvelopper un systme dexploitation UNIX sur un DEC PDP-11. En 1978 BrianKernighan et Dennis Richie publient la dfinition classique du C dans le livre The C

    6

  • 8/8/2019 Cours Programmation C

    7/76

    Cours programmation : langage C Chapitre1 : introduction gnrale au langage C

    Programming language . Le C devenant de plus en plus populaire dans les annes 80,

    plusieurs groupes mirent sur le march des compilateurs comportant des extensions

    particulires. En l983, lANSI (American National Standards Institute) dcida de normaliser

    le langage ; ce travail sacheva en 1989 par la dfinition de la norme ANSI-C. Celle ci fut

    reprise telle quelle par lISO (International Standards Organization).

    2.2.Prsentation gnrale du langage C

    u plus labor, on trouve en C :

    - tion. Comme dans les langages

    - , fonction procdures et sous

    - des

    - r, un diteur de lien, une bibliothque et les utilitaires permettant de la

    La compilation

    mpil (par opposition aux langages interprts). Cela signifie qu'un

    pro

    Contenu du langage

    En allant du plus simple a

    des instructions de dfinition, de traitement, de structura

    classiques, on utilise laffectation, le test, la boucle

    des fonctions. Elles rassemblent aux sous-programmes

    routines bien connues, mais elles portent les caractristiques spcifiques du C.

    un pr processeur qui permet dapporter des perfectionnements la prsentation

    programmes.Un compilateu

    grer. La bibliothque est une riche collection de fonctions caractre utilitaire.

    Beaucoup de ces fonctions sont utilisable comme des macro-instructions

    Le C est un langage co

    gramme C est dcrit par un fichier texte, appel fichier source. Ce fichier ntant

    videmment pas excutable par le microprocesseur, il faut le traduire en langage machine.

    Cette opration est effectue par un programme appel compilateur. La compilation se

    dcompose en fait en 4 phases successives :

    - Le traitement par le pr processeur : le fichier source est analys par le pr processeur

    La compilation

    qui effectue des transformations purement textuelles (remplacement de chanes de

    caractres, inclusion d'autres fichiers source . . .).

    - : la compilation proprement dite traduit le fichier gnr par le pr

    L'assemblage

    processeur en assembleur, c'est--dire en une suite d'instructions du microprocesseur qui

    utilisent des mnmoniques rendant la lecture possible.

    - : cette opration transforme le code assembleur en un fichier binaire, c'est-

    Ldition de liens

    -dire en instructions directement comprhensibles par le processeur. Gnralement, lacompilation et l'assemblage se font dans la foule, sauf si l'on spcifie explicitement que

    l'on veut le code assembleur. Le fichier produit par l'assemblage est appel fichier objet.

    - : un programme est souvent spar en plusieurs fichiers source, pourdes raisons de clart mais aussi parce qu'il fait gnralement appel des librairies de

    fonctions standard dj crites. Une fois chaque code source assembl, il faut donc lier

    entre eux les diffrents fichiers objets. Ldition de liens produit alors un fichier dit

    excutable.

    7

  • 8/8/2019 Cours Programmation C

    8/76

    Cours programmation : langage C Chapitre1 : introduction gnrale au langage C

    Fichier source

    nom_fich.c

    Figure 1.1 : tapes de cration dun excutable partir dun code crit en C

    caractristique du langage C:

    Le langage C est un langage volu et structur, assez proche du langage machine destin

    des applications de contrle de processus (gestion d'entres/sorties, applications temps rel

    ...). Les compilateurs C possdent les taux d'expansion les plus faibles de tous les langages

    volus (rapport entre la quantit de codes machine gnre par le compilateur et la quantit

    de codes machine gnre par l'assembleur et ce pour une mme application);

    Le langage C possde assez peu d'instructions, il fait par contre appel des bibliothques,

    fournies en plus ou moins grand nombre avec le compilateur.

    Exemples: math.h : bibliothque de fonctions mathmatiquesstdio.h : bibliothque d'entres/sorties standard

    On ne saurait dvelopper un programme en C sans se munir de la documentation

    concernant ces bibliothques.

    Pr processeur

    Fichier gnr par le pr processeurnom_fich.i

    Compilation

    Fichier crit en assembleur

    nom_fich.s

    Assemblage

    Fichier objet

    fichier1.o

    Fichier objet Fichier objet

    fichier2.onom_fich.o

    Fichier excutable

    Edition de liens

    8

  • 8/8/2019 Cours Programmation C

    9/76

    Cours programmation : langage C Chapitre 2 : Structure dun programme C

    Chapitre 2 : Structure dun programme C

    Objectifs

    Connatre la structure dun programme C Connatre les composantes lmentaires du C

    Elments de contenu

    Composants dun programme C Les composantes lmentaires du C Les Types de donnes La dclaration de variables

    1. Structure dun programme C

    Un programme en C comporte :

    Un entte (header) constitu de mta instructions ou directives destines au prprocesseur.

    Un bloc principal appel main (). Il contient des instructions lmentaires ainsi que lesappels aux modules (fonctions) considrs par le compilateur comme des entits

    autonomes. Chaque appel une fonction peut tre considr comme une instruction. Le corps des fonctions places avant ou aprs le main () dans un ordre quelconque, les

    une aprs les autres. Partout, les variables et les fonctions font lobjet dune dclaration

    prcisant leur type. Le schma gnral est donc :

    Prototype des

    fonctions

    Dfinition des

    fonctions

    Bloc principal

    Entete#include

    #define

    fonction1

    fonction2

    .

    main()

    {

    dfinitions,

    instructions,

    et appel de

    fonctions.

    }

    fonction1 {}

    fonction2 {}

    ..

    Bloc principal

    Dfinition

    des fonctions

    Entete#include

    #define

    fonction1 {}

    fonction2 {}..

    main()

    {

    dfinitions,

    instructions,

    et appel de

    fonctions.

    }

    Figure 2.1 : structure dun programme C

    9

  • 8/8/2019 Cours Programmation C

    10/76

    Cours programmation : langage C Chapitre 2 : Structure dun programme C

    Exemple : calcul de la surface dun cercle.

    Tableau 1 : calcul de la surface dun cercle

    #include #define PI 3.14

    float f_surface(float rayon)

    {float s;s=rayon*rayon*PI;

    return(s);}

    void main()

    {

    float surface;surface=f_surface(2.0);

    printf("%f\n",surface);}

    #include #define PI 3.14

    float f_surface(float);void main(){

    float surface;surface=f_surface(2.0);

    printf("%f\n",surface);}

    float f_surface(float rayon)

    {float s;s=rayon*rayon*PI;

    return(s);}

    2. Les composants lmentaires du C :

    Un programme en langage C est constitu des six groupes de composants lmentaires

    suivants :

    les identificateurs les mots-clefs les constantes les chanes de caractres, les oprateurs les signes de ponctuation.

    On peut ajouter ces six groupes les commentaires, qui ne sont pas considrs par le pr

    processeur.

    2.1.Les identificateurs

    Le rle d'un identificateur est de donner un nom une entit du programme. Plusprcisment, un identificateur peut designer :

    - un nom de variable ou de fonction,- un type dfini par typedef, struct, union ou enum,- une tiquette.

    Un identificateur est une suite de caractres parmi les lettres (minuscules ou majuscules,mais non accentues), les chiffres, le tirait bas.

    Le premier caractre d'un identificateur ne peut pas tre un chiffre. Les majuscules et minuscules sont diffrencies.

    Le compilateur peut tronquer les identificateurs au-del d'une certaine longueur. Cettelimite dpend des implmentations, mais elle est toujours suprieure 31 caractres. (Le

    10

  • 8/8/2019 Cours Programmation C

    11/76

    Cours programmation : langage C Chapitre 2 : Structure dun programme C

    standard dit que les identificateurs externes, c'est--dire ceux qui sont exports

    l'dition de lien, peuvent tre tronqus 6 caractres, mais tous les compilateurs

    modernes distinguent au moins 31 caractres).

    2.2.Les mots-clefs

    Un certain nombre de mots, appels mots-clefs, sont rservs pour le langage lui-mme et

    ne peuvent pas tre utiliss comme identificateurs. L'ANSI-C compte 32 mots clefs :

    auto const double float int short struct unsigned

    break continue else for long signed switch voidcase default enum goto register sizeof typedef volatile

    char do extern if return static union while

    Ces mots peuvent tre rang en catgories :

    Tableau 2.2 : mots-clefs du langage C

    les spcificateurs de stockage auto register static extern typedef

    les spcificateurs de type char double enum float int long short signed

    struct union unsigned voidles qualificateurs de type const volatile

    les instructions de contrle break case continue default do else for goto if

    switch while

    divers return sizeof

    2.3.Les commentaries

    Un commentaire dbute par /* et se termine par */. Par exemple,

    /* Ceci est un commentaire */

    On ne peut pas imbriquer des commentaires.

    2.4.Les constantes

    Une constante est une valeur qui apparat littralement dans le code source d'un

    programme, le type de la constante tant dtermin par la faon dont la constante est crite.

    Les constantes vont tre utilises, par exemple, pour linitialisation de variables.

    2.4.1. Les constantes entires

    Une constante entire peut tre reprsente de 3 manires diffrentes suivant la base dans

    laquelle elle est crite :

    dcimale : par exemple, 0 et 2437 sont des constantes entires dcimales. octale : la reprsentation octale d'un entier correspond sa dcomposition en base 8. Les

    constantes octales doivent commencer par un zro. Par exemple, les reprsentations

    octales des entiers 0 et 255 sont respectivement 00 et 0377.

    hexadcimale : la reprsentation hexadcimale d'un entier correspond sadcomposition en base 16. Les lettres de a/A f/F sont utilises pour reprsenter les

    nombres de 10 15. Les constantes hexadcimales doivent commencer par 0x ou 0X.

    Par exemple, les reprsentations hexadcimales de 14 et 255 sont respectivement 0xe et

    0xff.

    11

  • 8/8/2019 Cours Programmation C

    12/76

    Cours programmation : langage C Chapitre 2 : Structure dun programme C

    Remarque :

    On peut spcifier explicitement le format d'une constante entire en la suffixant par u ou U

    pour indiquer qu'elle est non signe, ou en la suffixant par l ou L pour indiquer qu'elle est de

    type long. Par exemple :

    Tableau 2.3 : exemples de constantes entires

    Exemples :

    constante type1234 Int

    02154 Int

    0x4d2 Int

    123456789L Long

    1234U Unsigned int

    124687564UL Unsigned long int

    int Nb_lignes ; /* dclaration dune variable de type entier */Nb_lignes = 15 ; /* initialisation de cette variable 15 */

    #define TEL 75410452const annee = 2002 ; /* affecte une valeur une variable, cette valeur ne pourraplus tre chang par la suite */

    2.4.2. Les constantes relles

    Ils sont de lune des deux formes suivantes :

    En notation dcimale : [+-]m.n ou m et n sont des entiers. Exemple : 2.5 -123.47 . En notation scientifique (mantisse et exposant) : [+-]m.n [e/E][+-]p ou m,n et p sont des

    entiers. Exemple : -14.5 e-2 (-14.5 10-2

    )

    Par dfaut, une constante relle est reprsente avec le format du type double. On peut

    cependant influer sur la reprsentation interne de la constante en lui ajoutant un des suffixesf/F ou l/L. Les suffixes f et F forcent la reprsentation de la constante sous forme d'un float,

    Les suffixes l et L forcent la reprsentation sous forme d'un long double.

    Tableau 2.4 : Exemples de constantes relles

    constante type

    12.34 Double

    12.3 e-4 Double

    12.34L Long double

    12.34F Float

    2.4.3. Les constantes caractres

    Elles sont de lune de lune des formes suivantes :

    x dsigne le caractre imprimable x sauf lapostrohe et lantislash et les guillemets \nnn dsigne le nombre de code octal nnn (nnn est un nombre octal) \\ dsigne le caractre \ (ou encore \134 en ASCII) \ dsigne le caractre (ou encore \47 en ASCII) \ " dsigne le caractere " \b dsigne le caractre retour arrire \f dsigne le caractre saut de page \n dsigne le caractre nouvelle ligne

    \r dsigne le caractre retour chariot \t dsigne le caractre tabulation horizontale

    12

  • 8/8/2019 Cours Programmation C

    13/76

    Cours programmation : langage C Chapitre 2 : Structure dun programme C

    \v dsigne le caractre de tabulation verticale

    2.4.4. Les constantes chanes de caractres

    Une constante chane de caractres est une suite de caractres entours par desguillemets. Par exemple,''Ceci est une chane de caractres''.

    Elle peut contenir des caractres non imprimables, dsigns par les reprsentations vuesprcdemment. Par exemple, ''ligne 1 \n ligne 2''

    A l'int'erieur d'une chane de caractres, le caractre '' doit tre dsign par \''. Enfin, lecaractre \ suivi d'un passage la ligne est ignor. Cela permet de faire tenir de longues

    chanes de caractres sur plusieurs lignes. Par exemple :

    ''ceci est une longue longue longue longue longue longue longue longue \

    chane de caractres''

    Remarques :

    pour connatre la fin de la chane, le compilateur fait suivre le dernier caractre par lecaractre nul \0.

    Il faut savoir distinguer le constant caractre de la constante chane de caractre. Ainsix et "x" ne sont pas quivalents. Le premier reprsente la valeur numrique du

    caractre x, le second est une chane ne comprenant quun caractre (la lettre x) en plus

    \0 final.

    3. Les types de donnes

    En C, il nexiste que quelques types fondamentaux de donnes :

    Le type char : un seul byte reprsentant un caractre. Le type int : un nombre entier dont la taille corresponds celles des entiers du SE. Le type float : un nombre en virgule flottante en simple prcision. Le type double : un nombre en virgule flottante en double prcision.

    Des qualificatifs peuvent prciser le type int : short, long, unsigned, signed. Lesqualificatifs signed et unsigned peuvent prciser le type char. Le qualificatif long peut

    prciser le type double. Quand une declaration ne prcise pas le type de base, int est suppos.

    Exemples :short int x ;unsigned long y ; /* int implicite */

    Long double z ;unsigned char ch ;

    4. Dclaration de variables

    Les variables doivent toutes tre dclares avant dtre utilises bien que certaines soient

    fates implicitement par le contexte. A une variable correspond un espace en mmoire et un

    mcanisme permettant dadresser cet emplacement. En C une variable est caractris par :

    Son nom (un identificateur) Son type (type de base ou type dfinie par lutilisateur) Sa classe dallocation (extern, static, auto, register)

    13

  • 8/8/2019 Cours Programmation C

    14/76

    Cours programmation : langage C Chapitre 2 : Structure dun programme C

    Une dclaration de variables a la forme :

    classe dallocation type liste didentificateurs

    Exemples :extern int var_globale1, var_globale2;static float var_statique ;auto int i,j,k ;register char caractere1, caractere2 ;

    La classe dallocation par dfaut est auto.

    La classe dallocation dun objet spcifie le type despace mmoire o lemplacement

    correspondant cet objet sera allou, sa dure de vie et sa visibilit. Il existe 4 classes

    dallocation en C :

    Les variables "externes" (extern) : lespace correspondant est allou en zone de donnesstatique ds la compilation. Ce type de spcification permet de partager des variables

    entre des fichiers sources diffrents.

    Les variables "statiques" (static) : lespace est allou en zone de donne statique ds lacompilation. Ce type dallocation permet de dfinir des variables globales un fichier

    (en dehors de toutes fonction mais accessible uniquement dans les fonctions dfinies

    dans le fichier source ou elles sont dclares) et des variables locale des fonctions (ou

    des blocs) telles qu toute excution du bloc ladresse de la variable reste la mme.

    La spcification static peut tre appliqu une fonction, dans ce cas la fonction nest

    appelable que par des fonctions dfinies dans le mme fichier source.

    Les variables "automatiques" (auto) ; lespace est allou dynamiquement (zone

    dynamique dans la pile) chaque appel de fonction ou entre dans le bloc correspondant

    Les variables "registres" (register) : lespace associ est, dans la mesure du possible, unregistre du processeur. Ce type dallocation nest possible que pour des types simples

    (caractre, entier..).

    Une dclaration indique le nom, le type (parfois la valeur) et regroupe derrire une ou

    plusieurs variables de mme type.

    On peut initialiser les variables lors de la dclaration :

    Exemples : char backslash=\\ ;int i=0 ;float eps=1.0e-5 ;

    Si la variable est externe ou statique, linitialisation est faite une fois pour toutes avant que

    le programme ne commence lexcution.

    Les variables "automatiques" dont linitialisation est explicite seront initialises chaque

    fois quon appellera la fonction dont elle font partie. Les variables automatiques qui ne sont

    pas initialises explicitement ont des valeurs indfinies. Les variables externes et statiques

    sont mises zro par dfaut.

    14

  • 8/8/2019 Cours Programmation C

    15/76

    Cours programmation : langage C Chapitre 3 : la syntaxe du langage C

    Chapitre 3 : La syntaxe du langage C (les oprateurs)

    Objectifs

    Connatre les diffrents oprateurs du C

    Elments de contenu

    Laffectation Les oprateurs arithmtiques Les oprateurs relationnels Les oprateurs logiques boolens Les oprateurs logiques bit bit Les oprateurs daffectation composs Les oprateurs dincrmentation et de dcrmentation

    Loprateur virgule Loprateur conditionnel ternaire Loprateur de conversion de types Loprateur adresse Rgles de priorit des oprateurs

    1. L'affectation

    En C, l'affectation est un oprateur part entire. Elle est symbolise par le signe =. Sa

    syntaxe est la suivante :

    Le terme de gauche de l'affectation peut tre une variable simple, un lment de tableau,

    une structureetc. Cette expression a pour effet d'valuer expression et d'affecter la

    valeur obtenue variable . De plus, cette expression possde une valeur, qui est celle de

    expression . Ainsi, l'expression i = 5 vaut 5.

    L'affectation effectue une conversion de type implicite : la valeur de l'expression (terme de

    droite) est convertie dans le type du terme de gauche. Par exemple, le programme suivant :

    main(){int i, j = 2;float x = 2.5;i = j + x;x = x + i;printf('' %f '',x);}

    variable = expression ;

    imprime pour x la valeur 6.5 (et non 7), car dans l'instruction i = j + x;, l'expression j +x a t

    convertie en entier.

    15

  • 8/8/2019 Cours Programmation C

    16/76

    Cours programmation : langage C Chapitre 3 : la syntaxe du langage C

    2. Les oprateurs arithmtiques

    Les oprateurs arithmtiques classiques sont loprateur unaire - (changement de signe)

    ainsi que les oprateurs binaires

    + addition

    - soustraction* multiplication

    / division

    % reste de la division (modulo) (pour les entiers)

    Ces oprateurs agissent de la faon attendue sur les entiers comme sur les flottants. Leurs

    seules spcificits sont les suivantes :

    Contrairement d'autres langages, le C ne dispose que de la notation / pour dsigner lafois la division entire et la division entre flottants. Si les deux oprandes sont de type

    entier, l'oprateur / produira une division entire (quotient de la division). Par contre, il

    dlivrera une valeur flottante ds que lun des oprandes est un flottant. Par exemple :

    float x;x = 3 / 2;affecte x la valeur 1. Par contrex = 3 / 2.0;/* affecte a x la valeur 1.5. */

    L'oprateur % ne s'applique qu des oprandes de type entier. Si l'un des deuxoprandes est ngatif, le signe du reste dpend de l'implmentation, mais il est en

    gnral le mme que celui du dividende.

    Notons enfin quil n'y a pas en C doprateur effectuant llvation la puissance. Defaon gnrale, il faut utiliser la fonction pow(x,y) de la librairie math.h pour calculer xy

    3. Les oprateurs relationnels

    > Strictement suprieur

    >= suprieur ou gal

    < Strictement infrieur

  • 8/8/2019 Cours Programmation C

    17/76

    Cours programmation : langage C Chapitre 3 : la syntaxe du langage C

    printf("a et b sont gaux'');else

    printf(''a et b sont differents'');}

    imprime lcran : a et b sont gaux

    4. Les oprateurs logiques boolens

    && et logique

    || ou logique

    ! ngation logique

    Comme pour les oprateurs de comparaison, la valeur retourne par ces oprateurs est un

    int qui vaut 0 si la condition est faux.

    Dans une expression de type : expression1 op1 expression2 op2 ...expressionN ,

    lvaluation se fait de gauche droite et s'arrte ds que le rsultat final est dtermin. Par

    exemple dans

    int i,j;if ((i >= 0) && (i dcalage droite

    En pratique, les oprateurs &, | et ~ consistent appliquer bit bit les oprations suivantes

    L'oprateur unaire ~ change la valeur de chaque bit d'un entier. Le dcalage droite et

    gauche effectue respectivement une multiplication et une division par une puissance de 2.

    Notons que ces dcalages ne sont pas des dcalages circulaires (ce qui dpasse disparat).

    Considrons par exemple les entiers a=77 et b=23 de type unsigned char (i.e. 8 bits). En base

    2 il scrivent respectivement 01001101 et 00010111.

    Tableau 3.1 : les oprateurs logiques bit bits

    & 0 1

    0 0 01 0 1

    | 0 1

    0 0 11 1 1

    ^ 0 1

    0 0 11 1 0

    a.b + a.ba+b (a ou b)a.b

    17

  • 8/8/2019 Cours Programmation C

    18/76

    Cours programmation : langage C Chapitre 3 : la syntaxe du langage C

    valeur binaire dcimale remarques

    A 01001101 77

    B 00010111 23

    a&b 00000101 5

    a|b 01011111 95

    a^b 01011010 90

    ~ a 10110010 178

    b 1 00001011 11 Division entire par 2

    6. Les oprateurs d'affectation compose

    Les oprateurs d'affectation compose sont

    += -= *= /= %= &= ^= |= =Pour tout oprateur op, l'expression :

    expression1 op= expression2 expression1 = expression1 op expression2

    Toutefois, avec l'affection compose, expression1 n'est value qu'une seule fois.

    7. Les oprateurs d'incrmentation et de dcrmentation

    Les oprateurs d'incrmentation ++ et de dcrmentation -- s'utilisent aussi bien en suffixe

    (i++) qu'en prfixe (++i). Dans les deux cas la variable i sera incrmente, toutefois dans la

    notation suffixe la valeur retourne sera l'ancienne valeur de i alors que dans la notationprfixe se sera la nouvelle. Par exemple :

    int a = 3, b, c;b = ++a; /* a et b valent 4 */c = b++; /* c vaut 4 et b vaut 5 */

    8. L'oprateur virgule

    Une expression peut tre constitue d'une suite d'expressions spares par des virgules :

    expression1, expression2, ... , expressionN

    Cette expression est alors value de gauche droite. Sa valeur sera la valeur de

    l'expression de droite. Par exemple, le programme

    main(){

    int a, b;b = ((a = 3), (a + 2));printf(''\n b = %d \n'',b);

    }

    imprime b = 5.

    18

  • 8/8/2019 Cours Programmation C

    19/76

    Cours programmation : langage C Chapitre 3 : la syntaxe du langage C

    La virgule sparant les arguments d'une fonction ou les dclarations de variables n'est pas

    l'oprateur virgule. En particulier lvaluation de gauche droite n'est pas garantie. Par

    exemple l'instruction compose

    {int a=1;

    printf(''\n%d \n%d'',++a,a);}

    (compile avec gcc) produira la sortie 2 1 sur un PC Intel/Linux et la sortie 2 2 sur un DEC

    Alpha/OSF1. (Problme de portabilit)

    9. L'oprateur conditionnel ternaire

    L'oprateur conditionnel ? est un oprateur ternaire. Sa syntaxe est la suivante :

    condition ? expression1: expression2

    Cette expression est gale expression1 si condition est satisfaite, et expression2 sinon.

    Par exemple, l'expression x >= 0 ? x : -x correspond la valeur absolue d'un nombre. De

    mme l'instruction m = ((a > b) ? a : b); affecte m le maximum de a et de b.

    10. L'oprateur de conversion de type

    L'oprateur de conversion de type, appel cast, permet de modifier explicitement le type d'un

    objet. On crit (type) objet Par exemple :

    main(){

    int i = 3, j = 2;printf(''%f \n'',(float)i/j);}

    retourne la valeur 1.5.

    11. L'oprateur adresse

    L'oprateur d'adresse & appliqu une variable retourne l'adresse mmoire de cettevariable. La syntaxe est &objet

    Eemple : Main(){

    int i=5 ;printf("ladresse mmoire de i est :",&i) ;

    }

    imprime ladresse mmoire de i sous forme hexadcimale : exemple FFF4

    12. Rgles de priorit des oprateurs

    Le tableau suivant classe les oprateurs par ordres de priorit dcroissants. Les oprateursplacs sur une mme ligne ont mme priorit. Si dans une expression figurent plusieurs

    19

  • 8/8/2019 Cours Programmation C

    20/76

    Cours programmation : langage C Chapitre 3 : la syntaxe du langage C

    oprateurs de mme priorit, l'ordre dvaluation est dfinie par la flche de la seconde

    colonne du tableau. On prfrera toutefois mettre des parenthses en cas de doute.

    Tableau 3.2 : rgles de priorit des oprateurs

    Par exemple, les oprateurs logiques bit--bit sont moins prioritaires que les oprateurs

    relationnels. Cela implique que dans des tests sur les bits, il faut parenthser les expressions.

    Par exemple, il faut crire if ((x ^ y) != 0)

    20

  • 8/8/2019 Cours Programmation C

    21/76

    Cours programmation : langage C Chapitre 4 : les types de donnes

    Chapitre 4 : Les types de donnes

    Objectifs

    Connatre les principaux types de donnes du C et leurs caractristiques Savoir dclarer de nouveaux types

    Elments de contenu

    Les types caractres Les types entiers Les types flottants

    1. Les types prdfinis

    Le C est un langage typ. Cela signifie en particulier que toute variable, constante ou

    fonction est d'un type prcis. Le type d'un objet dfinit la faon dont il est reprsent en

    mmoire. Cette dernire se dcompose en une suite continue de mots (>= 1octet). Chaque mot

    de la mmoire est caractris par son adresse, qui est un entier. Deux mots contigus en

    mmoire ont des adresses qui diffrent d'une unit. Quand une variable est dfinie, il lui est

    attribu une adresse. Cette variable correspondra une zone mmoire dont la longueur (le

    nombre d'octets) est fixe par le type. La taille mmoire correspondant aux diffrents typesdpend des compilateurs. Toutefois, la norme ANSI spcifie un certain nombre de contraintes.

    Les types de base en C concernent les caractres, les entiers et les flottants (nombres rels).

    Ils sont dsigns par les mots-clefs suivants :

    char int float double

    short long unsigned

    1.1.Les types caractres

    Le mot-clef char dsigne un objet de type caractre. Il est cod sur un octet et il peut tre

    assimil un entier : tout objet de type char peut tre utilis dans une expression qui utilise

    des objets de type entier. Par exemple, si c est de type char, l'expression c + 1 est valide. Elledsigne le caractre suivant dans le code ASCII.

    Exemple : le programme suivant affiche la lettre B.

    #include Main(){

    char c=A ;printf ("%c", c+1) ;

    }

    21

  • 8/8/2019 Cours Programmation C

    22/76

    Cours programmation : langage C Chapitre 4 : les types de donnes

    Suivant les implmentations, le type char est sign ou non. En cas de doute, il vaut mieux

    prciser unsigned char ou signed char. Notons que tous les caractres imprimables sont

    positifs.

    1.2.Les types entiers

    Le mot-clef dsignant le type entier est int. Un objet de type int est reprsent par un mot

    de 32 bits pour un DEC alpha ou un PC Intel.

    Le type int peut tre prcd d'un attribut de prcision (short ou long) et/ou d'un attribut de

    reprsentation (unsigned). Un objet de type short int a au moins la taille d'un char et au plus

    la taille d'un int. En gnral, un short int est cod sur 16 bits. Un objet de type long int a au

    moins la taille d'un int (64 bits sur un DEC alpha, 32 bits sur un PC Intel).

    Tableau 4.1 : les types entiers selon larchitecture

    DEC Alpha PC Intel (Linux)

    char 8 bits 8 bits Caractre

    short 16 bits 16 bits Entier court

    int 32 bits 32 bits Entier

    long 64 bits 32 bits Entier long

    Le bit de poids fort d'un entier est son signe. Un entier positif est donc reprsent en

    mmoire par la suite de 32 bits dont le bit de poids fort vaut 0 et les 31 autres bits

    correspondent la dcomposition de lentier en base 2. Par exemple, pour des objets de type

    char (8 bits), l'entier positif 12 sera reprsent en mmoire par 00001100. Un entier ngatif

    est, lui, reprsent par une suite de 32 bits dont le bit de poids fort vaut 1 et les 31 autres bits

    correspondent la valeur absolue de l'entier reprsente suivant la technique dite du

    complment 2. Ainsi, pour des objets de type signed char (8 bits), -1 sera reprsent par

    11111111, -2 par 11111110, -12 par 11110100. Un int peut donc reprsenter un entier entre -2

    31et (2

    31-1). Lattribut unsigned signifie que lentier na pas de signe. Un unsigned int peut

    donc reprsenter un entier entre 0 et (232

    -1). Sur un DEC alpha, on utilisera donc un des types

    suivants :

    signed char [-27..2

    7[

    unsigned char [0..28[

    short int [-215

    ..215

    [

    unsigned short int [0..216

    [

    int [-231

    ..231

    [

    unsigned int [0..232

    [long int [-263..263[

    unsigned long int [0..264

    [

    Plus gnralement, les valeurs maximales et minimales des diffrents types entiers sont

    dfinies dans la librairie standard limits.h.

    Le mot-clef sizeof a pour syntaxe sizeof(expression) o expression est un type ou un objet.

    Le rsultat est un entier gal au nombre d'octets ncessaires pour stocker le type ou l'objet. Par

    exemple :

    unsigned short x;taille = sizeof(unsigned short);

    22

  • 8/8/2019 Cours Programmation C

    23/76

    Cours programmation : langage C Chapitre 4 : les types de donnes

    taille = sizeof(x);

    Dans les deux cas, taille vaut 4.

    Pour obtenir des programmes portables, on s'efforcera de ne jamais prsumer de la taille

    d'un objet de type entier. On utilisera toujours une des constantes de limits.h ou le rsultat

    obtenu en appliquant l'oprateur sizeof.

    1.3.Les types flottants

    Les types float, double et long double servent reprsenter des nombres en virgule

    flottante. Ils correspondent aux diffrentes prcisions possibles.

    Tableau 4.1 : les types flottant selon larchitecture

    DEC Alpha PC Intel

    Float 32 bits 32 bits flottant

    double 64 bits 64 bits Flottant double prcision

    Long double 64 bits 128 bits Flottant quadruple prcision

    Les flottants sont gnralement stocks en mmoire sous la reprsentation de la virgule

    flottante normalise. On crit le nombre sous la forme signe, mantisse B exposant . En

    gnral, B = 2. Le digit de poids fort de la mantisse n'est jamais nul. Un flottant est donc

    reprsent par une suite de bits dont le bit de poids fort correspond au signe du nombre. Le

    champ du milieu correspond la reprsentation binaire de l'exposant alors que les bits de

    poids faible servent reprsenter la mantisse.

    2. Dfinition de nouveaux types

    Le langage C fournit une fonction appele typedefqui cre de nouveaux types de donnes.

    Exemple :typedef int entier ; /* fait du nouveau nom entier un synonyme de int. Ce type peuttre utilis dans des dclaration, des casts exactement comme int. */

    tyedef char* STRING ; /* fait de string un synonyme de char* */

    typedef struct noeud {char* mot ;int quantite ;

    }ARBRE ; /*cre un nouveau type appel ARBRE (une structure) */

    On trouve aussi un constructeur de type par numration :

    enum { liste de valeurs symboliques }

    Exemple :enum quadrillatere { carre, rectangle, losange, parallellogramme } q1,q2 ;

    dfinit le type par enumration nomm quadrillatere et dclare deux objets q1 et q2 de ce

    type. (q1=carre ; q2=losange ; ..).

    23

  • 8/8/2019 Cours Programmation C

    24/76

    Cours programmation : langage C Chapitre 6 : les fonctions dentre sortie standards

    Chapitre 5 : Les fonctions dE/S standards

    Objectifs

    Se familiariser avec les fonctions assurant lchange dinformation entre la mmoirecentrale et les priphriques standard.

    Elments de contenu

    Les types caractres Les types entiers Les types flottants

    1. Introduction

    Les fonctions dE/S standards sont les fonctions assurant lchange dinformation entre la

    mmoire centrale et les priphriques standard, principalement le clavier et lcran.

    Dans ce chapitre, nous allons examiner les fonctions permettant de lire les donnes partir

    du clavier et dafficher les rsultats sur lcran.

    2. Les fonctions dentres

    2.1. La fonction scanf

    Cette fonction lit partir de lentre standard (clavier) une liste de variables en mmoire

    selon un format donn.

    int scanf ( const char *format, liste d'adresses);

    liste dadresse reprsente une liste dadresses de variables dclares auxquelles les donneslues seront attribues.

    format reprsente le format de lecture des donnes. Cest une chane de caractres (doncentour par des guillemets). Elle est compose de spcificateurs qui indique le type de

    variables quon va lire. Chaque spcificateur correspond un type de variable et doit donc

    apparatre dans le mme ordre que la variable dans la liste. Les principaux spcificateurs de

    format sont rsum dans le tableau suivant.

    24

  • 8/8/2019 Cours Programmation C

    25/76

    Cours programmation : langage C Chapitre 6 : les fonctions dentre sortie standards

    spcificateur signification

    %d ou %x ou %o Pour une variable de type int

    %u Pour une variable de type unsigned int

    %h Pour une variable de type short int

    %f Pour une variable de type float

    %lf Pour une variable de type double

    %e Pour une variable de type float mise sous

    forme scientifique

    %c Pour une variable de type char

    %s Pour une variable de type texte

    Exemple :Int a = -1;Unsigned int b = 25;Char c = X;Scanf(%d%u%c,&a,&b,&c);

    Remarque: On peut placer la longueur de la variable entre le signe % et la lettre spcificateur. Par

    exemple %3d indique quon va lire un entier de 3 chiffres.

    Si lon spare les spcificateurs de format par des espaces ou par des virgules alors lesvaleurs lire seront spares par les mmes sparateurs.

    2.2.La fonction gets

    Elle renvoie une chane de caractre lue dans le flux en entre stdin. Sa dclaration est la

    suivante :

    Char * gets (char * s) ;

    Lorsquon lit une chane de caractres avec scanf, la lecture sarrte ds la rencontre dun

    blanc. Avec la fonction gets, la lecture se termine la rception dun retour chariot \n.

    Exemple :#include void main(){

    char * CH;

    gets(CH);}

    2.3.Les fonction getch(), getche() et getchar()

    La premire fonction renvoie un caractre lu au clavier sans cho lcran alors que la

    deuxime renvoie un caractre lu au clavier avec cho lcran. La fonction getchar renvoie

    un caractre depuis stdin. Leur dclarations sont les suivantes :

    int getch(void) ;int getchar(void);

    int getche();

    25

  • 8/8/2019 Cours Programmation C

    26/76

    Cours programmation : langage C Chapitre 6 : les fonctions dentre sortie standards

    Exemple :char C1,C2,C3;C1 = getch();C2 = getchar();C3 = getche()

    3. Les fonctions de sorties

    3.1.La function printf

    Elle permet la traduction de quantit alphanumrique en chane de caractres ainsi quune

    prsentation formate de ditions.

    int printf ( const char *format, liste dexpression);

    format : format de reprsentation.

    liste dexprexssion : variables et expressions dont les valeurs sont diter.

    La premire partie est en fait une chane de caractres qui peut contenir

    du texte des squences dchappement qui permettent de contrler laffichage des donnes.

    Exemple \n qui permet le passage la ligne suivante

    des spcificateurs de format ou de conversionElle contient exactement un spcificateur de format pour chaque expression.

    Exemple :int i ;printf(entrer une valeur :\n);

    scanf(%d,&i);i = i *2printf(la nouvelle valeur de I est : %d,i) ;

    3.2.La fonction puts

    Envoie une chane de caractres vers stdout et ajoute un saut de ligne (newline).

    int puts (const char * s) ;

    Exemple :puts ( ceci est un exemple );

    3.3.La fonction putchar

    Envoie un caractre vers stdout (cran)

    int putchar (int c) ;

    Exemple :char c ;c= Aputchar (c);putchar (B);

    26

  • 8/8/2019 Cours Programmation C

    27/76

    Cours programmation : langage C Chapitre 7 : Les instructions de branchement conditionnel

    chapitre 6 : Les instructions de branchement conditionnel

    Objectifs

    Se familiariser avec les instructions de branchement conditionnel et comprendre leurutilit.

    Elments de contenu

    Linstruction if--else Linstruction switch

    1. If else

    algorithmique Langage C

    si ( expression logique)alors

    bloc d'instructions 1sinon

    bloc d'instructions 2fsi

    - Si lexpression logique a la valeurlogique vrai, alors le bloc d'instructions

    1 est excut

    - Si lexpression logique a la valeurlogiquefaux, alors le bloc

    d'instructions 2 est excut

    if ( expression )bloc d'instructions 1

    elsebloc d'instructions 2

    - Si l'expression fournit une valeurdiffrente de zro, alors le bloc

    d'instructions 1 est excut- Si l' expression fournit la valeur zro,

    alors le bloc d'instructions 2 est excut

    La partie expression peut dsigner :

    - une variable d'un type numrique,

    - une expression fournissant un rsultatnumrique.

    La partie bloc d'instructions peut dsigner :

    - un (vrai) bloc d'instructions comprisentre accolades.

    - une seule instruction termine par unpoint-virgule.

    On peut avoir des if imbriqus

    27

  • 8/8/2019 Cours Programmation C

    28/76

    Cours programmation : langage C Chapitre 7 : Les instructions de branchement conditionnel

    Exemples :if (a > b)

    max = a;else

    max = b;

    if (A-B)printf("A est diffrent de B\n");

    elseprintf("A est gal B\n");

    if (temperature < 0){

    printf(glace);

    }else{

    if (temperature < 100){

    printf(eau);}else{

    printf(vapeur);}

    }

    2. switch

    Cest un moyen qui permet de dcider dans une structure plusieurs cas. Cette instruction

    teste si une expression prend une valeur parmi un ensemble de constante et fait le

    branchement en consquence.

    algorithmique Langage C

    selon cas fairecas1 : liste d'instructions 1cas1 : liste d'instructions 1defaut : liste instructions N

    finselon

    switch (expression){case expr_cst1 : liste d'instructions1case expr_cst1 : liste d'instructions2default : liste instructions N

    }

    - Le choix de lensemble dinstructions excuter est calcul par lvaluation deexpression qui doit envoyer un type entier.

    - expr_cste doit tre un int et doit tre unique

    28

  • 8/8/2019 Cours Programmation C

    29/76

    Cours programmation : langage C Chapitre 7 : Les instructions de branchement conditionnel

    Exemple :int mois ;scanf(" %d" ,&mois) ;switch ( mois ){

    case 1 : printf(" janvier" ) ; break ;

    case 2 : printf(" fevrier" ) ; break ;case 12 : printf(" dcembre" ) ; break ;default : printf(erreur)

    }

    Linstruction break permet de sortir de linstruction switch. Elle est importante car si on ne la

    met pas aprs chaque cas dexcution alors toutes les instructions aprs ce cas seront excute

    (bien sur sils ne sont pas suivie dune autre instruction break).

    Remarque :

    Il existe des instructions de branchement non conditionnels : goto, continue et break.

    29

  • 8/8/2019 Cours Programmation C

    30/76

    Cours programmation : langage C Chapitre 7: Les structures rptitives

    chapitre 7 : Les structures rptitives

    Objectifs

    Se familiariser avec les structures rptitives Comprendre limportance de ces structures dans lcriture de programmes.

    Elments de contenu

    La structure while La structure do--while

    La structure for

    1. Introduction :

    En C, nous disposons de trois structures qui nous permettent la dfinition de boucles

    conditionnelles:

    la structure : while

    la structure : do - while la structure : for

    Thoriquement, ces structures sont interchangeables, c.--d quil serait possible de

    programmer toutes sortes de boucles conditionnelles en n'utilisant qu'une seule des trois

    structures. Mais il est recommand de choisir toujours la structure la mieux adapte au cas du

    traitement faire.

    2. Les structures rptitives

    2.1.While

    algorithmique Langage C

    tant que (expression logique) fairebloc d'instructions

    ftantque

    Tant que l'expression logique fournit la

    valeur vrai, le bloc d'instructions est excut.

    Si l'expression logique fournit la valeurfaux,

    while (expression)bloc d'instructions

    Tant que l'expression fournit une valeur

    diffrente de zro, le bloc d'instructions est

    excut.

    30

  • 8/8/2019 Cours Programmation C

    31/76

    Cours programmation : langage C Chapitre 7: Les structures rptitives

    l'excution continue avec l'instruction qui suit

    tanquet.

    Le bloc d'instructions est excut zro ou

    plusieurs fois.

    expression peut dsigner :

    - une variable d'un type numrique.- une expression fournissant un rsultat

    numrique.

    La partie bloc d'instructions peut dsigner :

    - un bloc d'instructions compris entreaccolades.

    - Une seule instruction termine par unpoint-virgule.

    - Rien (boucle infinie)

    Exemple 1:/* Afficher les nombres de 0 9 */int I = 0;while (I

  • 8/8/2019 Cours Programmation C

    32/76

    Cours programmation : langage C Chapitre 7: Les structures rptitives

    2.2.do-While

    algorithmique Langage C

    Rpeterbloc dinstruction

    jusqu (expression)

    dobloc dinstructions

    while ( expression );

    Le bloc d'instructions est excut au moins

    une fois et aussi longtemps que l'expression

    fournit une valeur diffrente de zro.

    do - while est comparable la structure rpter du langage algorithmique si la condition finaleest inverse logiquement.

    La structure do - while est semblable la structure while, avec la diffrence suivante :

    while value la condition avant d'excuter le bloc d'instructions. do - while value la condition aprs avoir excut le bloc d'instructions. Ainsi le bloc

    d'instructions est excut au moins une fois.

    En pratique, la structure do - while n'est pas si frquente que while; mais dans certains cas,

    elle fournit une solution plus lgante. Une application typique de do - while est la saisie de

    donnes qui doivent remplir une certaine condition.

    Exemple1: float N;do

    {printf("Introduisez un nombre entre 1 et 10 :");scanf("%f", &N);

    }while (N10);

    Exemple2 :

    int n, div;printf("Entrez le nombre diviser : ");scanf("%i", &n);do{

    printf("Entrez le diviseur ( != 0) : ");scanf("%i", &div);

    }while (!div);printf("%di / %d = %f\n", n, div, (float)n/div);

    32

  • 8/8/2019 Cours Programmation C

    33/76

    Cours programmation : langage C Chapitre 7: Les structures rptitives

    Exemple3 :

    float N;do{

    printf("Entrer un nombre (>= 0) : ");scanf("%f", &N)

    }while (N < 0);

    printf("La racine carre de %.2f est %.2f\n", N, sqrt(N));

    2.3.for

    La structure pour en langage algorithmique est utilises pour faciliter la programmation de

    boucles de comptage. La structure for en C est plus gnrale et beaucoup plus puissante.

    for ( expr1 ; expr2 ; expr3 )bloc d'instructions

    Est quivalente :

    expr1;while (expr2 ){

    bloc d'instructionsexpr3 ;

    }

    expr1 est value une fois avant le passage de la boucle. Elle est utilise pour initialiser les

    donnes de la boucle.

    expr2 est value avant chaque passage de la boucle. Elle est utilise pour dcider si la boucle

    est rpte ou non.

    expr3 est value la fin de chaque passage de la boucle. Elle est utilise pour rinitialiser les

    donnes de la boucle.

    En pratique, les parties expr1 et expr2 contiennent souvent plusieurs initialisations ou

    rinitialisations, spares par des virgules.

    Exemple1:

    /* affichage des carrs des nombres entire compris entre 0 et 20 */int I;for (I=0 ; I

  • 8/8/2019 Cours Programmation C

    34/76

    Cours programmation : langage C Chapitre 7: Les structures rptitives

    Exemple3 : affichage du code binaire dun caractre lue au clavier

    Notation utilisant la structure while

    int C, I;C=getchar();I=128;while (I>=1){

    printf("%d ", C/I);C%=I;I/=2;

    }

    Notation utilisant for - trs lisible

    int C, I;

    C=getchar();for (I=128 ; I>=1 ; I/=2){

    printf("%i ", C/I);C%=I;

    }

    Notation utilisant for - plus compacte

    int C, I;C=getchar();

    for (I=128 ; I>=1 ; C%=I, I/=2)printf("%i ", C/I);

    Notation utilisant for - dconseiller -

    int C, I;for(C=getchar(),I=128; I>=1 ;printf("%i ",C/I),C%=i,i/=2);

    34

  • 8/8/2019 Cours Programmation C

    35/76

    Cours programmation : langage C Chapitre 8 : Les tableaux

    Chapitre 8 : les tableaux

    Objectifs

    Assimiler le concept des tableaux Connatre les diffrents traitements quon peut excuter sur les tableaux Comprendre limportance des tableaux dans la structuration des programmes.

    Elments de contenu

    Les tableaux une dimensiono Dclaration et mmorisationo Initialisation et rservation automatique

    o Affichage des lments dun tableauo affectation de valeurs aux lments du tableau

    Les tableaux deux dimensionso Dclaration et mmorisationo Initialisation et rservation automatiqueo Affichage des lments dun tableauo affectation de valeurs aux lments du tableau

    1. Les tableaux une dimension

    1.1.Dclaration et mmorisation

    Dclaration

    Dclaration de tableaux en langage algorithmique :

    TypeSimple tableau NomTableau [Dimension]

    Dclaration de tableaux en C :

    TypeSimple NomTableau[Dimension];

    Les noms des tableaux sont des identificateurs.

    Exemples :

    int notes [8] ; /* dclaration dun tableau nomm notes, de type int et de dimension 8 */

    char tab [100] ; /* dclaration dun tableaux nomm tab, de type char et de dimension 100 */

    float moy[40] ; /* dclaration dun tableau nomm moy, de type float et de dimention 100 */

    35

  • 8/8/2019 Cours Programmation C

    36/76

    Cours programmation : langage C Chapitre 8 : Les tableaux

    Mmorisation

    En C, le nom d'un tableau est le reprsentant de l'adresse du premier lment du tableau. Les

    adresses des autres composantes sont calcules (automatiquement) relativement cette adresse.

    Exemple:

    char A[5] = {A, 66, 70, C, 240};

    65 66 70 67 240 ..

    1E02

    A

    Si un tableau est form de N composantes et si une composante a besoin de M octets en mmoire,

    alors le tableau occupera de N*M octets.

    1.2.Initialisation et rservation automatique

    Lors de la dclaration d'un tableau, on peut initialiser les composantes du tableau, en indiquant

    la liste des valeurs respectives entre accolades.

    Exemples :

    int A[5] = {10, 20, 30, 40, 50};float B[4] = {-1.05, 3.33, 87e-5, -12.3E4};int C[10] = {1, 0, 0, 1, 1};

    Il faut videmment veiller ce que le nombre de valeurs dans la liste corresponde la

    dimension du tableau. Si la liste ne contient pas assez de valeurs pour toutes les composantes, lescomposantes restantes sont initialises par zro.

    Si la dimension n'est pas indique explicitement lors de l'initialisation, alors l'ordinateur rserve

    automatiquement le nombre d'octets ncessaires.

    Exemples

    int A[] = {10, 20, 30, 40, 50};

    ==> rservation de 5*sizeof(int) octets (dans notre cas: 10 octets)

    float B[] = {-1.05, 3.33, 87e-5, -12.3E4};

    ==> rservation de 4*sizeof(float) octets (dans notre cas: 16 octets)

    int C[] = {1, 0, 0, 1, 1, 1, 0, 1, 0, 1};

    ==> rservation de 10*sizeof(int) octets (dans notre cas: 20 octets)

    1.3.Accs aux composantes

    En dclarant un tableau par int A[5]; nous avons dfini un tableau A avec cinq composantes,

    auxquelles on peut accder par: A[0], A[1], ... , A[4]

    36

  • 8/8/2019 Cours Programmation C

    37/76

    Cours programmation : langage C Chapitre 8 : Les tableaux

    Exemple :

    1.4.Affichage et affectation

    La structure for se prte particulirement bien au travail avec les tableaux. La plupart des

    applications se laissent implmenter par simple modification des exemples-types de l'affichage et

    de l'affectation.

    Affichage du contenu d'un tableau : exemple

    main()

    {int A[5];int I; /* Compteur */for (I=0; I

  • 8/8/2019 Cours Programmation C

    38/76

    Cours programmation : langage C Chapitre 8 : Les tableaux

    Exemples :

    double A[2][5] ; /* dclaration dun tableau deux dimension nomm A et de type double */char B[4][2] ; /* dclaration dun tableau deux dimension nomm B et de type char */

    Mmorisation

    Comme pour les tableaux une dimension, le nom d'un tableau est le reprsentant de l'adresse

    du premier lment du tableau (c.--d. l'adresse de la premire ligne du tableau). Les composantes

    d'un tableau deux dimensions sont stockes ligne par ligne dans la mmoire.

    Exemple:Mmorisation d'un tableau deux dimensions

    short A[3][2] = {{1, 2 },{10, 20 },{100, 200}};

    . 1 2 10 20 100 200 ..

    1E08

    A

    2.2.Initialisation et rservation automatique

    Lors de la dclaration d'un tableau, on peut initialiser les composantes du tableau, en indiquant

    la liste des valeurs respectives entre accolades. A l'intrieur de la liste, les composantes de chaque

    ligne du tableau sont encore une fois comprises entre accolades. Pour amliorer la lisibilit des

    programmes, on peut indiquer les composantes dans plusieurs lignes.

    Exemples

    int A[3][10] ={{ 0,10,20,30,40,50,60,70,80,90},{10,11,12,13,14,15,16,17,18,19},{ 1,12,23,34,45,56,67,78,89,90}};

    float B[3][2] = {{-1.05, -1.10 },{86e-5, 87e-5 },{-12.5E4, -12.3E4}};

    Lors de l'initialisation, les valeurs sont affectes ligne par ligne en passant de gauche droite.

    Nous ne devons pas ncessairement indiquer toutes les valeurs: Les valeurs manquantes serontinitialises par zro. Il est cependant dfendu d'indiquer trop de valeurs pour un tableau.

    Si le nombre de lignes L n'est pas indiqu explicitement lors de l'initialisation, l'ordinateurrserve automatiquement le nombre d'octets ncessaires.

    int A[][10] = {{ 0,10,20,30,40,50,60,70,80,90},{10,11,12,13,14,15,16,17,18,19},{ 1,12,23,34,45,56,67,78,89,90}};

    38

  • 8/8/2019 Cours Programmation C

    39/76

    Cours programmation : langage C Chapitre 8 : Les tableaux

    2.3.Accs aux composantes

    Laccs un lment dun tableau deux dimensions se fait selon le schma suivant :

    NomTableau[Ligne][Colonne]

    Les lments d'un tableau de dimensions L et C se prsentent de la faon suivante:

    / \| A[0][0] A[0][1] A[0][2] . . . A[0][C-1] |

    | A[1][0] A[1][1] A[1][2] . . . A[1][C-1] |

    | A[2][0] A[2][1] A[2][2] . . . A[2][C-1] || . . . . . . . . . . . . . . . || A[L-1][0] A[L-1][1] A[L-1][2] . . . A[L-1][C-1] |

    \ /

    2.4.Affichage et affectation

    Lors du travail avec les tableaux deux dimensions, nous utiliserons deux indices (p.ex: I et J),

    et la structure for, souvent imbrique, pour parcourir les lignes et les colonnes des tableaux.

    Affichage du contenu d'un tableau deux dimensions

    main(){int A[5][10];int I,J;/* Pour chaque ligne ... */for (I=0; I

  • 8/8/2019 Cours Programmation C

    40/76

    Cours programmation : langage C Chapitre 9 : les chanes de caractres

    Chapitre 9 : Les chanes de caractres

    Objectifs

    - Connatre la convention de reprsentation des chanes de caractres en C- Comprendre les entres -sorties de chanes- Manipuler les fonctions de traitement et de conversion de chanes

    Elments du contenu

    - La convention de reprsentation de chanes de caractres en C- Les entres sorties de chanes- Les fonctions de concatnation de chanes- Les fonctions de comparaison de chanes- Les fonctions de copie de chanes

    - Les fonctions de recherche dans une chane- Les fonctions de conversion

    Il n'existe pas de type spcial chaneou stringen C. Une chane de caractres est traite comme untableau une dimension de caractres.

    1. Dclaration :

    La dclaration dune chane de caractre se fait par lune des mthodes suivantes :

    char NomChaine [Longueur]; char * NomChaine ;

    Exemple :char NOM [20]; /* dclaration sans initialisation */char PRENOM [] = " stream"; /* dclaration avec initialisation */char adresse1 [] = { c, h,a, r ,g,u,i,a,\0} ; /* dclaration avec initialisation */char adresse2 [20] = { c, h,a, r ,g,u,i,a,\0} ; /* dclaration avec initialisation */char * CH1 ; /* dclaration sans initialisation */char * CH2= " voila" ; /* dclaration avec initialisation */CH1 = " affectation permise" /* affectation permise mais NOM = " chaine" est non permise */char PHRASE [300]; /* dclaration sans initialisation */

    2. Mmorisation :

    Le nom d'une chane est le reprsentant de l'adresse du premier caractre de la chane.

    Pour mmoriser une variable qui doit tre capable de contenir un texte de N caractres, nous

    avons besoin de N+1 octets en mmoire:

    Exemple :char TXT [10] = "BONJOUR !";

    40

  • 8/8/2019 Cours Programmation C

    41/76

    Cours programmation : langage C Chapitre 9 : les chanes de caractres

    3. Accs aux lments :

    Exemple :char TXT [6] = "hello";

    4. Utilisation des chanes de caractres :

    Les bibliothques de fonctions de C contiennent une srie de fonctions spciales pour le

    traitement de chanes de caractres.

    Exemples 1: les fonctions de stdio.h

    char TXT [6] = "hello";char CH[5] ;printf("%s",TXT) ; /* affiche hello sans retour la ligne*/printf("%.3s", TXT) ; /* affiche hel */scanf("%s", CH) ; /* CH contient ladresse du premier caractre de la chaine */puts ( TXT) ; /* affiche hello avec un retour la ligne */puts (" bonjour") ; /* affiche bonjour avec un retour la ligne */gets(CH) ; /* lit une ligne de de caractres de stdin et la copie l'adresse indique par CH */

    Exemples 2: les fonctions de string.h

    char CH1 [] = "hello";char CH2 [] = "bonjour";

    char * chaine = "bonsoir" ;char * sous_chaine = "soir" ;int k = 2 ;char C=a ;strlen (CH1) ; /* fournit la longueur de CH1 */strcpy (CH1, CH2) ; /* copie CH1 dans CH2 */strncpy (CH1, CH2,k) ; /* copie au plus k caractre de CH1 vers CH2 */strcat (CH1, CH2) ; /* ajoute CH2 la fin de CH1 */strcmp ( CH1, CH2 ) ; /* compare CH1 et CH2 lexico graphiquement */stricmp ( CH1, CH2 ) ; /* compare CH1 et CH2 lexico graphiquement sans tenir min maj*/strnicmp( CH1, CH2 ) ; /* compare CH1 et CH2 sans tenir compte de la diffrence entre */strncat (CH1, CH2,k) ; /* miniscule et majiscule */strrev (chaine) ; /*inverse la chane et, renvoie l'adresse de la chaine inverse*/strchr(chaine,C) ; /*recherche la premire occurrence du caractre dans la chane*/strrchr(chaine,C) ; /*idem en commenant par la fin*/strstr(chaine,sous_chaine) ;/*recherche la premire occurrence de sous_chaine ds la chaine*/strpbrk (CH1,CH2) ;/*recherche, dans CH1la premire occurrence dun caractre de CH2 */

    strcmp, stricmp et strcmpi renvoient un nombre:

    positif si la chane1 est suprieure la chaine2 (au sens de l'ordre lexicographique) ngatif si la chane1 est infrieure la chane2 nul si les chanes sont identiques.

    Les 4 dernires fonctions renvoient l'adresse de l'information recherche en cas de succs,

    sinon le pointeur NULL (c'est dire le pointeur de valeur 0 ou encore le pointeur faux).

    41

  • 8/8/2019 Cours Programmation C

    42/76

    Cours programmation : langage C Chapitre 9 : les chanes de caractres

    Remarque:

    Comme le nom d'une chane de caractres reprsente une adresse fixe en mmoire, on

    ne peut pas 'affecter' une autre chane au nom d'un tableau. Il faut bien copier la chane

    caractre par caractre ou utiliser la fonction strcpy respectivement strncpy:

    strcpy(CH1, "bonsoir");

    Exemples 3: les fonctions de stlib.h

    La bibliothque contient des dclarations de fonctions pour la conversion de

    nombres en chanes de caractres et vice-versa.

    char CH [] = "125";atoi ( CH); /* retourne la valeur numrique reprsent par CH comme int */atol (CH) ; /* retourne la valeur numrique reprsent par CH comme long */atof(CH) ; /* retourne la valeur numrique reprsent par CH comme double */

    Rgles gnrales pour la conversion:

    Les espaces au dbut d'une chane sont ignors Il n'y a pas de contrle du domaine de la cible La conversion s'arrte au premier caractre non convertible Pour une chane non convertible, les fonctions retournent zro

    Remarque:

    Le standard ANSI-C ne contient pas de fonctions pour convertir des nombres enchanes de caractres. Si on se limite aux systmes fonctionnant sous DOS, on peut

    quand mme utiliser les fonctions itoa, ltoa et ultoa qui convertissent des entiers enchanes de caractres.

    char CH [20] ;int base = 10; /* base est compris entre 2 et 36 */int x=5 ;long y =20;unsigned long z = 300 ;itoa ( x, CH, base);ltoa ( y, CH, base);ultoa(z, CH, base);

    Exemples 3: les fonctions de ctype.h

    Les fonctions de servent classifier et convertir des caractres. Les symboles

    nationaux (, , , , , , ...) ne sont pas considrs. Les fonctions de sont

    indpendantes du code de caractres de la machine et favorisent la portabilit des

    programmes. Dans la suite, c reprsente une valeur du type int qui peut tre reprsentecomme caractre.

    isupper(c) ; /* retourne une valeur diffrente de zro si c est une majiscule */islower(c) ; /* retourne une valeur diffrente de zro si c est une miniscule */isdigit (c) ; /* retourne une valeur diffrente de zro si c est un chiffre dcimal */isalpha(c) ; /* retourne une valeur diffrente de zro si isupper(c) ou islower(c) */isalnum(c) ; /* retourne une valeur diffrente de zro si isalpha(c) ou isdigit (c) */isxdigit(c) ; /* retourne une valeur diffrente de zro si c est un chiffre hexadcimal */isspace(c) ; /* retourne une valeur diffrente de zro si c est un signe despacement */

    42

  • 8/8/2019 Cours Programmation C

    43/76

    Cours programmation : langage C Chapitre 9 : les chanes de caractres

    Les fonctions de conversion suivantes fournissent une valeur du type int qui peut trereprsente comme caractre; la valeur originale de c reste inchange:

    tolower(c) ; /* retourne c convrti en miniscule si c est une majiscule */toupper(c) ; /* retourne c convrti en majiscule si c est une miniscule */

    5. Tableaux de chane de caractres :

    Souvent, il est ncessaire de mmoriser une suite de mots ou de phrases dans des variables.

    Il est alors pratique de crer un tableau de chanes de caractres, ce qui allgera les

    dclarations des variables et simplifiera l'accs aux diffrents mots (ou phrases).

    Declaration : elle se fait par lune des deux mthodes

    char JOUR [7] [9];

    char * mois [12] ;

    Initialisation : lors de la dclaration.

    char JOUR [7] [9]= {"lundi", "mardi", "mercredi","jeudi", "vendredi", "samedi","dimanche"};char * MOIS [12] = {"jan", "fev", "mars","avr", "may", "juin","juil","aout", "sep", "oct","nov", "dec"};

    Accs aux diffrents composantes :

    Printf ("%s", JOUR [2]); /* affiche mercredi */Printf ("%s", MOIS [0]); /* affiche jan */

    Accs aux caractres : (similaire au cas des tableaux)

    for(I=0; I

  • 8/8/2019 Cours Programmation C

    44/76

    Cours programmation : langage C Chapitre 10 : les types de variables complexes

    Chapitre 10 : Les types de variables complexes(Structures, union et numration)

    Objectifs

    - Connatre la syntaxe de la dclaration des structures en langage C- Comprendre lutilit de lutilisation dune structure

    - Connatre la dclaration, des types synonymes en C

    - Diffrencier entre les structures, les unions et les numrations

    Elments du contenu

    - Exemples de dclaration de structures

    - Utilisation dune structure- La dclaration de types synonymes- Les champs de bits- Les numrations- Les unions

    1. Notion de structure

    C'est un mcanisme permettant de grouper un certain nombre de variables de types

    diffrents au sein d'une mme entit en utilisant le concept denregistrement. Unenregistrement est un ensemble d'lments de types diffrents reprs par un nom. Les

    lments d'un enregistrement sont appels des champs. Le langage C possde le concept

    d'enregistrement appel structure.

    1.1.Dclaration de structure :

    Mthode 1 : dclaration en prcisant un nom pour la structure

    struct personne{char nom[20];char prenom[20];int n_cin;};

    Dclare l'identificateurpersonne comme tant le nom d'un type de structure, compose de

    trois membres. On peut ensuite utiliser ce type structure pour dclarer des variables, de la

    manire suivante :

    struct personne p1,p2; /* qui dclare deux variables de typestruct

    personne */

    /* de nomsp1 etp2 */

    Mthode 2 : dclaration sans prciser un nom pour la structure

    44

  • 8/8/2019 Cours Programmation C

    45/76

    Cours programmation : langage C Chapitre 10 : les types de variables complexes

    struct{char nom[20];char prenom[20];

    int n_cin;} p1,p2;

    Dclare deu s p1 et p2 comme tant deux structures de trois membres, mais

    struct

    x variables de nom

    elle ne donne pas de nom au type de la structure. L'inconvnient de cette mthode est qu'il

    sera par la suite impossible de dclarer une autre variable du mme type. De plus, si plus loin

    on crit :

    {char nom[20];char pr