Cours 3.9. Opérateur d'incrémentation/décrémentation

En C, nous utilisons des boucles pour répéter des blocs d'instructions. Dans ces boucles, il y a fréquemment un indice (ou index) qui compte le nombre de fois que la boucle s'est exécutée. À chaque passage dans la boucle, cet indice est incrémenté, c'est à dire qu'on lui ajoute 1. Nous pourrions écrire une instruction du type :

i = i + 1;

ou encore :

i += 1;

Cette opération est tellement fréquente, que les concepteurs du C lui ont attribué des opérateurs spécialement dédiés :

Opérateur Nom Exemple Equivalent
i++ post-incrémentation a = i++; a=i; i=i+1;
i-- post-décrémentation a = i--; a=i; i=i-1;
++i pré-incrémentation a = ++i; i=i+1; a=i;
--i pré-décrémentation a = --i; i=i-1; a=i;

Dans le cas des post-incrémentations, l'incrémentation est réalisée après l'instruction. À l'inverse, dans le cas d'une pré-incrémentation, l'incrément est réalisé en premier. Cette nuance est primordiale, car elle change le résultat des instructions.

Post-incrémentation

Considérons l'exemple suivant d'une post-incrémentation :

int a = 5, x;
x = 2 * a++;

Dans le cas de la post-incrémenation (a++), l'incrément sera fait à la fin, après la multiplication (*) et l'affectation (=). Voici les instructions équivalentes :

// Multiplication
x = 2 * a;
// Post-incrémentation
a = a + 1;

Après l'exécution des instructions, x vaut 10 et a vaut 6 :

Pré-incrémentation

Reprenons l'exemple précédent, en le modifiant avec une pré-incrémentation :

int a = 5, x;
x = 2 * ++a;

Dans le cas de la pré-incrémentation, (++a) l'incrément se fait en premier, avant la multiplication (*) et l'affectation (=). Voici les instructions équivalentes :

// Pré-incrémentation
a = a + 1;
// MUltiplication
x = 2 * a;

Après l'exécution des instructions, x vaut 12 et a vaut 6 :

Exercice 1

Dans le code suivant, fusionnez les deux opérations sur une seule ligne avec un opérateur d'incrémentation :

short x, a=-6;

// UTILISER LES OPERATEURS D'INCREMENTATION
a = a + 1;
x = 16 + a;

printf ("x = %d\n", x);
printf ("a = %d\n", a);

Exercice 2

Dans le code suivant, fusionnez les deux opérations sur une seule ligne avec un opérateur d'incrémentation :

short x, a=-6;

// UTILISER LES OPERATEURS D'INCREMENTATION
x = 16 + a;
a = a + 1;

printf ("x = %d\n", x);
printf ("a = %d\n", a);

Exercice 3

Dans le code suivant, fusionnez les trois opérations sur une seule ligne avec des opérateurs d'incrémentation :

short x, a=0, b=2;

// UTILISER LES OPERATEURS D'INCREMENTATION
a = a + 1;
x = a + b;
b = b - 1;

printf ("a = %d\n", a);
printf ("b = %d\n", b);
printf ("x = %d\n", x);

Quiz

Quels sont les opérateurs d'incrémentation ?

Vérifier Bravo ! En informatique, incrémenation signifie que l'on ajoute 1. Essaie encore ...

Quel est l'opérateur de prè-décrémentation ?

Vérifier Bravo ! L'opérateur de pré-décrémentation est --i. Essaie encore ...

Quelle est l'instruction équivalente à x = x + 1; ?

Vérifier Bravo ! x++ affecte déjà le résultat dans la variable x, inutile d'écrire x = x++; Essaie encore ...

Fusionnez ces deux instructions en une seule :

a = a + 1;
x = a % b;
Vérifier Bravo ! L'incrémenation de a est avant, c'est donc une pré-incrémenation. Essaie encore ...

Fusionnez ces deux instructions en une seule :

x = a * b;
a = a - 1;
Vérifier Bravo ! La décrémentation de a est à la fin, il s'agit ici d'une post-décrémentation. Essaie encore ...

Fusionnez ces deux instructions en une seule :

x = a * 2;
a = a + 2;
Vérifier Bravo ! +2 n'est plus une incrémentation. Il faut utiliser deux instructions. Essaie encore ...

Fusionnez ces instructions en une seule :

x1 = x1 - 1;
x = x1 + x2;
x2 = x2 + 1;
x = x + x3;
x3 = x3 - 1;
Vérifier Bravo ! Si ce n'est pas claire, transformez le code ligne par ligne sur une feuille. Essaie encore ...

Voir aussi


Dernière mise à jour : 13/10/2021