Vous êtes sur la page 1sur 22

Département

Mathématiques et
Informatique

Algorithmique et programmation
langage C
Chapitre 5 : LES INSTRUCTIONS DE CHOIX
-STRUCTURES CONDITIONNELLES-
ASMAE OUHMIDA
UNIVERSITÉ HASSAN II
ECOLE NORMALE SUPÉRIEURE
D’ENSEIGNEMENT TECHNIQUE
PLAN

► L ’opérateur conditionnel

► L’instruction conditionnelle IF

► L’instruction de sélection SWITCH


L'OPÉRATEUR CONDITIONNEL

► Il existe un seul opérateur ternaire en C. Cet opérateur permet d'écrire des expressions
conditionnelles : inclusion d’une expression conditionnelle dans le calcul d’une
expression

► L'expression conditionnelle débute par un test suivi du caractère ? puis la valeur lorsque
le test est vrai puis le caractère : et enfin la valeur lorsque le test est faux

► Syntaxe
Test est
Test Test est faux
vrai

(expression logique) ? ExpressionSiVrai : ExpressionSiFaux


L'OPÉRATEUR CONDITIONNEL

 Exemples

renvoie le produit de i par 2 si i est strictement positif


et le résultat de l’ajout de 2 à i si i est négatif ou nul.

(i>0) ? i*2 : i+2

a vaut 3.14 et b vaut 5


y = 100;
a = (y < 200) ? 3.14 : 25;
b = (a > 3) ? ((y > 200) ? 10.1 : 5.0) : 123.0;
L'OPÉRATEUR CONDITIONNEL

Exercice : Remise de 20% pour plus de 3 articles achetés

La société X applique une remise de 20% si le nombre d’articles achetés est strictement
supérieur à 3.

Ecrire l’expression qui permet de valoriser la variable MontantAPayer à partir des deux
variables supposées renseignées : TotalAchats et NbProduits qui représentent
respectivement le montant total des achats et le nombre d’articles achetés
L'OPÉRATEUR CONDITIONNEL
Exercice : Remise de 20% pour plus de 3 articles achetés
# include <stdio.h>
main()
{ int NbProduits;
float MontantAPayer, TotalAchats;
printf("donner le Total Achats : ") ; scanf("%f",&TotalAchats) ;
printf("\n donner le Nn de produits : "); scanf("%d",&NbProduits) ;
MontantAPayer = (NbProduits>3)?
TotalAchats-(TotalAchats*0.20):TotalAchats;
printf("Le montant à payer est : %f \n", MontantAPayer) ;
system("PAUSE");
L'INSTRUCTION CONDITIONNELLE IF

► La syntaxe générale a la forme suivante :

if (expression booléenne)
{
bloc1 d’instructions
}
else
{
bloc2 d’instructions
}

► Description : La valeur de l'expression est évaluée et, si elle est non nulle (vraie), les
instructions du bloc1 sont exécutées sinon (fausse) les instructions du bloc2 sont exécutées
L'INSTRUCTION CONDITIONNELLE IF

► Organigramme de l ’instruction conditionnelle IF


L'INSTRUCTION CONDITIONNELLE IF

► Remarques :

Chaque instruction à l’intérieur d’un bloc se termine par un point virgule

La partie “ else ” est facultative

Dans le cas où le bloc est formé d’une seule instruction il n’est pas utile de

mentionner les accolades


L'INSTRUCTION CONDITIONNELLE IF

► Exemples :
1) if (i < 10) i++;
2) if (delta > 0)
printf("2 racines réelles\n");
else
if (delta == 0)
printf("racine double\n");
else
printf("pas de racines réelles\n");
3) if (a) i++; /* équivalent : if ( a ! = 0 ) */ ;
L'INSTRUCTION CONDITIONNELLE IF

Exercice :

Soient deux joueurs A et B se cachent la main droite derrière le dos. Chacun choisit de

tendre un certain nombre de doigts (de 0 à 5), toujours derrière le dos. Les deux

joueurs se montrent la main droite en même temps. Si la somme des nombres de

doigts montrés est paire, le premier joueur a gagné, sinon c'est le second. Le problème

est de faire prendre la décision par l'ordinateur.


L'INSTRUCTION CONDITIONNELLE IF
L'algorithme de ce problème se présente comme suit :
- prendre connaissance du nombre de doigts de A
- prendre connaissance du nombre de doigts de B
- calculer la somme de ces deux nombres
- si la somme est paire, A est le gagnant
- si la somme est impaire, B est le gagnant.

Pour déterminer En langage de description d'algorithme, l'algorithme s'écrira:


si un nombre est entier na,nb,reste
pair ou impair, il
lire na,nb
suffit de calculer
le reste de la reste <-- (na + nb) modulo 2
division entière si reste == 0 alors écrire "Le joueur A a gagné "
par 2 (%) =0 sinon écrire "Le joueur B a gagné."
dans le premier fsi
cas et 1 dans le écrire "Bravo pour le gagnant!"
second
L'INSTRUCTION CONDITIONNELLE IF

#include <stdio.h>
int NA, NB, Reste;
main()
{
printf("Introduisez le nombre de doigts montrés par le joueur A : ");
scanf("%d",&NA);
printf("Introduisez le nombre de doigts montrés par le joueur B : ");
scanf("%d",&NB);
Reste = (NA + NB)%2;
if (Reste==0) printf("Le joueur A a gagné. \n");
else printf("Le joueur B a gagné. \n");
printf("Bravo pour le gagnant! \n");
system("PAUSE");
L'INSTRUCTION CONDITIONNELLE IF
► Exercice : Remise de 20% pour plus de 3 articles achetés
# include <stdio.h>

main()
{ int NbProduits;
float MontantAPayer, TotalAchats;
printf("donner le Total Achats : ") ; scanf("%f",&TotalAchats) ;
printf("\n donner le Nn de produits : "); scanf("%d",&NbProduits) ;
if (NbProduits>3) MontantAPayer=TotalAchats-(TotalAchats*0.20);
else MontantAPayer= TotalAchats;
printf("Le montant à payer est : %f \n", MontantAPayer);
system("PAUSE");
}
L'INSTRUCTION DE SÉLECTION SWITCH
► tester le résultat d’une expression avec de nombreuses valeurs et déclencher des
traitements particuliers pour chacune de ces valeurs.
► Il est recommandé d’utiliser l’instruction “ switch ” plutôt qu’une imbrication
d’instructions “ if …else … ”.
► La syntaxe de cette instruction a la forme suivante :
switch (expression)
{
case e1 : bloc instructions1 ;
case e2 : bloc instructions2 ;
...
case e3 : bloc instructions3 ;
default : bloc instructions_default ;
}
L'INSTRUCTION DE SÉLECTION SWITCH
► Organigramme de l’instruction de sélection SWITCH

non
Expression==e1

oui non
Expression==e2
Bloc instructions1
oui non
Expression==e3
Bloc instructions2
oui

Bloc instructions3

Bloc
instructions_default

Fin de switch
L'INSTRUCTION DE SÉLECTION SWITCH

Description :
► L’évaluation de l’expression doit donner pour résultat une valeur de type int ou char

► e1, e2, e3 ... sont des expressions constantes qui doivent être un entier unique de type int ou char

► La valeur de l’expression est recherchée successivement parmi les valeurs des différentes expressions
constantes e1, e2, e3...

► En cas d’égalité (résultat de l’expression et l’expression constante) le bloc d’instructions correspondant


est exécuté jusqu’à l’instruction break ou jusqu’à la fin du bloc du switch

► S'il n'y a pas de valeur correspondante, on exécute les instructions du cas default (s'il existe)
L'INSTRUCTION DE SÉLECTION SWITCH

► Remarques :

L'instruction break provoque le passage à l'instruction qui suit immédiatement


switch ou le corps de la boucle while, do-while, for.

Pour passer à l’instruction qui suit le switch, il faut que la dernière instruction
associée à chaque bloc d’instructions soit break (à l’exception default)
L'INSTRUCTION DE SÉLECTION SWITCH

Exemple :
Le règlement d’un jeu de tire à la carabine est le suivant :
- Si la cible est touchée 0 fois on gagne rien ;
- Si la cible est touchée 1 fois on gagne un livre ;
- Si la cible est touchée 2 fois on gagne une cafetière ;
- Si la cible est touchée 3 fois on gagne une bicyclette VTT ;
- Si la cible est touchée 4 fois on gagne une Télévision ;
- Si la cible est touchée plus de 5 fois on gagne une machine à laver ;
Ecrire le programme C qui permet de lire le nombre de fois que la cible a été
touchée et afficher l’objet gagné.
L'INSTRUCTION DE SÉLECTION SWITCH
#include <stdio.h>
int Nombre_Tire ;
main() {
printf(" Entrez le nombre de fois que la cible a été touchée : ") ;
scanf("%d", &Nombre_Tire) ;
switch (Nombre_Tire) {
case 0 : { printf(" Vous n’avez rien gagné \n"); break ; };
case 1 : { printf(" Vous avez gagné un livre \n ") ; break ; };
case 2 : { printf(" Vous avez gagné une cafetière \n "); break ; };
case 3 : { printf(" Vous avez gagné une bicyclette VTT \n "); break ; };
case 4 : { printf(" Vous avez gagné une télévision \n"); break ; };
default : printf(" Vous avez gagné une machine à laver \n ");
}
system("PAUSE ");
}
L'INSTRUCTION DE SÉLECTION SWITCH
Voyez cet exemple, dans lequel nous avons volontairement omis certains break.
Exemple général d’instruction switch

main()
{
int n ;
printf ("donnez un entier : ") ; donnez un entier : 1
scanf ("%d", &n) ; petit
switch (n) moyen
{ case 0 : printf ("nul\n") ; break ; ______
donnez un entier : 4
case 1 :
moyen
case 2 : printf ("petit\n") ; ______
case 3 : donnez un entier : 25
case 4 : grand
case 5 : printf ("moyen\n") ; break ;
default : printf ("grand\n") ;
}
}
Exercice à faire :

Ecrire un programme qui permet de lire deux opérandes (deux


valeurs) et un opérateur (+, -, *, /) puis affiche le résultat
correspondant:
opérande1 opérateur opérande 2 = résultat