Rappel de C - les blocs

par Tom
le 08/01/2020

Sommaire


Temps de lecture estimé : 30min


Conditions

Comme dit dans la page principale, le C ne possède pas de type booléen, ainsi les conditions sont gérées de manière naïve :

  • la valeur nulle (0) est "fausse"
  • toute autre valeur est "vraie"

Bloc conditionnel

Permet de vérifier qu'une condition est vraie avant d'exécuter du code.

Se note if...else if...else. Les deux derniers sont optionnels.

Exemple :

if (x == 2) 
{
    puts("x est effectivement égal à 2");
}
else 
{
    puts("x est différent de 2");
}

Autre exemple :

if (choix == 1) 
{
    puts("Premier choix");
}
else if (choix == 2) 
{
    puts("Deuxième choix");
}
else if (choix == 3) 
{
    puts("Troisième choix");
}
else 
{
    puts("Attention ! Le choix doit être entre 1 et 3");
}

Blocs itératifs

Bloc while (tant que)

La boucle itère tant que la condition est vraie.

while (condition) 
{
    ...
}
Bloc do..while (répéter .. tant que)

La boucle itère tant que la condition est vraie, mais contrairement au while elle s'exécute au moins une fois avant de vérifier la condition.

do 
{
    ...
} while (condition); // ne pas oublier le ;
Bloc for(...; ...; ...)
for (A; B; C) {
    ...
}

est équivalent à :

A;

while (B) {
    ...

    C;
}

Usage le plus courant : faire varier un nombre. Exemple :

for (int i = 0; i < 10; i++) 
{
    ...
}

i va varier de 0 à 9 (car on a écrit < 10 et pas <= 10).

Mots-clés de boucles

Deux mots-clés spécifiques peuvent être utilisés dans les boucles.

Le mot-clé break permet de sortir prématurément d'une boucle.

// parcourt le tableau et s'arrête dès qu'un des nombres est supérieur à 5.
#define NB 10

int nombres[NB] = { 4, 1, 2, 1, 8, 5, -2, -4, -9, 6 };
int somme = 0;

for (int i = 0; i < NB; i++) 
{
    if (nombres[i] > 5) 
    {
        break;   
    }

    somme += nombres[i];
}

// somme vaut 4+1+2+1 = 8

Le mot-clé continue permet de sauter l'itération actuelle prématurément.

// va parcourir le tableau, et ignorera tous les nombres négatifs.
int resultat = 0;
for (int i = 0; i < NB; i++)  
{
    if (nombres[i] < 0) 
    {
        continue;
    }

    resultat += 5;
    resultat *= nombres[i];
    resultat += 1;
}

// resultat vaut 18457

Note : si vous utilisez le mot-clé return dans une boucle, celui-ci stoppera net l'exécution de la boucle. Exemple :

/**
 * Renvoie le premier nombre pair de la liste.
 * Si aucun nombre pair n'est trouvé, renvoie -1.
 */
int premierNombrePair(int nombres[NB]) 
{
    for (int i = 0; i < NB; i++)  
    {
        if (nombres[i] % 2 == 0) 
        {
            return nombres[i];
        }
    }

    return -1;
}

Structure et union

Structure

Il arrive parfois qu'on ait besoin de regrouper des données, comme par exemple un point dans un repère cartésien (X, Y), ou une fiche d'informations (Nom, Prénom, Âge), etc.

En C, on réalise cela avec des structures. Une structure est tout simplement une suite de variables qui sont regroupées ensemble.

Exemples :

typedef struct
{
    float x;
    float y;
} PointCartesien;

typedef struct
{
    char Prenom[30]; // prénom = maximum 29 caractères (+ terminateur de chaîne)
    char Nom[30];
    int Age;
} FicheInformation;