par
a++;
Mais il faut bien saisir la différence entre les deux. =est une instruction (l’affectation). ++ est un
opérateur. Donc, si la première version est bien une instruction, la seconde version est une expression
comprise comme une instruction.
++ est très particulier. C’est un opérateur, mais en même temps il modifie la variable sur laquelle
il agit. C’est le seul opérateur à faire cela.
Question 1
++ existe en deux versions : pré-incrémentation, comme dans ++a, et post-incrémentation, comme
dans a++. Quelle est la différence entre les deux? Considérez le fragment de programme suivant :
int a,b;
b=10;
a= ++b*10;
Quelles sont les valeurs de aet baprès exécution ? Même question pour
int a,b;
b=10;
a=b++*10;
Correction
Dans le premier cas, bvaut 11 et avaut 110. Pourquoi? La première affectation initialise bà 10.
La seconde affectation se passe de la façon suivante :
— évaluation de ++b :bvaut maintenant 11.
— évaluation de la multiplication : comme bvaut 11 on obtient 110.
Dans le second cas , bvaut 11 et avaut 100. Pourquoi? La première affectation initialise bà 10.
La seconde affectation se passe de la façon suivante :
— La multiplication est évaluée avec la valeur actuelle de b, soit 10, et le résultat est donc 100.
—b++ est effectué, bvaut maintenant 11.
Ce qu’il faut retenir :
— La post-incrémentation (b++) renvoie la valaur de bà l’expression englobante, puis l’incrémen-
tation est effectuée.
— La pré-incrémentation (++b) effectue l’incrémentation, plus renvoie la valeur de bà l’expression
englobante.
Question 2
++ est un opérateur qui peut s’avérer assez farceur, voire dangereux. Quelles sont l’affichage et les
valeurs des différentes variables des fragments de programmes ci-dessous après exécution ?
int a=10,
b=20;
if ((a<5) && (b++<30))
System.out.println("vrai");
else
System.out.println("faux");
3
int a=1,
b=20;
if ((a<5) && (b++<30))
System.out.println("vrai");
else
System.out.println("faux");
Ce qu’il faut retenir de tout ça, c’est qu’il faut à tout prix éviter de d’utiliser les opérateurs
d’incrémentation et décrémentation dans des conditions, et dans des expressions en général. Il vaut
mieux les employer seuls.
Correction
Il faut se rappeler que les opérateurs || et && ont une propriété dite de court-circuit. Pour ce
qui concerne le &&, cette propriété dit que si la première opérande est évaluée à false, la seconde
opérande n’est pas évaluée puisque le && ne pourra jamais être vrai.
La conséquence de cette propriété est que, dans le cas qui nous occupe, bvaudra 20 à l’issue de
l’exécution du premier fragment, car la seconde opérande du && n’est pas exécutée. En revanche, b
vaudra 21 à l’issue de l’exécution du second fragment.
Exercice 4 : boucle for et affichage
Question 1 : boucle for
Écrire un algorithme — puis un programme utilisant la boucle for — qui demande un nombre
entier, puis calcule la somme des entiers jusqu’à ce nombre.
Question 2 : affichage complexe
Modifiez le programme précédent pour qu’il affiche la somme. Exemple de déroulement du pro-
gramme :
Saisissez un nombre : 6
1+2+3+4+5+6=21
Exercice 5 : boucle for et dépassement de capacité
Écrire un programme qui calcule la factorielle d’un nombre entier positif ou nul (n! = n×(n−
1) ×. . . ×1). Que se passe-t-il en cas de dépassement de capacité ?
correction
source java disponible en dehors de ce document.
Exercice 6 : calcul de PGCD
En considérant deux nombres entiers positifs stockés dans deux variables aet b, écrire un pro-
gramme calculant le PGCD de aet b.
Utilisez l’algorithe d’Euclides qui dit que :
pgcb(a, b) = (asi b= 0
pgcd(b, amodb)sinon
4