Vous êtes sur la page 1sur 33

UNIVERSITÉ CHEIKH ANTA DIOP DE DAKAR

FACULTÉ DES SCIENCES ET TECHNIQUES


DÉPARTEMENT DE MATHÉMATIQUES ET INFORMATIQUE

Chapitre 4 - STRUCTURES DE
CONTRÔLE
Cours d’algorithmique et programmation
en LANGAGE C
Licence Bioinformatique
2019

Dr. Ibrahima DIANE


Introduction

• Les structures de contrôle permettent d’agir


sur l’ordre ou la fréquence d’exécution des
instructions d’un programme.

• Il existe deux grands types de structures de


contrôle:
– les structures conditionnelles
– les structures répétitives, encore appelées boucles.

FST DMI Dr. I DIANE 2019 2


Structures conditionnelles
• La structure Si
– permet de conditionner l’exécution d’un ensemble
d'instructions à la valeur d’une condition
(expression booléenne).
– La syntaxe générale de cette structure est la suivante

FST DMI Dr. I DIANE 2019 3


Structures conditionnelles : condition Si
• Les traitements apparaissant après les mots Alors et Sinon
– peuvent être constitués d'une instruction simple ou d'un
ensemble d'instructions (bloc d'instructions).

– La condition est d'abord évaluée.


• Si elle est vraie, traitement1 est exécuté puis le contrôle passe à
l’instruction qui suit le FinSi.
• Si elle est fausse, traitement2 est exécuté puis le contrôle passe à
l’instruction qui suit le FinSi.

FST DMI Dr. I DIANE 2019 4


Structures conditionnelles : condition Si
Exemple 1


Ecrire("entrez un nombre")

Lire(n)

Si (n > 0) Alors //dans le cas où la condition n>0 est vraie

Ecrire("valeur positive")

Sinon //dans le cas où la condition n>0 est fausse

Ecrire ("valeur négative ou nulle")

FinSi
...
FST DMI Dr. I DIANE 2019 5
Structures conditionnelles : condition Si
Exemple 2
Programme Operation

Variable
nb1,nb2, res: entier
op : caractère

Début

Ecrire("Entrez deux nombres")


Lire(nb1, nb2)
Ecrire("entrez la première lettre de l'opération voulue: somme ou produit")
Lire(op)
Si (op = = 's') Alors
res = nb1 + nb2
Ecrire("la somme est", res)
Sinon
res = nb1 * nb2
Ecrire("le produit est", res)
FinSi
Fin
FST DMI Dr. I DIANE 2019 6
Remarques

FST DMI Dr. I DIANE 2019 7


Organigramme de la clause Si

FST DMI Dr. I DIANE 2019 8


Organigramme de la clause Si

Si (condition1) Alors

Action1

Sinon Si (condition2) Alors

Action2
...
Sinon Si (conditionN) Alors

ActionN

Sinon

Action

FinSi

FST DMI Dr. I DIANE 2019 9


Condition Si : Traduction en C
if(condition1)
{
traitement1
}
else if (condition2)
{
traitement2
}
...
else if (conditionN)
{
traitementN
}
else
{
traitement
}

NB : conditions doivent être entre parenthèses.


Si un traitement comporte une seule instruction, on peut omettre les accolades.

10
FST DMI Dr. I DIANE 2019
La condition Si en C : if
Exemple 1

printf("entrez un nombre");

scanf("%d", &n);

if (n > 0)

printf("valeur positive");

else

printf("valeur négative ou nulle");


...

FST DMI Dr. I DIANE 2019 11


La condition Si en C : if
Exemple 2
#include <stdio.h>
int main( )
{
int nb1,nb2, res;
char op;
printf("Entrez deux nombres");
scanf("%d%d", &nb1, &nb2);
printf("entrez la première lettre de l'opération voulue: somme ou produit");
fflush (stdin);
op = getchar( );
if (op = = 's')
{
res = nb1 + nb2;
printf("la somme est %d", res);
}
else
{
res = nb1 * nb2;
printf("le produit est %d", res);
}
return 0;
}
12
FST DMI Dr. I DIANE 2019
Exercice

Ecrire un programme appelé racine qui permet


d’ afficher à l’écran les racines d’une équation
du second degré ax² + bx + c = 0. Les
coefficients a, b et c sont saisis.

FST DMI Dr. I DIANE 2019 13


La structure Selon
• La structure Selon permet de choisir le traitement à effectuer en
fonction de la valeur d'une variable ou d'une expression. Cette
structure permet parfois de remplacer avantageusement une
structure Si.
• La syntaxe de cette structure est
Selon (expression) Faire
valeur1 : traitement1
valeur2 : traitement2

valeurN : traitementN
Sinon traitement
FinSelon

Où expression est nécessairement une expression de type scalaire (entier, caractère,


booléen ou énuméré).

14
FST DMI Dr. I DIANE 2019
La structure Selon
• L’expression est évaluée, puis sa valeur est successivement comparée à
chacune des valeurs. Dès qu’il y a correspondance, les comparaisons sont
arrêtées et le traitement associé est exécuté. Si aucune valeur ne correspond à
la valeur de l’expression, alors le traitement associé au Sinon, s’il existe, est
exécuté.
Exemple
Programme qui affiche le mois en toute lettre selon son numéro.
Le numéro du mois est mémorisé dans la variable mois.
...
Ecrire("Donner le numéro du mois")
Lire(mois)
Selon (mois) Faire
1 : Ecrire("Janvier")
2 : Ecrire("Février")
3 : Ecrire("Mars")
4 : Ecrire("Avril")

11: Ecrire("Novembre")
12: Ecrire("Décembre")
Sinon Ecrire("Un numéro de mois doit être compris entre 1 et 12")
FinSelon
... 15
FST DMI Dr. I DIANE 2019
La structure Selon
• Remarque
Avec une structure Si, on aurait :

Ecrire(Donner le numéro du mois)
Lire(mois)
Si (mois = = 1) Alors
Ecrire("Janvier")
Sinon Si (mois = = 2) Alors
Ecrire("Février")
Sinon Si (mois = = 3) Alors
Ecrire("Mars")
Sinon Si (mois = = 4) Alors
Ecrire("Avril")

Sinon Si (mois = = 11) Alors
Ecrire("Novembre")
Sinon Si (mois = = 12) Alors
Ecrire("Décembre")
Sinon
Ecrire("Un numéro de mois doit être compris entre 1 et 12")
FinSi

16
FST DMI Dr. I DIANE 2019
La structure Selon
• Traduction en langage C
– Si on a le choix entre plusieurs traitements à effectuer suivant la valeur d'une
expression entière (c'est à dire de type entier, ou caractère, ou énuméré), on peut
alors utiliser la structure switch à la place de la structure if.
Syntaxe
switch (expression)
{
case valeur1 :
traitement1;
break;
case valeur2 :
traitement2;
break;
...
case valeurN :
traitementN;
break;
default :
traitement;
}

– L’exécution commence par les instructions de la première valeur qui correspond à


la valeur l’expression du switch et continue jusqu’à un break ou la fin du switch.
Ainsi, si on ne met pas de break, les instructions du cas suivant seront également
exécutées.
17
FST DMI Dr. I DIANE 2019
La structure Selon
• Traduction en langage C
– La clause default propose un traitement à effectuer dans le cas où la valeur de
expression ne correspond à aucune des valeurs proposées dans les case
successifs. Cette partie n'est pas obligatoire.

Exemple

printf("Donner le numéro du mois");
scanf("%d", &mois);
switch (mois)
{
case 1 : printf("Janvier"); break;
case 2 : printf("Février"); break;
...
case 12 : printf("Décembre"); break;
default : printf("Un numéro de mois doit être
compris entre 1 et 12");
}
...

FST DMI Dr. I DIANE 2019 18


Structures répétitives

• Les structures répétitives, appelées aussi boucles,


permettent de répéter un traitement ( c'est à dire
une instruction simple ou composée) autant de fois
qu'il est nécessaire :
– soit un nombre déterminé de fois,
– soit tant qu'une condition est vraie.

FST DMI Dr. I DIANE 2019 19


Structures répétitives : La boucle Tant que

• La boucle Tant que permet de répéter un traitement tant qu'une


condition est vraie.
• Si, dès le début, la condition est fausse, alors le traitement ne sera
pas exécuté.

Syntaxe

Tant que (condition) Faire


traitement
FinTQ

FST DMI Dr. I DIANE 2019 20


Structures répétitives : La boucle Tant que
Exemple

Programme qui calcule le cube des nombres non nuls saisis par l'utilisateur.
Tant que le nombre saisi par l'utilisateur n'est pas nul, on affiche son cube et on recommence.

Programme cube
Variable
x : Entier
Début
Ecrire("Ce programme calcul le cube des nombres que vous entrez. Pour arrêter tapez 0.")
Ecrire("Entrez un nombre")
Lire(x)
Tant que (x  0) Faire
Ecrire("le cube de " , x , " est ", x*x*x)
Ecrire("Entrez un nombre ou 0 pour arrêter")
Lire(x)
FinTQ
Ecrire("Fin")
Fin

FST DMI Dr. I DIANE 2019 21


Structures répétitives : La boucle Tant que
• Traduction en langage C: boucle while
Syntaxe

while (condition)
{
traitement
}

– Les conditions doivent être entre parenthèses.


– Si un traitement comporte une seule instruction, on peut
omettre les accolades.

FST DMI Dr. I DIANE 2019 22


Structures répétitives : La boucle Pour
• La boucle Pour permet de répéter une instruction un nombre connu de
fois. Elle a le formalisme suivant:

Pour compteur = valeur_initiale à valeur_finale par pas de increment Faire


traitement
FinPour

– La variable compteur est de type entier. Elle est initialisée à la valeur


valeur_initiale.
– Le compteur augmente (implicitement) de la valeur increment à chaque
exécution du traitement.
– Lorsque la variable compteur vaut la valeur valeur_finale, le traitement est
exécuté une dernière fois puis le programme sort de la boucle.
– Par défaut, l’incrément est de 1.

FST DMI Dr. I DIANE 2019 23


Structures répétitives : La boucle Pour
• Exemple 1

Pour x = 0 à 20 par pas de 2 Faire


Ecrire(x)
FinPour

Cet exemple permet d'afficher à l'écran les nombres pairs de 0 à 20.

• Exemple 2

Pour x = 20 à 0 par pas de -2 Faire


Ecrire(x)
FinPour

Cet exemple permet d'afficher à l'écran les nombres pairs de 20 à 0.

• Exemple 3

Pour x = 0 à 20 Faire
Ecrire(x)
FinPour

Cet exemple permet d'afficher à l'écran tous les nombres de 0 à 20.

24
FST DMI Dr. I DIANE 2019
Structures répétitives : La boucle Pour
• Remarque
• La boucle Pour permet de faire la même chose que la boucle Tant que mais de façon plus
rapide, du moins lorsque le nombre de répétitions est connu. En effet, avec une boucle tant
que, on pourrait faire la même chose que l'exemple 3 ci-dessus, mais il faudrait initialiser la
variable compteur et l'incrémenter explicitement.

x=0
Tant que (x <= 20) Faire
Ecrire(x)
x = x+1 // incrémentation explicite
FinTQ

• Traduction en langage C: boucle for


Syntaxe
for(instruction1;condition;instruction2)
{
traitement;
}

25
FST DMI Dr. I DIANE 2019
Structures répétitives : La boucle Pour
• Traduction en langage C: boucle for
• Le déroulement se fait ainsi:
• instruction1 est exécutée une seule fois.
• Puis il y a l'enchaînement suivant:
– La condition est évaluée.
– Si elle est fausse, on sort de la boucle.
– Si elle est vraie, le traitement de la boucle est exécuté, puis instruction2 est exécutée et
on recommence en évaluant à nouveau la condition, etc …

• En général
• instruction1 permet d'initialiser une variable compteur
• instruction2 permet d'incrémenter ou de décrémenter une variable compteur
Exemple
for(x = 0; x <= 20; x = x+1)
{
printf("%d", x);
}
• A la sortie de la boucle, x vaut 21.

26
FST DMI Dr. I DIANE 2019
Structures répétitives : La boucle Faire…Tant que
• Cette boucle sert à répéter une instruction tant qu'une condition
est vraie. Son formalisme est le suivant:

Faire
traitement
Tant que (condition)

• Le traitement est exécuté une première fois, puis la condition est


vérifiée. Si elle est vraie, on retourne au début de la boucle et le
traitement est répété. Si la condition est fausse, on sort de la
boucle.
• A chaque fois que le traitement est exécuté, la condition est
de nouveau vérifiée à la fin.

FST DMI Dr. I DIANE 2019 27


Structures répétitives : La boucle Faire…Tant que
• Exemple
Programme qui calcule l'aire d'un cercle dont le rayon est saisi par l'utilisateur et qui permet
de recommencer plusieurs fois.
Traduction en langage C: boucle do .. While
Programme Aire
Syntaxe
Variable
rayon : réel do
réponse : caractère {
Début traitement
Ecrire("Calcul de l'aire d'un cercle") }
while (condition);
Faire
Ecrire("Entrez le rayon d'un cercle en cm")
Lire(rayon)
Ecrire("L'aire de ce cercle est ", rayon*rayon *3.14, "cm2")
Ecrire("Voulez-vous calculer l'aire d'un autre cercle? (o/n)")
Lire(réponse)
Tant que (réponse = = 'o')
Ecrire("Au revoir!")
Fin

28
FST DMI Dr. I DIANE 2019
Imbrication de structures de contrôles
• Dans les parties traitement des structures de contrôle qu’on a vues, il peut y avoir d’autres
structures de contrôle. On parle alors d’imbrication de structures (c'est-à-dire que les
structures sont incluses les unes dans les autres).
- Dans le cas de structures Si imbriquées, le - Lorsque l'on imbrique des boucles
premier FinSi rencontré dans l'algorithme Pour, il faut utiliser des compteurs
indique toujours la fin de la structure la plus différents pour chaque boucle.
imbriquée.
Exemple
Exemple
Pour j = 1 à 3 Faire
Si (condition1) Alors Pour i = 1 à 5 Faire
… Ecrire("*")
Si (conditionN) Alors FinPour
… FinPour
FinSi

Finsi
• Tous les types de boucles peuvent s'imbriquer entre eux. La seule règle à respecter est que
les boucles ne doivent pas se chevaucher: elles doivent s'emboîter.

29
FST DMI Dr. I DIANE 2019
Instructions de rupture de séquence en langage C
• L'instruction break
– L'instruction break peut être employée à l'intérieur de n'importe quelle boucle. Elle
permet d'interrompre le déroulement de la boucle, et passe à la première instruction
qui suit la boucle. En cas de boucles imbriquées, break fait sortir de la boucle la plus
interne.
• Par exemple, le programme suivant:
int main() affiche à l'écran:
{ i=0
int i; i=1
for (i = 0; i < 5; i++) i=2
{ i=3
printf("i = %d\n",i); valeur de i a la sortie de la boucle = 3
if (i == 3)
break;
}
printf("valeur de i a la sortie de la boucle = %d\n",i);
return 0;
}

30
FST DMI Dr. I DIANE 2019
Instructions de rupture de séquence en langage C
• L'instruction continue
– L'instruction continue permet de passer directement à l'étape suivante d'une boucle
sans exécuter les autres instructions de la boucle qui la suivent.

• Par exemple, le programme suivan:

int main() affiche à l'écran:


{ i=0
int i; i=1
for (i = 0; i < 5; i++) i=2
{ i=4
if (i == 3) valeur de i a la sortie de la boucle = 5
continue;
printf("i = %d\n",i);
}
printf("valeur de i a la sortie de la boucle = %d\n",i);
return 0;
}

FST DMI Dr. I DIANE 2019 31


FIN

FST DMI Dr. I DIANE 2019 32


Exercice
Le problème de la machine qui « rend la monnaie ».
Écrire un programme qui, pour une somme donnée en CFA, affiche le nombre
(minimal) de billets nécessaires pour la composer.
Exemple :
48950 = 4 x 10000 + 1 x 5000 + 1 x 2000 + 1 x 1000 + 1 x 500 + des pièces (450)

FST DMI Dr. I DIANE 2019 33

Vous aimerez peut-être aussi