bool b = false;
Un booléen est codé sur 1 octet = 8 bits (il y a donc 7 bits qui sont "gachés", car 1 octet est le minimum que l'on puisse allouer sur un ordinateur) :
sizeof(b)
1
Remarque : bool
existe par défaut en C++ mais pas en C, mais on peut importer stdlib.h (#include <stdlib.h>
) pour utilisation une définition du type bool
(où false
est défini par 0 et true
par 1).
Les opérateurs de comparaison sont très similaires à OCaml et Python :
1 <= 1
true
1 < 1
false
1 == 1 // équivalent du = en OCaml
true
1 != 1 // équivalent du <> en OCaml
false
Voici une comparaison des opérateurs sur les booléens :
C | OCaml | Python | |
---|---|---|---|
et | && |
&& |
and |
ou | || |
|| |
or |
non | ! |
not |
not |
Lorsque a
est vraie, a || b
évalue seulement a
et b
n'est jamais évalué. C'est ce qu'on appelle l'évaluation paresseuse.
Dans l'exemple suivant, on utilise le fait que printf
renvoie le nombre de caractères affichés (c'est-à-dire la taille de la chaîne de caractères en argument), qui est implicitement convertit en booléen (0
est convertit en false
et tous les autres entiers en true
) :
printf("a") || printf("b") // printf("a") est exécuté mais pas printf("b")
a
true
Exercice
Devinez ce qu'affiche (1 - printf("a")) && (1 - printf("b"))
puis vérifier.
Solution
(1 - printf("a")) && (1 - printf("b"))
a
false
Condition if¶
Voici un exemple de if
:
int n = 42;
if(n % 2 == 0) {
printf("n est pair");
}
n est pair
Les accolades servent à délimiter le bloc qui sera exécuté si la condition du if
est true
.
Il est possible (mais pas forcément conseillé) d'ommettre les parenthèses s'il n'y a qu'une instruction dans le if
:
if(n % 2 == 0)
printf("n est pair");
n est pair
On peut aussi utiliser else
:
int n = 1;
if(n % 2 == 0) {
printf("n est pair");
}
else {
printf("n est impair");
}
n est impair
Boucle for¶
La boucle for
suivante répète les instructions entre accolades pour i
variant de 0 à 4 :
for(int i = 0; i < 5; i++) {
printf("%d ", i);
}
0 1 2 3 4
int i = 0
est exécuté la première fois qu'on rentre dans la bouclefor
: une variablei
est créée avec la valeur0
i < 5
est la condition pour que la boucle continue d'être exécutéei++
est une instruction effectuée à la fin de chaque passage dans lefor
:i
est augmentée de 1 (i++
est équivalent ài += 1
oui = i + 1
)
Exercice
Calculer $10!$
Solution
int s = 1;
for(int i = 2; i < 11; i++) {
s *= i;
}
s
3628800
Boucle while¶
La boucle while
répète un bloc d'instructions tant que la condition entre parenthèses est vraie. Par exemple, affichons les termes de la suite de Syracuse jusqu'à ce qu'elle soit égale à 1 (une conjecture célèbre dit qu'elle devient toujours égale à 1) :
int s = 5;
while(s != 1) {
printf("%d ", s);
if(s % 2 == 0)
s = s / 2;
else
s = 3*s + 1;
}
5 16 8 4 2
Afficher les chiffres de la décomposition en base 2 de 42.
break
¶
break
permet d'arrêter une boucle. Voici un exemple, pour savoir si un entier n
est premier :
int n = 327183433;
bool premier = true;
for(int i = 2; i < n; i++) {
if(n % i == 0) {
premier = false;
break;
}
}
premier
false