Programmation C++/Les structures de contrôles
Un livre de Wikibooks.
Sections |
[modifier] Le if
Cette structure de contrôle permet d'exécuter une instruction ou une suite d'instructions seulement si une condition est vraie.
[modifier] Syntaxe :
if (condition) instruction
[modifier] Sémantique :
On évalue la condition :
- si elle est vraie on exécute l’instruction et on passe à l ’instruction suivante.
- si elle est fausse on passe directement à l ’instruction suivante.
L’instruction peut être remplacée par une suite d ’instructions entre accolades.
[modifier] Exemple :
#include <iostream> using namespace std; int main() { int a; cout << "Tapez la valeur de a : "; cin >> a; if (a > 10) cout << "a est plus grand que 10" << endl; cout << "Le programme est fini" << endl; return 0; }
Ce programme demande à l'utilisateur de taper un entier a. Si a est strictement plus grand que 10, il affiche "a est plus grand que 10". Dans le cas contraire, il n'affiche rien.
[modifier] Exécution 1
Tapez la valeur de a : 12 a est plus grand que 10
[modifier] Exécution 2
Tapez la valeur de a : 8
[modifier] Le if...else
Cette structure de contrôle permet d'exécuter une instruction si une condition est vraire, ou une autre instruction si elle est fausse.
[modifier] Syntaxe
if (condition) instruction1; else instruction2;
[modifier] Sémantique
On évalue la condition :
- si elle est vraie, on exécute l'instruction1 et on passe à l'instruction suivante
- si elle est fausse, on exécute l'instruction2 et on passe à l'instruction suivante
L'instruction1 ou l'instruction2 peuvent être remplacées par une suite d'instructions entre accolades.
[modifier] Exemple :
#include <iostream> using namespace std; int main() { int a; cout << "Tapez la valeur de a : "; cin >> a; if (a > 10) cout << "a est plus grand que 10" << endl; else cout << "a est plus inférieur ou égal à 10" << endl; return 0; }
Ce programme demande à l'utilisateur de taper un entier a. Si a est strictement plus grand que 10, il affiche "a est plus grand que 10". Dans le cas contraire, il affiche "a est plus inférieur ou égal à 10".
[modifier] Exécution 1
Tapez la valeur de a : 12 a est plus grand que 10
[modifier] Exécution 2
Tapez la valeur de a : 8 a est plus inférieur ou égal à 10
[modifier] Le switch
L'instruction switch permet de tester plusieurs valeurs pour une expression.
[modifier] Syntaxe
switch(expression)
{
case constante1: instruction1;
case constante2: instruction2;
...
default: instruction;
}
[modifier] Sémantique
On teste la valeur de l'expression spécifiée. On la compare successivement aux constantes constante1, constante2, etc.
Si la valeur de l'expression correspond à l'une des constantes, l'exécution débute à l'instruction correspondante. Si aucune constante ne correspond, l'exécution débute à l'instruction correspondant à default:. L'exécution se termine à l'accolade fermante du switch ou avant si l'instruction break; est utilisée.
En général, l'instruction break sépare les différents cas. Il n'est pas utilisé quand plusieurs cas sont traités par les même instructions.
[modifier] Exemple 1
#include <iostream> using namespace std; int main() { int a; cout << "Tapez la valeur de a : "; cin >> a; switch(a) { case 1 : cout << "a vaut 1" << endl; break; case 2 : cout << "a vaut 2" << endl; break; case 3 : cout << "a vaut 3" << endl; break; default : cout << "a ne vaut ni 1, ni 2, ni 3" << endl; break; } return 0; }
Ce programme demande à l'utilisateur de taper une valeur entière et la stocke dans la variable a. On teste ensuite la valeur de a : en fonction de cette valeur on affiche respectivement les messages "a vaut 1", "a vaut 2", "a vaut 3", ou "a ne vaut ni 1, ni 2, ni 3".
Exécution 1 :
Tapez la valeur de a : 1 a vaut 1
Exécution 2 :
Tapez la valeur de a : 2 a vaut 2
Exécution 3 :
Tapez la valeur de a : 3 a vaut 3
Exécution 4 :
Tapez la valeur de a : 11 a vaut ne vaut ni 1, ni 2, ni 3
[modifier] Exemple 2
#include <iostream> using namespace std; int main() { int a; cout << "Tapez la valeur de a : "; cin >> a; switch(a) { case 1 : cout << "a vaut 1" << endl; break; case 2 : case 4 : cout << "a vaut 2 ou 4" << endl; break; case 3 : case 7 : case 8 : cout << "a vaut 3, 7 ou 8" << endl; break; default : cout << "valeur autre" << endl; break; } return 0; }
Ce programme demande à l'utilisateur de taper une valeur entière et la stocke dans la variable a. On teste ensuite la valeur de a : en fonction de cette valeur on affiche respectivement les messages "a vaut 1", "a vaut 2 ou 4", "a vaut 3, 7 ou 8", ou "valeur autre".
Exécution 1 :
Tapez la valeur de a : 1 a vaut 1
Exécution 2 :
Tapez la valeur de a : 4 a vaut 2 ou 4
Exécution 3 :
Tapez la valeur de a : 7 a vaut 3, 7 ou 8
Exécution 4 :
Tapez la valeur de a : 11 valeur autre
L'instruction switch de cet exemple regroupe le traitement des valeurs 2 et 4, et des valeurs 3, 7 et 8.
[modifier] Le for
Le for est une structure de contrôle qui permet de répéter un certain nombre de fois une partie d'un programme.
[modifier] Syntaxe
for(instruction1 ; condition ; instruction2)
instruction3;
[modifier] Sémantique
- on exécute l'instruction1.
- On teste la condition :
- si elle est vraie, on exécute l'instruction3, puis l'instruction2 puis on revient au 2.
- si elle est fausse, la boucle est terminée et on passe à l'instruction suivante.
- L'instruction3 peut être une suite d'instructions entre accolades.
[modifier] Exemple
#include <iostream> using namespace std; int main() { int i; for(i=0 ; i<10 ; i++) cout << "BONJOUR" << endl; return 0; }
[modifier] Boucle infinie
Quand aucune condition n'est spécifiée, celle-ci vaut true par défaut, ce qui créé donc une boucle infinie. Une boucle infinie est parfois nécessaire quand on ne connait pas l'instant où la boucle doit être arrêtée, et que la condition d'arrêt est évaluée au cœur de la boucle (gestion de messages, écoute de connexions réseau, ...).
for(;;) { // ... }
[modifier] Le while
[modifier] Syntaxe
while (condition) instruction;
[modifier] Sémantique
On teste la condition :
- si elle est vraie, on exécute l'instruction et on recommence.
- si elle est fausse, la boucle est terminée, on passe à l'instruction suivante.
L'instruction peut être une suite d'instructions entre accolades.
[modifier] Exemple de programme
#include <iostream> using namespace std; int main() { int i=0; while (i<10) { cout << "La valeur de i est : " << i << endl; i++; } cout << "La valeur finale de i est : " << i << endl; return 0; }
[modifier] Exécution
La valeur de i est : 0 La valeur de i est : 1 La valeur de i est : 2 La valeur de i est : 3 La valeur de i est : 4 La valeur de i est : 5 La valeur de i est : 6 La valeur de i est : 7 La valeur de i est : 8 La valeur de i est : 9 La valeur finale de i est : 10
[modifier] Explications
La variable i est initialisée à 0.
A chaque étape, à la fin du corps du while, on incrémente i de 1.
On exécute donc le corps du while la première fois avec i valant 0, la dernière fois avec i valant 9.
Lorsqu’on sort du while i vaut 10.
[modifier] Le do ... while
[modifier] Syntaxe
do { ...instructions... } while( condition );
[modifier] Sémantique
- on exécute les instructions ;
- on évalue la condition ;
- si elle est vraie, on recommence au 1 ;
- si elle est fausse, la boucle est terminée, on passe à l ’instruction suivante.
[modifier] Exemple
#include <iostream> using namesapce std; int main() { int i=0; do { cout << "La valeur de i vaut : " << i << endl; i=i+1; } while (i<10); cout << "La valeur finale de i est " << i << endl; return 0; }
Exécution :
La valeur de i vaut : 0 La valeur de i vaut : 1 La valeur de i vaut : 2 La valeur de i vaut : 3 La valeur de i vaut : 4 La valeur de i vaut : 5 La valeur de i vaut : 6 La valeur de i vaut : 7 La valeur de i vaut : 8 La valeur de i vaut : 9 La valeur finale de i est : 10
[modifier] Le goto
Le goto est une structure de contrôle obsolète et ne doit plus être utilisé.
[modifier] Le break
L'instruction break sert à "casser" ou interrompre une boucle (for, while et do), ou un switch.
[modifier] Syntaxe
break;
[modifier] Sémantique
- Sort de la boucle ou de l'instruction switch la plus imbriquée.
[modifier] Exemple
#include <iostream> using namespace std; int main() { for (int i=0; i<10; i++) { cout << "La variable i vaut: " << i << endl; if (i == 5) break; } return 0; }
Ce programme interrompt sa boucle lors de la sixième itération.
[modifier] Exécution
La variable i vaut: 0 La variable i vaut: 1 La variable i vaut: 2 La variable i vaut: 3 La variable i vaut: 4 La variable i vaut: 5
[modifier] Note importante
Le break rend le code difficile à lire, à l'exception de son utilisation dans un switch, il ne doit pas être utilisé (au même titre que le goto).
[modifier] Le continue
L'instruction continue sert à "continuer" une boucle (for, while et do) avec la prochaine itération.
[modifier] Syntaxe
continue;
[modifier] Sémantique
Passe à l'itération suivante de la boucle la plus imbriquée.
[modifier] Exemple
#include <iostream> using namespace std; int main() { for (int i=0; i<10; i++) { if (i == 5) continue; cout << "La variable i vaut: " << i << endl; } return 0; }
Ce programme saute l'affichage de la sixième itération.
[modifier] Exécution:
La variable i vaut: 0 La variable i vaut: 1 La variable i vaut: 2 La variable i vaut: 3 La variable i vaut: 4 La variable i vaut: 6 La variable i vaut: 7 La variable i vaut: 8 La variable i vaut: 9
