Bon c’est vrai, si on fait un petit récap ce qu’on a déjà abordé depuis le début de ce cours :
- Les bases du C
- Vocabulaires et spécificités
- Point d’entrée
main - Structure générale d’une fonction
- Types usuels
- Opérateur
sizeof - Fonction
printfet ses formats - Constantes
- Opérateurs arithmétiques
- Opérateurs unitaires
- Opérateurs logiques
- Opérateur d’affectation
- Opérateur
~
Mais il nous manque des structures essentielles permettant de gérer quel code doit s’exécuter, pourquoi, dans quels cas. Et oui, vous m’avez bien compris. On parle évidemment des structures de contrôle et des boucles.
Structures de contrôle
if, else if et else
Le bloc if permet de gérer une condition simple grâce au if, et des conditions multiples grâce à else if et else, qui sont donc facultatif. Ce qui veut dire que si on en a pas besoin, on ne les utilises pas.
Structure générale
if (condition) {
// Instructions à effectuer si condition vrai
}
else if (condition2) {
// Instructions à effectuer si condition2 vrai
}
else {
// Instructions à effectuer si aucunes des conditions n'est vraie
}On peut aussi le voir comme :
si <condition>
alors
// Instructions
sinon si <condition2>
alors
// Instructions
sinon
// Instructions
WARNING
Les conditions doivent retourner un booléen
- si faux
- si vrai
Vous vous souvenez,
Cne dispose pas de type booléen de manière native.
Exemple :
On souhaite savoir si un nombre n est inférieur, supérieur ou égal à .
#include <stdio.h>
int main( ){
int n = 14;
if (n==0){
printf("%d est égal à 0", n);
}
else if (n<0){
printf("%d est inférieur à 0", n);
}
else{
printf("%d est supérieur à 0", n);
}
return 0;
}14 est supérieur à 0
TIP
On a vu auparavant que si une condition est fausse alors elle est égale à 0. Alors dans notre cas, si la valeur
nest fausse, c’est à dire si elle est nulle alors elle est égale à .
Ainsi, à la place de la première condition, on peut aussi coder :
if (!n){
printf("%d est égal à 0", n);
}switch
Le bloc switch permet de définir les instructions à réaliser selon la valeur d’une expression.
Structure générale
switch (expression) {
case constante1:
// instructions
break;
case constante2:
// instructions
break;
default:
// instructions par défaut
}On peut le voir comme le bloc suivant :
Évaluons l'expression E
CAS : si E = constante1
...
on continue le programme
CAS : si E = constante2
...
on continue le programme
DÉFAUT : si E ne représente aucun des cas
...
on continue le programme
- L’évaluation de l’expression doit être de type entier ou caractère (
int,char, …). - Chaque cas possible
casedoit représenter une constante
WARNING
On utilise l’instruction
breakpour éviter l’effet de cascade.
Pour mieux comprendre l’effet de cascade, prenons un exemple
Exemple :
Une enseignante souhaite attribuer automatiquement à chaque étudiant un commentaire en fonction de leur nombre de frère et sœur :
- Défaut : Famille nombreuse
- 0 : Enfant unique
- 1 : Duo d’enfants
- 2 : Trio d’enfants
#include <stdio.h>
int main( ){
int n = 0;
switch (n){
case 0:
printf("Enfant unique...");
break;
case 2:
printf("Duo d'enfants");
break;
case 3:
printf("Trio d'enfants");
break;
default:
printf("Famille nombreuse");
}
}Enfant unique
L’instruction break permet de sortir du bloc switch une fois qu’un cas a été exécuté. Sans cette instruction à la fin de chaque case, le programme ne s’arrête pas automatiquement après l’exécution d’un cas valide. Au contraire, il continue à exécuter tous les cas suivants, même si leurs conditions ne sont pas remplies. C’est ce qu’on appelle le fall-through.
Ainsi dans l’exemple précédant, si les break n’étaient pas présent le programme aurait affiché :
Enfant unique...Duo d'enfantsTrio d'enfantsFamille nombreuse
Il aurait en fait affiché le cas dans lequel il est respecté, puis tous les cas suivants même si la valeur de l’expression ne rempli pas les conditions.
NOTE
On ne met pas
breakàdefaultcar c’est le dernier cas (le cas de base) dans le blocswitchainsi, après ce dernier on sortira forcément du bloc.
Les boucles
for
Le bloc for est une boucle, ce qui signifie que le code inclus dans ce bloc se répètera un nombre connu de fois.
Structure de la boucle for
for(initialisation; condition arrêt; incrémentation){
// Instructions a faire
}Exemple :
On souhaite afficher les valeurs successives de i entre et .
for (int i = 1; i <= 10; i++) {
printf("%d ", i);
}1 2 3 4 5 6 7 8 9 10
Double boucle for
Les doubles boucles for en C sont très utilisées pour parcourir des structures à deux dimensions, comme les tableaux 2D (matrices), ou pour des traitements imbriqués.
for (init1; cdt1; incr1) { // Parcourt les lignes
for (init2; cdt2; incr2) { // Parcourt les colonnes
// Instructions
}
}Et vous savez quoi ? On peut encore réduire ces instructions pour ne faire qu’un seul bloc donc créer les deux boucles simultanément. Regardez comment on peut le faire de manière concise :
for(init1, init2; cdt1 && cdt2, incr1, incr2){
// Instructions
}Exemple :
for (int i = 0, j = 10; i < 5 && j > 5; i++, j--) {
printf("i = %d, j = %d\n", i, j);
}i = 0, j = 10
i = 1, j = 9
i = 2, j = 8
i = 3, j = 7
i = 4, j = 6
while
Le bloc while permet de boucler des instructions **TANT QU’**une condition est vérifiée. La condition est évaluée avant l’exécution du code. Si la condition est fausse alors le bloc while ne sera jamais exécuté.
NOTE
On utilise une boucle
whilelorsque l’on ne connait pas le nombre d’itérations.
Structure générale du bloc while
Exemple :
int i = 1;
while (i <= 5) {
printf("%d\n", i);
i++;
}1
2
3
4
5
do while
La boucle do while est équivalente à la boucle while sauf que son contenu est exécuté au moins une fois avant l’évaluation de la condition.
Syntaxe générale du bloc do while
do {
// instructions
} while (condition);- La boucle s’exécute au moins une fois même si la condition est fausse.
- Très utile lorsque l’on souhaite tester une condition après l’exécution.
Exemple :
int x;
do {
printf("Entrer un nombre positif : ");
scanf("%d", &x);
} while (x <= 0);Dans cet exemple, on boucle sur les instructions tant que l’utilisateur n’a pas tapé un nombre positif strict.
Le ternaire
En C, l’opérateur ternaire (aussi appelé opérateur conditionnel) est une manière compacte d’écrire une condition if ... else.
Sa syntaxe est :
( condition ) ? valeur_si_vrai : valeur_si_faux;
- Si
conditionest vraie (différente de 0), l’expression prend la valeurvaleur_si_vrai. - Sinon, elle prend la valeur
valeur_si_faux.
Exemple :
#include <stdio.h>
int main() {
int a = 10, b = 20;
int max;
// Utilisation du ternaire
max = (a > b) ? a : b;
printf("Le maximum est : %d\n", max);
return 0;
}Ici, si a > b, alors max = a, sinon max = b.
Suivant
- Cours suivant : 05 - Retour sur les fonctions