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 = 0est exécuté la première fois qu'on rentre dans la bouclefor: une variableiest créée avec la valeur0i < 5est la condition pour que la boucle continue d'être exécutéei++est une instruction effectuée à la fin de chaque passage dans lefor:iest augmentée de 1 (i++est équivalent ài += 1oui = 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