Progr.IMT&ELProgr.IMT&EL
Expressionslogiques
Delannoychap3(partiel)
Objectifs:
maîtriserletypebooléenenC
exploiterlesopérateurslogiques
lescombineraveclesautresopérateurs
S43b1/12
Plan:
letypebooléen(VRAI/FAUX)
construiredesexpressionsbooléennes
lescombineravecETetOU
Progr.IMT&ELProgr.IMT&EL
Chap03.2
Le type Booléen
Le type booléen ne peut prendre que l’une des 2 valeurs logiques
opposées suivantes: VRAI ou FAUX
Le type booléen est essentiel pour construire les instructions de
contrôle car elles reposent toutes sur l’évaluation d’une condition
de ce type.
Exemple:
Si la condition est VRAI alors faire l’action1
Sinon (
la condition est FAUSSE) alors faire l’action2
S43b2/12
Progr.IMT&ELProgr.IMT&EL
Le type Booléen (1)
C standard 89:
Pas de type de base booléen, la valeur d’une condition prend l’une
des 2 valeurs entières :
0si elle est FAUSSE
1si elle est VRAI
Réciproquement:
la valeur d'une expression utilisée pour exprimer une
condition est convertie en un booléen:
motif binaire nul : FAUX (ex: 0)
motif binaire non-nul : VRAI (ex: n'importe quel
entier différent de 0)
la re
p
résentation binaire sera ex
p
lorée en détails
,
en semaine 6 S43b3/12
Progr.IMT&ELProgr.IMT&EL
Le type Booléen (2)
C standard 99:
-On peut continuer à travailler comme précédemment
-On dispose d’un nouveau type de base _Bool
-Ou alors si on ajoute la directive #include <stdbool.h>
on peut utiliser les mots clef: bool, true, false
S43b4/12
Progr.IMT&ELProgr.IMT&EL
45 opérateurs
15niveauxdepriorités
Delannoyp48
Associativité:pourles
opérateursdemême
priorité
Gauche>Droite/LefttoRight
Droite>Gauche/RighttoLeft
niveauxdepriorités
desopérateurs
source:TepDobryhttp://ee.hawaii.edu/~tep/
Progr.IMT&ELProgr.IMT&EL
comparaison < <= > >=
égalité == différence !=
valeur : VRAI ou FAUX
int a=77; int b=88; a <ba == b
conversion automatique en : int 10
Pour construire des expressions booléennes dont la
valeur est VRAI ou FAUX
Lesopérateursrelationnels
Quesepassetilsionutilisel'affectationaulieudel'opérateurd'égalité?
if( a = 21) ...
S43b6/12
Progr.IMT&ELProgr.IMT&EL
int a=77; int b=88;
printf("%d", (a <b)!=(a == b) );
x = 3*(a != b);
char c1=‘C’; char c2 =‘H’;
if(c1 < c2)
(cetusageserajustifiéensemaine6)
S43b7/12
Progr.IMT&ELProgr.IMT&EL
L’opérateur de négation logique, noté !, donne le
booléen opposé de son opérande.
•Sa table de vérité montre tous les cas possibles:
!VRAI donne FAUX
!FAUX donne VRAI
Donner la valeur des expressions suivantes:
!(-1)
!(6%2)
Lesopérateurslogiques
!1 donne 0
!0 donne 1
S43b8/12
Progr.IMT&ELProgr.IMT&EL
bool a, b;
0 && b =
a&&b
ET LOGIQUE
0
01
11
00
01 && b =
Evaluation paresseuse du ET logique:
L’opérande droit n'est PAS évalué
si celui de gauche vaut 0
a
b
0
b
LeETlogique
Ex: donner l'expression qui est vraie quand l'entier k
est compris entre 10 et 20 (bornes exclues): S43b9/12
Progr.IMT&ELProgr.IMT&EL
bool a, b;
0¦¦b =
a¦¦b
OU LOGIQUE
0
01
11
10
11¦¦b =
b
a1
b
LeOUlogique
Evaluation paresseuse du OU logique:
L’opérande droit n'est PAS évalué
si celui de gauche vaut 1
Ex: donner l'expression qui est vraie quand l'entier k est
strictement à l'extérieur de l'intervalle [10, 20] :
S43b10/12
Progr.IMT&EL
#define MAX 10
...
int tab[MAX];
...
if( i< MAX && tab[i] != 0)
tab[i]++ ;
autreexemple
LoideDeMorgan
SoitP1etP2deuxopérandesdevaleurVRAIouFAUX:
!(P1 && P2) == !P1 || !P2
!(P1 || P2) == !P1 && !P2
Ex: donner LA NEGATION de l'expression qui est vraie quand l'entier k
est compris entre 10 et 20 (bornes exclues): S43b11/12
Progr.IMT&ELRésumé
Le type booléen n’existe pas en C standard 89, on
travaille le type entier à la place
les valeurs booleennes FAUX / VRAI sont traitées comme
les entiers 0 / 1 .
Réciproquement les opérateurs logiques convertissent
les valeurs de leur opérandes en FAUX (si égal à 0) ou en
VRAI (si 0)
Le C standard 99 offre le type bool (include <stdbool.h> )
Le C exploite les propriétés des opérateurs logiques pour
faire moins de calcul (évaluation paresseuse)
Il faut maitriser les lois de De Morgan pour construire des
conditions complexes avec les opérateurs logiques
S43b12/12
1 / 3 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !