Top Banner

of 60

Cours C Avancé V1

Jul 07, 2018

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • 8/18/2019 Cours C Avancé V1

    1/60

    Université Cadi Ayyad

    Ecole Nationale des Sciences Appliquées

    Marrakech

    Elaboré et présenté par Miloud LAHMAIM

    Ingénieur-Enseignant à l’ENSA de Marrakech

    [email protected]

    2ème année du Cycle Préparatoire

    Année universitaire 2015-2016Semestre 2

    mailto:[email protected]:[email protected]

  • 8/18/2019 Cours C Avancé V1

    2/60

    Plan Partie 1: Rappels

    Partie 2: C avancé

    Partie 3: Graphique avec C

    2

  • 8/18/2019 Cours C Avancé V1

    3/60

    Plan Partie 1: Rappels

    ◦ Avant propos,

    ◦ Environnement et compilation,

    ◦ Notions de base,

    ◦ Types de base, Opérateurs et Expressions,

    ◦ Lire et écrire des données,

    ◦ La structure alternative,

    ◦ La structure répétitive,

    ◦ Les tableaux,◦ Les chaînes de caractères.

    Partie 2: C avancé

    Partie 3: Graphique avec C 3

  • 8/18/2019 Cours C Avancé V1

    4/60

    L’information: Information: Nombre, Texte, Vidéo, Image….

    N’importe quelle information peut être codée sous formed’une suite de 1 et 0 (bit).

    Exemples de codage : ASCII, MPGE, JPG, GIF, H.264...

    La communication se fait via: Signal électrique (exp: +5V=1et -5V=0), Onde magnétique (Wifi), Lumière (fibreoptique)…

    bit = 0 ou 1.

    Octet (Byte en anglais) = 8 bits

    Ko=KB=210 octets, Mo=220 octets, Go=230 octets…

    Kb=kilobit= 103 bits, Mb=106 bits, …. 4   P   a   r   t   i   e   1  :   A   v   a   n   t   p   r   o   p   o   s

  • 8/18/2019 Cours C Avancé V1

    5/60

    Informatique:

    L’informatique: le domaine d'activité scientifique,

    technique et industriel concernant le traitement

    automatique de l'information.

    L’informatique se compose de deux parties:

    SoftWare et HardWare.

    5   P   a   r   t   i   e   1  :   A   v   a   n   t   p   r   o   p   o   s

  • 8/18/2019 Cours C Avancé V1

    6/60

    SoftWare: Software: tout ce qui est non matériel.

    Langage: protocole qui sert à envoyer et recevoirune information(communication).

    Langage machine: langage de haut niveaucompréhensible par la machine (binaire).

    Langage de programmation: compréhensible par leprogrammeur et non par la machine(C, Java, C++,PHP, HTML…).

    Programme: ensemble de constructions (ordres)écrites via un langage de programmation.

    Logiciel: Ensemble de programmes(Office, …).

    Système d’exploitation: Ensemble de logiciels (Linux,

    Windows, IOS, Android,…) 6   P   a   r   t   i   e   1  :   A   v   a   n   t   p   r   o   p   o   s

  • 8/18/2019 Cours C Avancé V1

    7/60

    HardWare: HardWare: équipement électrique (Ordinateur,

    Smartphone, Récepteur Satellite…).

    Un équipement informatique se compose de:

    périphérique d’entrée, périphérique de sortie et

    unité centrale de traitement. Entrée: clavier, souris, scanner, caméra….

    Sortie: Ecran, imprimante,…

    Unité centrale: Microprocesseur, Mémoires,Cartes…

    7   P   a   r   t   i   e   1  :   A   v   a   n   t   p   r   o   p   o   s

  • 8/18/2019 Cours C Avancé V1

    8/60

    Microprocesseur: Caractérisé par: Marque(Intel, AMD,…) et

    Fréquence(Nombre d’opérations par second, enGHz).

    Coordonne le reste des éléments,

    Il se charge des calculs(+-x/, et ou…).

    Il exécute les instructions qui ont été

    programmées.

    Toutes les informations qui circulent dansl’ordinateur passent par lui.

    8   P   a   r   t   i   e   1  :   A   v   a   n   t   p   r   o   p   o   s

  • 8/18/2019 Cours C Avancé V1

    9/60

    Mémoire: Toutes les informations doivent être stockées

    dans une mémoire.

    Disque dur: grande capacité (To), les

    informations sont stockées sous format de

    fichiers (lecture et écriture). ROM: faible capacité (Mo), conserve les données

    nécessaires au démarrage de l'ordinateur

    (lecture seulement et non effaçable). RAM: Moyenne Capacité (Go), conserve les

    données traitées par un programme (lecture et

    écriture). 9   P   a   r   t   i   e   1  :   A   v   a   n   t   p   r   o   p   o   s

  • 8/18/2019 Cours C Avancé V1

    10/60

    Plan Partie 1: Rappels

    ◦ Avant propos,

    ◦ Environnement et compilation,

    ◦ Notions de base,

    ◦ Types de base, Opérateurs et Expressions,

    ◦ Lire et écrire des données,

    ◦ La structure alternative,

    ◦ La structure répétitive,

    ◦ Les tableaux,◦ Les chaînes de caractères.

    Partie 2: C avancé

    Partie 3: Graphique avec C 10

  • 8/18/2019 Cours C Avancé V1

    11/60

    Identification des fichiers Lors de la programmation en C, nous travaillons avec différents types de

    fichiers qui sont identifiés par leurs extensions:

    *.Cfichiers source (le code source du programme) : compris seulement par leprogrammeur

    *.OBJ

    fichiers compilés (versions objet)

    *.EXEfichiers compilés et liés (versions exécutables): compris seulement par lamachine

    *.LIBbibliothèques de fonctions précompilées

    *.Hfichiers en-tête qui contiennent la déclaration des fonctions (header files)

    11   P   a   r   t   i   e   1  :   E   n   v   i   r   o   n   n   e   m   e

       n   t   e   t   c   o   m   p   i    l   a   t   i   o   n

  • 8/18/2019 Cours C Avancé V1

    12/60

    Compilation La compilation et la fait de traduire le fichier .C écrit par le programmeur (code

    source non compréhensible par la machine) vers un fichier .EXE écrit en

    langage machine (non compréhensible par le programmeur).

    12   P   a   r   t   i   e   1  :   E   n   v   i   r   o   n   n   e   m   e

       n   t   e   t   c   o   m   p   i    l   a   t   i   o   n

  • 8/18/2019 Cours C Avancé V1

    13/60

    Compilation Pour programmer on aura besoin d’un

    programme regroupant les éléments suivants :◦ Un éditeur de texte pour rédiger le code source d'un

    fichier *.C en langage C.

    ◦ Un compilateur pour faire la fameuse traduction.

    ◦ Un débugger pour traquer les erreurs dans le codesource.

    Ce programme 3 en 1 est appelé IDE

    (Integrated Development Environment, environnement de développement intégré en français).

    Il existe beaucoup d'IDE payants ou non. (DEVC++, CodeBlock, Turbo C….)

    13   P   a   r   t   i   e   1  :   E   n   v   i   r   o   n   n   e   m   e

       n   t   e   t   c   o   m   p   i    l   a   t   i   o   n

  • 8/18/2019 Cours C Avancé V1

    14/60

    Plan Partie 1: Rappels

    ◦ Avant propos,

    ◦ Environnement et compilation,

    ◦ Notions de base,

    ◦ Types de base, Opérateurs et Expressions,

    ◦ Lire et écrire des données,

    ◦ La structure alternative,

    ◦ La structure répétitive,

    ◦ Les tableaux,◦ Les chaînes de caractères.

    Partie 2: C avancé

    Partie 3: Graphique avec C 14

  • 8/18/2019 Cours C Avancé V1

    15/60

    Format d’un programme- Inclusion des bibliothèques

    (Obligatoire si on veut utiliser une fonction nondéclarée)

    - Déclarations globale

    (Optionnelle)

    - Déclarations ou définition

    des fonctions

    (Obligatoire si on veut utiliser cette fonction

    après)

    - Définition de la fonction main

    (Obligatoire)

    15   P   a   r   t   i   e   1  :   N   o   t   i   o   n   s    d   e    b

       a   s   e

    #include

    …….

    Type1 NomVariable1;

    …….

    Type NomFonction(Type1Param1,….)

    { Déclaration locale

    Instructions

     }

    …….

    main(){

    return 0;

     }

  • 8/18/2019 Cours C Avancé V1

    16/60

     fonctions

    Fonction (in) = out

    in = les paramètres de la fonction

    out = le résultat de la fonction

    in et out peuvent être vide (void)

    Pour utiliser une fonction dans un programme on

    doit déclarer auparavant le fichier .h où cette

    fonction est déclarée: par exemple si on veut

    utiliser une fonction mathématique on doitinclure au début du code source la ligne

    #include

    16   P   a   r   t   i   e   1  :   N   o   t   i   o   n   s    d   e    b

       a   s   e

  • 8/18/2019 Cours C Avancé V1

    17/60

    Définition d’une fonction ( , , ... )

    {

     }

    Une fonction en C fournit un résultat dont le typedoit être défini. Si aucun type n'est définiexplicitement, C suppose par défaut que le type durésultat est int (integer).

    Le retour du résultat se fait en général à la fin de lafonction par l'instruction return.

    Le type d'une fonction qui ne fournit pas de résultatest déclaré comme void (vide).

    Si une fonction n'a pas besoin de paramètres, lesparenthèses restent vides ou contiennent lemot void. 17   P   a   r   t

       i   e   1  :   N   o   t   i   o   n   s    d   e    b

       a   s   e

  • 8/18/2019 Cours C Avancé V1

    18/60

    La fonction mainmain()

    {

    return 0;

     }

    La fonction principale main est obligatoire danstous les programmes.

    Le type de main est le type par défaut (int). main renvoie la valeur 0 pour indiquer à

    l'environnement que le programme s'est terminé

    avec succès, sans anomalies ou erreurs fatales. 18   P   a   r   t   i   e   1  :   N   o   t   i   o   n   s    d   e    b

       a   s   e

  • 8/18/2019 Cours C Avancé V1

    19/60

    Variable La RAM est une grande commode composée

    de plusieurs tiroirs ayant chacun une adresse etune valeur.

    Une variable est une information stockée dans lamémoire vive comportant une adresse et une valeur.

    L'adresse d'une variable est indiquée par le nom dela variable précédé du signe &.

    A=90 => &A=0

    B=256 => &B=1

    C=‘A‘ => &C=3 (Le caractère A à le code ASCII = 65)

    19   P   a   r   t

       i   e   1  :   N   o   t   i   o   n   s    d   e    b

       a   s   e

    Adresse 0 1 2 3   …

    bits 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1

    Valeur 90 256 65

  • 8/18/2019 Cours C Avancé V1

    20/60

    Les identificateurs

    Les noms des fonctions et des variables en C

    sont composés d'une suite de lettres et dechiffres.

    Le premier caractère doit être une lettre.

    L'ensemble des symboles utilisables est donc: {0,1,2,...,9,A,B,...,Z,_,a,b,...,z}

    C distingue les majuscules et les minuscules, ainsi:

    int a,A; a et A sont deux variables différentes.

    20   P   a   r   t

       i   e   1  :   N   o   t   i   o   n   s    d   e    b

       a   s   e

  • 8/18/2019 Cours C Avancé V1

    21/60

    Les commentaires

    Un commentaire commence toujours par les

    deux symboles '/*' et se termine par lessymboles '*/'.

    Il est interdit d'utiliser des commentaires

    imbriqués. Exemples

    ◦  /* Ceci est un commentaire correct */ 

    ◦  /* Ceci est /* évidemment */ défendu */ 

    Un commentaire n’est pas pris en considération

    par un compilateur.

    21   P   a   r   t

       i   e   1  :   N   o   t   i   o   n   s    d   e    b

       a   s   e

  • 8/18/2019 Cours C Avancé V1

    22/60

    Plan Partie 1: Rappels

    ◦ Avant propos,

    ◦ Environnement et compilation,

    ◦ Notions de base,

    ◦ Types de base, Opérateurs et Expressions,

    ◦ Lire et écrire des données,

    ◦ La structure alternative,

    ◦ La structure répétitive,

    ◦Les tableaux,

    ◦ Les chaînes de caractères.

    Partie 2: C avancé

    Partie 3: Graphique avec C 22

  • 8/18/2019 Cours C Avancé V1

    23/60

    Les types simples: Entiers

    Char B=‘A’ est équivalent à char B=65

    Le nombre d’octets dépond de la machine.

    La fonction sizeof(type) ou sizeof(variable) renvoie la

    taille concernée en octet.

    23   P   a   r   t

       i   e   1  :   T   y   p   e   s    d   e    b   a   s

       e ,   O   p    é   r   a   t   e   u   r   s   e   t   E   x   p   r   e   s   s   i   o   n   s ,

    défin it ion descrip t ion domaine m in domaine max O  

    char caractère -128 127 1short entier court -32768 32767 2

    int entier standard -32768 32767 4

    long entier long -2147483648 2147483647 4

    unsigned char caractère 0 255 1

    unsigned short entier court 0 65535 2unsigned int entier standard 0 65535 4

    unsigned long entier long 0 4294967295 4

  • 8/18/2019 Cours C Avancé V1

    24/60

    Les types simples: Rationnels

    Le nombre d’octets dépond de la machine.

    La fonction sizeof(type) ou sizeof(variable)

    renvoie la taille

    24   P   a   r   t

       i   e   1  :   T   y   p   e   s    d   e    b   a   s

       e ,   O   p    é   r   a   t   e   u   r   s   e   t   E   x   p   r   e   s   s   i   o   n   s ,

    Nombre rationnel =   * 10  

    est le signe positif ou négatif du nombre  est un décimal positif avec un seul chiffre devant la virgule.

      est un entier relatif 

    défin it io n p réc isio n man tis se d omain e m in d omain e max o ctets  

    float simple 6 3.4 * 10-38 3.4 * 1038 4

    double double 15 1.7 * 10-308 1.7 * 10308 8

    long double long 19 3.4 * 10-4932 1.1 * 104932 10

  • 8/18/2019 Cours C Avancé V1

    25/60

    Déclaration des variables simples

    Le syntaxe de la déclaration est :

    ,,...,;

    Qui est équivalent à: ;

    ;

    …….. La déclaration = la réservation des espaces mémoires dans la

    RAM avec la valeur déjà existante dans la RAM (aléatoire)

    int A,a,B;

    char K; entraine la réservation suivante

    25   P   a   r   t

       i   e   1  :   T   y   p   e   s    d   e    b   a   s

       e ,   O   p    é   r   a   t   e   u   r   s   e   t   E   x   p   r   e   s   s   i   o   n   s ,

    Adresse       1       0       0

           1       0       1

           1       0       2

           1       0       3

           1       0       4

           1       0       5

           1       0       6

           1       0       7

           1       0       8

           1       0       9

           1       1       0

           1       1       1

           1       1       2

           1       1       3

           1       1       4

           1       1       5

    Variable A a B K

    Taille 4 4 4 1

    Valeur 3980 439405 453 15

  • 8/18/2019 Cours C Avancé V1

    26/60

    Initialisation des variables

    On utilise l’opérateur = pour l’initialisation :

    type A=1;   type A; A=1;

    type A,B,C; A=B=C=1;   type A=1, B=1, C=1;

    Exemple:

    int A=1,a,B=3;

    char K=‘B’;

    entraine la réservation et l’initialisation suivantes:

    26   P   a   r   t

       i   e   1  :   T   y   p   e   s    d   e    b   a   s

       e ,   O   p    é   r   a   t   e   u   r   s   e   t   E   x   p   r   e   s   s   i   o   n   s ,

    Adresse       1       0       0

           1       0       1

           1       0       2

           1       0       3

           1       0       4

           1       0       5

           1       0       6

           1       0       7

           1       0       8

           1       0       9

           1       1       0

           1       1       1

           1       1       2

           1       1       3

           1       1       4

           1       1       5

    Variable A a B K

    Taille 4 4 4 1

    Valeur 1 439405 3 66

  • 8/18/2019 Cours C Avancé V1

    27/60

    Les opérateurs

    Opérateu rs  logiques

    && et logique (and)|| ou logique (or)

    ! négation logique (not)

    27   P   a   r   t

       i   e   1  :   T   y   p   e   s    d   e    b   a   s   e ,   O   p    é   r   a   t   e   u   r   s   e   t   E   x   p   r   e   s   s   i   o   n   s ,

    Opérateu rs ar it hméti ques 

    + addition

    - soustraction* multiplication

    / division (entière et rationnelle!)

    % modulo (reste d'une div. entière)

    Opérateu rs d e comparaison 

    == égal à

    != différent de

     =

     plus petit que,..

    Les résultats des opérations de comparaison et des opérateurs logiques sont du type int:

    - la valeur 1 correspond à la valeur booléenne vrai

    - la valeur 0 correspond à la valeur booléenne faux

    Les opérateurs logiques considèrent toute valeur différente de zéro comme vrai et zéro

    comme faux:

    32 && 2.3 donne 1

    !65.34 donne 0

    0||!(32 > 12) donne 0

    é l

  • 8/18/2019 Cours C Avancé V1

    28/60

    Opérateurs particuliers Pour Op un opérateur arithmétique et V une variable :

    V = V Op Constante ; 

    VOp=Constante; Exemple : V=V+2 ; V+=2;

    V=V+1 ; V++; ou ++V;

    V=V-1;  V--; ou – V;

     X = V++;  passe d'abord la valeur de V à X et incrémente après

     X = V--;  passe d'abord la valeur de V à X et décrémente après

     X = ++V; incrémente d'abord et passe la valeur incrémentée à X

     X = --V; décrémente d'abord et passe la valeur décrémentée à X 

    Exemple : Supposons que la valeur de N est égal à 5:Incrém. postfixe:  X = N++; donne résultat: N=6 et X=5Incrém. préfixe:  X = ++N; donne résultat: N=6 et X=6

    28   P   a   r   t

       i   e   1  :   T   y   p   e   s    d   e    b   a   s   e ,   O   p    é   r   a   t   e   u   r   s   e   t   E   x   p   r   e   s   s   i   o   n   s ,

    i i é d é

  • 8/18/2019 Cours C Avancé V1

    29/60

    Priorité des opérateurs

    Si nous avons une suite d'opérateurs binaires de lamême classe, l'évaluation se fait en passant de la gauche vers la droite dans l'expression.

    Pour les opérateurs unaires (!,++,--) et pour lesopérateurs d'affectation (=,+=,-=,*=,/=,%=),l'évaluation se fait de droite à gauche dans

    l'expression. 29   P   a   r   t   i   e   1  :   T   y   p   e   s    d   e    b   a   s   e ,   O   p    é   r   a   t   e   u   r   s   e   t

       E   x   p   r   e   s   s   i   o   n   s ,

    Priorité 1 (la plus forte): ()

    Priorité 2: ! ++ --

    Priorité 3: * / %

    Priorité 4: + -

    Priorité 5:  < >=

    Priorité 6: == !=

    Priorité 7: &&

    Priorité 8: ||

    Priorité 9 (la plus faible): = += -= *= /= %=

    i i

  • 8/18/2019 Cours C Avancé V1

    30/60

    Expressions et constructions

    Une expression est une combinaison entre

    variables, constantes, fonctions liés entre eux viades opérateurs.

    Une expression renvoie une valeur.

    Exemple : A=B=C=3 renvoie la valeur 3 Une instruction (ordre) est une expression qui se

    termine par ;

    Exemple :  A=B=C=3; affecte 3 à C après C à Baprès B à A. en résultat A, B,C auront la valeur 3.

    Question: quelle est la valeur de A+(A=B=C=3)

    30   P   a   r   t

       i   e   1  :   T   y   p   e   s    d   e    b   a   s   e ,   O   p    é   r   a   t   e   u   r   s   e   t

       E   x   p   r   e   s   s   i   o   n   s ,

    Pl

  • 8/18/2019 Cours C Avancé V1

    31/60

    Plan Partie 1: Rappels

    ◦ Avant propos,

    ◦ Environnement et compilation,

    ◦ Notions de base,

    ◦ Types de base, Opérateurs et Expressions,

    ◦ Lire et écrire des données,

    ◦ La structure alternative,

    ◦ La structure répétitive,

    Les tableaux,◦ Les chaînes de caractères.

    Partie 2: C avancé

    Partie 3: Graphique avec C 31

  • 8/18/2019 Cours C Avancé V1

    32/60

    Séquences d’échappement & spécificateurs de format

    Les séquences d’échappement sont des caractères (char)

    Les spécificateurs de

     format indiquent la manière

    dont les expressions vont être Affichées sur la console.

    32   P   a   r   t

       i   e   1  :   L   i   r   e   e   t    é   c   r   i   r   e

        d   e   s    d   o   n   n    é   e   s ,

    Séquences d’échappement

    \a sonnerie \\ trait oblique

    \b curseur arrière \? point d'interrogation

    \t tabulation \' apostrophe

    \n nouvelle ligne \" guillemets

    \r retour au début de ligne \f saut de page (imprimante)

    \0 NUL \v tabulateur vertical

    SYMBOLE TYPE IMPRESSION COMME  

    %d ou %i int entier relatif 

    %u int entier naturel (unsigned)

    %o int entier exprimé en octal

    %x int entier exprimé en hexadécimal

    %c int caractère

    %f double rationnel en notation décimale

    %e double rationnel en notation scientifique

    %s char* chaîne de caractères

  • 8/18/2019 Cours C Avancé V1

    33/60

    E i f é

  • 8/18/2019 Cours C Avancé V1

    34/60

    Ecriture formatée Pour les entiers, nous pouvons indiquer la largeur

    minimale de la valeur à afficher. Dans le champ ainsiréservé, les nombres sont justifiés à droite:

    printf("%4d", 123); ==> _123

    Pour les rationnels, nous pouvons indiquer la largeur

    minimale de la valeur à afficher et la précision du

    nombre à afficher. La précision par défaut est fixée à six

    décimales. Les positions décimales sont arrondies à la

    valeur la plus proche.printf("%12f", 100.123);   ==> __100.123000

    printf("%.2f", 100.123);   ==> 100.12

    printf("%5.0f", 100.123);   ==> __10034   P

       a   r   t   i   e   1  :   L   i   r   e   e   t    é   c   r   i   r   e

        d   e   s    d   o   n   n    é   e   s ,

    L t f té

  • 8/18/2019 Cours C Avancé V1

    35/60

    Lecture formatée La fonction scanf() est dans la bibliothèque stdio.h

    Le syntaxe est : scanf("",,, ...) La partie "" contient des signes d’espacement et

    des spécificateurs de format.

    Dans la chaîne de format, les symboles \t, \n, \r ont le même

    effet qu'un simple espace. Si la chaîne de format contient aussi d'autres caractères que

    des signes d'espacement, alors ces symboles doivent êtreintroduits exactement dans l'ordre indiqué.

    scanf retourne comme résultat le nombre de donnéescorrectement reçues.

    Exemple

    int A,B,C;

    C=scanf("%d/%d ",&A,&B); 35   P   a   r   t   i   e   1  :   L   i   r   e   e   t    é   c   r   i   r   e

        d   e   s    d   o   n   n    é   e   s ,

    C A B

    12 14 1 12

    12/14 2 12 14

    12.3/14 1 12

    E it t l t d’ tè

  • 8/18/2019 Cours C Avancé V1

    36/60

    Ecriture et lecture d’un caractère

     putchar(A);   printf("%c",A);

    Exemple :

    Putchar(65);   putchar (‘A’); affiche la lettre A

    getchar(A);  scanf("%c",&A);

    getchar fournit les données seulement après

    confirmation par 'Enter‘.

    La bibliothèque contient une fonction du

    nom getch qui fournit immédiatement le

    prochain caractère entré au clavier sans l’afficher,

    cette fonction peut être utiliser pour lire un mot

    de pass. 36   P   a   r   t   i   e   1  :   L   i   r   e   e   t    é   c   r   i   r   e

        d   e   s    d   o   n   n    é   e   s ,

    Pl

  • 8/18/2019 Cours C Avancé V1

    37/60

    Plan Partie 1: Rappels

    ◦ Avant propos,

    ◦ Environnement et compilation,

    ◦ Notions de base,

    ◦ Types de base, Opérateurs et Expressions,

    ◦ Lire et écrire des données,

    ◦ La structure conditionnelle,

    ◦ La structure répétitive,

    Les tableaux,◦ Les chaînes de caractères.

    Partie 2: C avancé

    Partie 3: Graphique avec C 37

    If l

  • 8/18/2019 Cours C Avancé V1

    38/60

    If-elseif ( )

    Dans ce cas deux scénarios possibles:

    Si l' fournit une valeur différente de zéro alors le

  • 8/18/2019 Cours C Avancé V1

    39/60

    If sans else

    if ( )

  • 8/18/2019 Cours C Avancé V1

    40/60

    If - else if - elseif ( )

    else if ()

    …….  

    else if ()

    else

    Dans ce cas on aura N+1 scénarios possibles:

    Les expressions ... sont évaluées du haut vers lebas jusqu'à ce que l'une d'elles soit différente de zéro. Le blocd'instructions y lié est alors exécuté et le traitement de lacommande est terminé.

    Le blocs d’instructions peut être vide (;), une seule instruction, ouplusieurs instructions délimiter par des accolades {}

    La dernière partie else traite le cas où aucune des conditions n'aété remplie. Il est optionnelle. 40   P   a   r

       t   i   e   1  :   S   t   r   u   c   t   u   r   e   c   o

       n    d   i   t   i   o   n   n   e    l    l   e ,

    if ( )

    else {  if ()

    …….

    else { if ()

    else

     }

     }

    Les opérate rs conditionnels

  • 8/18/2019 Cours C Avancé V1

    41/60

    Les opérateurs conditionnels ? :

    Si fournit une valeur différente de zéro,alors la valeur de est fournie comme résultat.Si fournit la valeur zéro, alors la valeur de

    est fournie comme résultat Exemple:

    if (a > b)max = a;   max=(a>b)?a:b;  (a>b)?(max=a):(max=b);

    else

    max = b;41   P

       a   r   t   i   e   1  :   S   t   r   u   c   t   u   r   e   c   o

       n    d   i   t   i   o   n   n   e    l    l   e ,

    Plan

  • 8/18/2019 Cours C Avancé V1

    42/60

    Plan Partie 1: Rappels

    ◦ Avant propos,

    ◦ Environnement et compilation,

    ◦ Notions de base,

    ◦ Types de base, Opérateurs et Expressions,

    ◦ Lire et écrire des données,

    ◦ La structure conditionnelle,

    ◦ La structure répétitive (les boucles),

    Les tableaux,◦ Les chaînes de caractères.

    Partie 2: C avancé

    Partie 3: Graphique avec C 42

    while

  • 8/18/2019 Cours C Avancé V1

    43/60

    whilewhile ( )

    est exécuté zéro ou plusieurs fois.

    Exemple:

    int  j,m,a;

     printf ("donner la date sous la forme jj/mm/aaaa:\n");while(3!=scanf("%d/%d/%d",&j,&m,&a));

     printf("la date est %d/%d/%d",j,m,a);◦ Dans cet exemple le bloc de while est vide (;)

    ◦ Ce programme va relire la date jusqu’à ce que la date sera

    entrée sous la forme j/m/a 43   P   a   r   t   i   e   1  :   S   t   r   u   c   t   u   r   e   r    é   p    é   t   i   t   i   v   e    (    l   e   s    b   o   u   c    l   e   s    ) ,

    do while

  • 8/18/2019 Cours C Avancé V1

    44/60

    do-whiledo

    while ( ); 

    while ( ) est exécuté au moins une fois et aussi longtempsque l' fournit une valeur différente de zéro.

    Exemple: float N;

    do {

     printf("Introduisez un nombre entre 1 et 10 :");

    scanf("%f", &N); }

    while (N10);

    44   P   a   r   t   i   e   1  :   S   t   r   u   c   t   u   r   e   r    é

       p    é   t   i   t   i   v   e    (    l   e   s    b   o   u   c    l   e   s    ) ,

    for

  • 8/18/2019 Cours C Avancé V1

    45/60

     for 

     for ( ; ; )

    puis

    expr3; après on revérifier expr2 et on continue de cette

    même manière (boucle).◦ sinon on sort de la boucle.

    expr1 et expr3 peuvent être plusieursexpression séparées par, ou vide.

    45   P   a   r   t   i   e   1  :   S   t   r   u   c   t   u   r   e   r    é

       p    é   t   i   t   i   v   e    (    l   e   s    b   o   u   c    l   e   s    ) ,

    ;

    while ( ){

  • 8/18/2019 Cours C Avancé V1

    46/60

     for 

    46   P   a   r   t   i   e   1  :   S   t   r   u   c   t   u   r   e   r    é

       p    é   t   i   t   i   v   e    (    l   e   s    b   o   u   c    l   e   s    ) ,

     for ( ; ; )

    On peut faire entrer le bloc d’instruction dans for, ainsi ce bloc sera remplacer par vide (;)

     for (; ;

    ;

     }

    Plan

  • 8/18/2019 Cours C Avancé V1

    47/60

    Plan Partie 1: Rappels

    ◦ Avant propos,

    ◦ Environnement et compilation,

    ◦ Notions de base,

    ◦ Types de base, Opérateurs et Expressions,

    ◦ Lire et écrire des données,

    ◦ La structure conditionnelle,

    ◦ La structure répétitive (les boucles),

    Les tableaux,◦ Les chaînes de caractères.

    Partie 2: C avancé

    Partie 3: Graphique avec C 47

    Vecteur: déclaration et mémorisation

  • 8/18/2019 Cours C Avancé V1

    48/60

    Vecteur: déclaration et mémorisation

    Déclaration : [];

    Déclaration => réservation de espaces mémoire dans laRAM (valeurs aléatoire) avec sizeof(Type) Octets/espace.

    Le vecteur occupe *sizeof(Type) octets en total

    Exemple: int A[4]; => réservation de 4 espaces mémoire(4octets/espace)

    le nom d'un vecteur est le représentant de l'adresse du premierélément du vecteur : A=&A[0]=&A (égalité de valeur et non de type).

    Les adresses des autres composantes sont calculées(automatiquement) relativement à cette adresse(&A[i]=&A[0]+i*sizeof(type))

    48   P   a   r   t   i   e   1  :   L   e   s   t   a    b    l   e   a   u   x

     ,

    Adresse       1       0       0

           1       0       1

           1       0       2

           1       0       3

           1       0       4

           1       0       5

           1       0       6

           1       0       7

           1       0       8

           1       0       9

           1       1       0

           1       1       1

           1       1       2

           1       1       3

           1       1       4

           1       1       5

    Variable A[0] A[1] A[2] A[3]

    Taille 4 4 4 4

    Valeur 1 439405 3 66

  • 8/18/2019 Cours C Avancé V1

    49/60

    Vecteur: Affichage et affectation

  • 8/18/2019 Cours C Avancé V1

    50/60

    Vecteur: Affichage et affectation

    On peut utiliser la boucle for pour l’affichage etl’affectation.

    Exemple : int i,A[4];

     //l’affectation

     for(i=0;i

  • 8/18/2019 Cours C Avancé V1

    51/60

    Matrice: déclaration et mémorisation

    Une matrice(N,M) et un vecteur(N*M)

    Déclaration : [] [];

    Déclaration => réservation de * espaces mémoiredans la RAM (valeurs aléatoire) avec sizeof(Type) octets /espace

    La matrice occupe **sizeof(Type) octets en total

    Exemple: int A[2][2]; => réservation de 4 espaces mémoire (4octets/espace)

    le nom d'une matrice est le représentant de l'adresse du premier élément de lamatrice A=&A[0]=&A[0][0]=&A (égalité de valeur et non de type).

    A[i] représentant de l'adresse du premier élément de la ième ligne : A[i]=&A[i][0] (égalité de valeur et non de type).

    Les adresses des autres composantes sont calculées (automatiquement)relativement à la première adresse :(&A[i][j]=&A[0][0]+(i*NbrColonnes+j)sizeof(type))

     A

    51   P   a   r   t   i   e   1  :   L   e   s   t   a    b    l   e   a   u   x ,

    Adresse       1       0       0

           1       0       1

           1       0       2

           1       0       3

           1       0       4

           1       0       5

           1       0       6

           1       0       7

           1       0       8

           1       0       9

           1       1       0

           1       1       1

           1       1       2

           1       1       3

           1       1       4

           1       1       5

    Variable A[0][0] A[0][1] A[1][0] A[1][1]

    Taille 4 4 4 4

    Valeur 1 439405 3 66

    Matrice: Initialisation et réservation automatique

  • 8/18/2019 Cours C Avancé V1

    52/60

    Matrice: Initialisation et réservation automatique

    initialisation : A*N+*M+= val0,0,…… val0,n0-,

    …….,

    { valN-1,0,…… valN-1,nN-1} } ;

    ni

  • 8/18/2019 Cours C Avancé V1

    53/60

    Matrice: Affichage et affectation

    On peut utiliser la boucle for pour l’affichage et l’affectation.

    Exemple : int i,j,A[2][2];

     //l’affectation

     for(i=0;i

  • 8/18/2019 Cours C Avancé V1

    54/60

    déclaration et mémorisation

  • 8/18/2019 Cours C Avancé V1

    55/60

    déclaration et mémorisation Une chaîne de caractères et un tableau de type char

    Déclaration : char [];

    Déclaration => réservation de espaces mémoiredans la RAM (valeurs aléatoire) avec sizeof(char) octets /espace

    La chaîne de caractère occupe *sizeof(char) octetsen total

    Exemple: char ch[10]; => réservation de 10 espaces mémoire

    (1octet/espace) le nom de la chaîne est le représentant de l'adresse du premier élément dela chaîne ch=&ch[0]=&ch (égalité de valeur et non de type).

    Les adresses des autres composantes sont calculées(automatiquement) relativement à la première adresse :

    &ch[i]=&ch[0]+i*NbrCaractères*sizeof(char)

     A

    55   P   a   r   t   i   e   1  :   L   e   s   c    h   a    î   n   e   s

        d   e   c   a   r   a   c   t    è   r   e   s ,

    Adresse       1       0       0

           1       0       1

           1       0       2

           1       0       3

           1       0       4

           1       0       5

           1       0       6

           1       0       7

           1       0       8

           1       0       9

    Variable ch[0] ch[1] ch[2] ch[3] ch[4] ch[5] ch[6] ch[7] ch[8] ch[9]

    Taille 1 1 1 1 1 1 1 1 1 1

    Valeur 65 80 40 60 20 11 16 15 15 11

    Chaîne de caractères constante et initialisation

  • 8/18/2019 Cours C Avancé V1

    56/60

    Chaîne de caractères constante et initialisation

    Les chaînes de caractères constantes sont indiquées entreguillemets. La chaîne de caractères vide est alors: ""

    Dans les chaînes de caractères, nous pouvons utiliser toutes lesséquences d'échappement définies comme caractères constants (\n\t \’ \" \\....)

    Une chaîne de caractère constante se termine AUTOMATIQUEMENTpar le caractère \0 (la valeur 0) , alors la chaîne "hello" occupe 6 octets

    Plusieurs chaînes de caractères constantes qui sont séparées par dessignes d'espacement (espaces, tabulateurs ou interlignes) dans le textedu programme seront réunies en une seule chaîne constante lors de lacompilation: "un " "deux "

    "trois"   "un deux trois" 

    Initialisation: char ch*10+=‘h’,’e’,’l’,’l’,’o’- ; 

    char ch[10]="hello";

     A

    56   P   a   r   t   i   e   1  :   L   e   s   c    h   a    î   n   e   s

        d   e   c   a   r   a   c   t    è   r   e   s ,

    Adresse       1       0       0

           1       0       1

           1       0       2

           1       0       3

           1       0       4

           1       0       5

           1       0       6

           1       0       7

           1       0       8

           1       0       9

    Variable ch[0] ch[1] ch[2] ch[3] ch[4] ch[5] ch[6] ch[7] ch[8] ch[9]

    Taille 1 1 1 1 1 1 1 1 1 1

    Valeur 104 101 108 108 111 0 0 0 0 0

    Précédence alphabétique et lexicographique

  • 8/18/2019 Cours C Avancé V1

    57/60

    Précédence alphabétique et lexicographique

    La précédence des caractères dans l'alphabet d'une machineest dépendante du code de caractères utilisé. Pour le code

    ASCII, nous pouvons constater l'ordre suivant: . . . ,0,1,2, ... ,9, . . . ,A,B,C, ... ,Z, . . . ,a,b,c, ... ,z, . . .

    La chaîne vide "" précède lexicographiquement toutes lesautres chaînes.

    La chaîne A = "a1a2a ... ap" (p caractères) précède

    lexicographiquement la chaîne B = "b1b2 ... bm" (m caractères)si l'une des deux conditions suivantes est remplie:

    1) 'a1' < 'b1' 

    2) 'a1' = 'b1' et "a2a3 ... ap" précède lexicographiquement"b2b3 ... bm" 

    Exemple:◦ "ABC" précède "BCD"  car 'A'

  • 8/18/2019 Cours C Avancé V1

    58/60

    Lire et écrire une chaîne de caractère (stdio.h)

     printf avec le spécificateur de format %s permet d'intégrer une chaîne decaractères dans une phrase. En plus, le spécificateur %s permet l'indication dela largeur minimale du champ d'affichage. Dans ce champ, les données sont justifiées à droite. Si on indique une largeur minimale négative, la chaîne sera justifiée à gauche. Un nombre suivant un point indique la largeur maximalepour l'affichage:

    Exemple : char ch[] = "hello, world";

     printf(":%s:", ch); -> :hello, world: printf(":%5s:", ch); -> :hello, world: printf(":%15s:", ch); -> : hello, world: printf(":%-15s:", ch); -> :hello, world : printf(":%.5s:", ch); -> :hello:

    La fonction puts sert à écrire une chaîne constante ou le contenu d'une variabledans une ligne isolée:  puts(ch)    printf("%s\n",ch);

    scanf avec le spécificateur %s permet de lire un mot isolé à l'intérieur d'une suitede données du même ou d'un autre type. Le paramètre concernant %s est sans &

    Exemple : int J,M,A; char ch[10]; scanf("%s %d %d %d",ch,&J,&M,&A);

    La fonction gets sert à lire une ou plusieurs lignes de texte (p.ex. des phrases)terminées par un retour à la ligne

    58   P   a   r

       t   i   e   1  :   L   e   s   c    h   a    î   n   e   s

        d   e   c   a   r   a   c   t    è   r   e   s ,

    Travailler avec les chaînes de caractères

  • 8/18/2019 Cours C Avancé V1

    59/60

    59   P   a   r

       t   i   e   1  :   L   e   s   c    h   a    î   n   e   s

        d   e   c   a   r   a   c   t    è   r   e   s ,

    b Fonction Effet

       s   t   r   i   n   g .    h

    strlen() fournit la longueur de la chaîne sans compter le '\0' final

       D   a   n   s    l   e   t   a    b    l   e   a   u   s   u   i   v   a   n   t ,   <   n   >   r   e   p   r    é   s   e   n   t   e   u   n   n

       o   m    b   r   e    d   u   t   y   p   e   i   n   t .   L   e   s

       s   y   m

        b   o    l   e   s   <   s   >   e   t   <   t   >   p   e   u

       v   e   n   t    ê   t   r   e   r   e   m   p    l   a   c    é   s

       p   a   r  :   u   n   e   c    h   a    î   n   e    d   e

       c   a   r

       a   c   t    è   r   e   s   c   o   n   s   t   a   n   t   e ,    l   e

       n   o   m     d

        '   u   n   e   v   a   r   i   a    b    l   e    d    é   c    l   a   r    é   e   c   o   m   m   e   t   a    b    l   e   a   u

        d   e

       c    h   a   r   o   u   u   n   p   o   i   n   t   e   u   r   s   u   r   c    h   a   r .   E   t   <   c   >   u   n   c   a

       r   a   c   t    è   r   e    (   c    h   a   r   o   u   i   n   t    )

    strcpy(, ) copie vers

    strcat(, ) ajoute à la fin de

    strcmp(, ) compare et lexicographiquement ( - )

    strncpy(, , ) copie au plus caractères de vers

    strncat(, , ) ajoute au plus caractères de à la fin de

       S   t    d    l   i    b

     .    hatoi() retourne la valeur numérique représentée par comme int

    atol() retourne la valeur numérique représentée par comme long

    atof() retourne la valeur numérique représentée par en double

       c   t   y   p   e .    h

    isupper() si est une majuscule ('A'...'Z')

    islower() si est une minuscule ('a'...'z')

    isdigit() si est un chiffre décimal ('0'...'9')

    isalpha() si islower() ou isupper()

    isalnum() si isalpha() ou isdigit()

    isxdigit() si est un chiffre hexadécimal ('0'...'9' ou 'A'...'F' ou 'a'...'f')

    isspace() si est un signe d'espacement (' ', '\t', '\n', '\r', '\f')

    tolower() retourne converti en minuscule si est une majuscule

    toupper() retourne converti en majuscule si est une minuscule

    Tableau de chaînes de caractères

  • 8/18/2019 Cours C Avancé V1

    60/60

    Tableau de chaînes de caractères

    Un tableau de chaînes de caractère est une matrice detype char, chaque ligne de cette matrice est une chaîne

    de caractères. Exemple: char Jour[7][10] => réservation de 70 espaces

    mémoire (1octet/espace)

    On peut initialiser lors de la déclaration:

    char Jour[7][10] ={"Lundi", "Mardi", "Mercredi", "Jeudi","Vendredi", "Samedi", "Dimanche"};

    Jour*i+ indique l’adresse de la ième chaîne de caractères:

     printf("  Ajourd’hui est %s",Jour[2]);

    affichera Aujourd’hui est Mercredi  Jour[i][j] indique le jème caractère dans la ième chaîne:

     printf("%c %c %c",Jour[0][1], Jour[0][2], Jour[3][0]);

    affichera u n J   e   1  :   L   e   s   c    h   a    î   n   e   s

        d   e   c   a   r   a   c   t    è   r   e   s ,