0% ont trouvé ce document utile (0 vote)
26 vues132 pages

Cours C (

Transféré par

bentaherdaly123
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
26 vues132 pages

Cours C (

Transféré par

bentaherdaly123
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Atelier de Programmation Procédurale 1

(Langage C)
Niveaux: Info 1
Dr Nafaa Haffar

Année universitaire:
2023/2024
Plan

1 Introduction (présentation du langage C, caractéristiques, … )

2 Les éléments de base du langage C

3 Les entrées-sorties

4 Les opérateurs

5 Les structures de contrôle

6 Les tableaux et les algorithmes de Tri


Introduction 3

1) Présentation du langage C

▪ Qu'est-ce que le C ?
Langage de haut niveau • Java
➢ C’est un langage évolué et structuré, assez proche du langage machine • Plus simple • C#.net
• Plus éloigné du fonctionnement • Python
de la machine …
➢ Il est apparu au début des années 70

➢ Il est actuellement l’un des langages les plus utilisés dans le monde

➢ Il est gratuit et évolutif

Auteurs du langage C Langage de bas niveau • C


• Plus complexe • C++
• Dennis Ritchie : • Plus proche du fonctionnement • Objective-C
informaticien américain de la machine …

• Ken Thompson :
informaticien américain

Binaire
→ Ils sont parmi les concepteurs des systèmes Unix Classification des langages de programmation
Introduction 4

1) Présentation du langage C

▪ Paradigme de programmation utilisé ?

➢ Paradigme ?
Un paradigme en informatique est une approche ou un modèle de programmation qui définit la manière dont les programmes
informatiques sont structurés, conçus et exécutés.

Il existe plusieurs paradigmes de programmation, mais on peut les regrouper en deux grandes familles :
a) La programmation impérative :
▪ Le paradigme de programmation le plus ancien
▪ Dans la programmation impérative, vous spécifiez explicitement les actions à effectuer, ainsi que l'ordre dans lequel elles doivent
être exécutées.
b) La programmation déclarative :
▪ Dans la programmation déclarative, vous indiquez généralement le résultat souhaité ou les règles à suivre, et le système
informatique détermine comment accomplir la tâche.
Introduction 5

1) Présentation du langage C

▪ Paradigme de programmation utilisé ?

➢ Les paradigmes de programmation

Classification des langages de programmation par paradigme

Programmation Programmation procédurale : Ada, Pascal, C


impérative
Tous les langages de Programmation orientée objet : C++, Java
programmation
Programmation concurrente : Ada95

Programmation Programmation fonctionnelle : LISP,


déclarative SCHEME

Programmation logique : PROLOG


Introduction 6

1) Présentation du langage C

▪ La programmation procédurale ?

➢ Dans la programmation procédurale

❑ Le programme est divisé en petites parties appelées procédures ou fonctions.

❑ Comme son nom l’indique, la programmation procédurale contient une procédure étape par étape à exécuter.

❑ Les problèmes sont décomposés en petites parties et ensuite, pour résoudre chaque partie, une ou plusieurs fonctions sont

utilisées.
Introduction 7

2) Caractéristiques de C

▪ Pourquoi utiliser C ?

➢ Un langage très puissant.

❑ Il comporte un grand nombre de fonctionnalités et de nombreuses bibliothèques de programmes dans divers domaines.

❑ Il fonctionne sur de nombreuses plates-formes comme Windows, Linux, Mac.

➢ Un langage rapide (en matière de vitesse d'exécution)

❑ Il est capable de très bien fonctionner même lors de la gestion de nombreuses données.

➢ Un langage offre un contrôle très précis sur la gestion des ressources.

❑ Il permet aux programmeurs d'accéder directement à la mémoire de l'ordinateur

→ ce qui est utile pour le développement de pilotes de périphériques, de systèmes d'exploitation et d'applications à haute

performance.
Introduction 8

2) Caractéristiques de C

▪ Pourquoi utiliser C ?

▪ Exemples d’utilisation :

Développement de nouveaux langages de programmation Développement des systèmes

C++/C# Python Java PHP Windows Linux iOS

Création des jeux vidéo Développement des logiciels

Photoshop Firefox MySQL


Tic_tac_toe The Dino game
Introduction 9

3) Aperçu sur la programmation avec C

▪ Structure d'un programme C ?

➢ La structure d’un programme en C est la suivante :

Entête : Appel des bibliothèques


Déclaration de constantes Partie I : Déclaration
Déclaration de variables
Déclaration et définition des fonctions

Fonction principale (main)


{
Déclaration de variables Partie II : Corps du programme
Les instructions
retourner un entier
}
Introduction 10

3) Aperçu sur la programmation avec C

▪ Structure d'un programme C ?

❑ Un fichier source est un simple fichier texte dont l'extension conventionnellement .c pour les sources en langage C.

❑ Un programme C peut être composé d'un grand nombre de modules, chaque module est composé de fonctions. Parmi l'ensemble des
modules, une fonction particulière, nommée main (), doit obligatoirement exister. Elle doit être unique dans le programme. Ce sous-
programme est appelé généralement programme principal.

❑ Le programme principal : la fonction main () représente le point d'entrée pour l'exécution du programme, elle contient les instructions qui
doivent être exécutées.

Remarque : Le langage C distingue les minuscules, des majuscules. Les mots réservés du langage C doivent être écrits en minuscules :
la fonction principale doit être appelée main() en minuscule et non Main() ou MAIN().
Introduction 11

3) Aperçu sur la programmation avec C

▪ Exemple d'un programme C ?

➢ Un programme très simple affichant le message « Hello world! » à l'écran

#include <stdio.h> Le mot include avec '#' indique au compilateur d'inclure le fichier stdio dans le fichier du programme ci-dessus
/* bibliothèque d'entrées-sorties standard */

int main() Lorsque le programme est chargé dans la mémoire, la fonction main () et est la première fonction à être exécutée
{
printf ( "Hello world!“) ; Cette déclaration afficher notre "Hello world!“ sur le moniteur à l'aide de la fonction (printf)

return 0 ; Lorsqu'un programme termine son exécution, il envoie une valeur au système d'exploitation (0)
} ➔ Cela signifie que « tout s'est bien passé! »
Rq : Si aucune instruction return n'est présente, la fonction principale renvoie 0 par défaut

Remarque : Il convient de noter que bien que certaines anciennes versions de compilateurs C autorisent l'utilisation de void main()
→ Cela n'est pas conforme à la norme C et n'est pas recommandé.
Introduction 12

3) Aperçu sur la programmation avec C

▪ Compilation et génération du fichier exécutable ?

➢ Une fois le fichier source (.c) écrit, il est nécessaire de convertir les instructions en un langage machine (fichier .obj) pour que
l'ordinateur exécute le programme (fichier .exe). C'est le rôle du compilateur.

➢ Un compilateur traduit le code source d'un programme écrit dans un langage évolué (exemple langage C) en un langage utilisable par
l'ordinateur ou langage machine.

❑ .c : fichier source

❑ .obj : fichier compilé

❑ .exe : fichier exécutable


fichier.c fichier. obj fichier.exe
Introduction 13

3) Aperçu sur la programmation avec C

▪ Comment compiler un programme C ?

➢ Pour transformer du code source C en un programme exécutable, il faut utiliser un logiciel : le compilateur

➢ Il existe divers compilateurs de programmes écrits en C, parmi lesquels : gcc (Gnu C Compiler), Clang et Visual C++ (Microsoft)

➢ Il existe des environnements de développement intégré qui permet de concevoir, de compiler, d’analyser les éventuels problèmes et

d'exécuter les programmes et tout cela sur un même logiciel.

❑ En ligne : onlinegdb, mycompiler, programiz, etc.

❑ Hors-ligne (version desktop): Code:: Blocks , DEV C++, Microsoft Visual C++, etc.

Onlinegdb : https://www.onlinegdb.com/online_c_compiler
Mycompiler : https://www.mycompiler.io/fr/online-c-compiler
Programiz : https://www.programiz.com/c-programming/online-compiler/
Introduction 14

3) Aperçu sur la programmation avec C

▪ Environnement de travail (Installation) ?

➢ Compilateur Hors-ligne (version desktop): DEV C++ (Lien de téléchargement )

1) Télécharger la version 5.11 de DEV C++


Introduction 15

3) Aperçu sur la programmation avec C

▪ Environnement de travail (Installation) ?

2) Installation DEV C++

Fenêtre du choix de la langue. Choisissez Français, et le logiciel s'installera en Français. ...

Fenêtre pour accepter la licence GNU de Dev-C++ ...

Fenêtre du choix du type d'installation. ...

Fenêtre de l'emplacement d'installation. ...

Fenêtre de fin de l'installation.

Rq : Laisser la configuration par défaut


Introduction 16

3) Aperçu sur la programmation avec C

▪ Environnement de travail (Installation) ?

3) Ouvrir l’environnement DEV C++ et passer les étapes (> suivant, > suivant …)

Menu

Explorateur de Projet/Classes

Barre de statut
Introduction 17

3) Aperçu sur la programmation avec C

▪ Environnement de travail (Installation) ?

4) Créer un nouveau fichier source : Menu → Fichier → Nouveau → Fichier Source (Ctrl+N)
Introduction 18

3) Aperçu sur la programmation avec C

▪ Environnement de travail (Installation) ?

5) Écrire votre programme C dans fichier source


Introduction 19

3) Aperçu sur la programmation avec C

▪ Environnement de travail (Installation) ?

6) Sauvegarder votre travail : Menu → Fichier → Sauvegarder Sous …

Emplacement: Bureau

Nom du fichier : exercice


Type : C source files (*.c)
Introduction 20

3) Aperçu sur la programmation avec C

▪ Environnement de travail (Installation) ?

6) Compiler/ Exécuter le programme : Menu → Exécuter (F9) → Compiler | Menu → Exécuter → Exécuter (F10)

Pas d’erreurs dans le programme


Introduction 21

3) Aperçu sur la programmation avec C

▪ Environnement de travail (Installation) ?

6) Compiler / Exécuter le programme : Menu → Exécuter → Compiler (F9) | Menu → Exécuter → Exécuter (F10)
Les éléments de base du langage C
Les éléments de base du langage C 23

1) Les commentaires

• Les commentaires forment un moyen pour mettre du texte arbitraire dans le code source sans que le compilateur C l'interprète
• L’utilisation des commentaires a plusieurs avantages :
✓ Une documentation explicite du code pour faciliter la compréhension, la maintenance et la réutilisation des programmes.
✓ Explication du but et de la fonctionnalité du code.
✓ Détails sur l'historique ou le raisonnement derrière le code.
✓ Placement des droits d'auteur/licences, notes de projet, remerciements spéciaux, etc. directement dans la source.
• Il existe deux types de commentaires en C :

Commentaires sur une seule ligne Commentaires sur multi-lignes

▪ Il est introduit par double barre oblique // ▪ La séquence /* est utilisée pour déclarer le début du commentaire
▪ Il commence dés // et se termine à la fin de la ligne et */ est utilisée pour déclarer la fin du commentaire
▪ Exemple : ▪ Exemple :
/*
// Ceci est un commentaire sur une seule ligne Ceci est un bloc de commentaires.
*/
Les éléments de base du langage C 24

2) Les variables ► Définition

▪ Comme la plupart des langages de programmation, le C utilise la notion de variable.


▪ Une variable peut être vue comme une zone de la mémoire qui comprend une certaine valeur.
▪ Une variable possède trois caractéristiques :
➢ Un identificateur : le nom par lequel la donnée est désigné
➢ Un type : la nature de la donnée contenue dans la variable
➢ Une valeur : par exemple, si la donnée est un nombre sa valeur pourra être 10

▪ Règles pour les identificateurs :


➢ Doivent commencer par une lettre : 1note × note1 ✓
➢ Ne doivent pas contenir des espaces ni de symboles : note exam × #noteexam ×
➢ L’utilisation du caractère souligné « _ » est autorisé : note_exam ✓ (le seul caractère spécial autorisé)
➢ Distinction entre les majuscules et les minuscules : Etudiant ≠ etudiant
➢ Les accents ne sont pas autorisés : année × → annee ✓
➢ Les mots clés réservés du C sont exclus : typedef × default ×
Les éléments de base du langage C 25

2) Les variables ► Définition

▪ La liste des types utilisés en C :

Description Type Taille (octet) Plage de valeurs


Caractères Pour les caractères char 1 -128 …127
Pour les caractères non signés unsigned char 1 0 … 255
Entiers Pour les entiers de petite taille short int 2 -32768 … 32768
Pour les entiers de petite taille non signés unsigned short 2 0 … 65535
Pour les entiers de grande taille long int 4 -2 147 483 648 … 2 147 483 647
Pour les entiers de grande taille non signés unsigned long int 4 0 … 4 294 967 295
Pour les entiers de taille standard int 2 ou 4 Comme short ou long
Pour les entiers non signés unsigned int 2 ou 4 Comme unsigned short ou unsigned long
Réels Pour les nombres réels en simple précision. float 4 ±1.175 10-38 … ±3.402 10+38
Pour les nombres réels en double précision. double 8 ±2.225 10-308 … ±1.797 10+308
Pour les nombres réels de grande taille. long double 10 ±3.4 10-4932 … ±1.1 10+4932
Booléen Pour les variables booléennes. bool 1 true, false

Rq : l’espace occupé par un entier (2 ou 4 octets) dépend de la machine sur laquelle s'exécute le nécessite l’utilisation d’une bibliothèque
programme (32/64 bits) spécifique #include <stdbool.h>
Les éléments de base du langage C 26

2) Les variables ► Définition

▪ La liste des types utilisés en C :


Exemple1 : La représentation de l'entier 5 en mémoire dépend du type de données que vous utilisez.

Type de données Taille (octets) La représentation binaire


short int x = 5 2 octets (16 bits) 0000 0000 0000 0101 (bit de signe : 0 = Positif / 1 = Négatif)
unsigned short x = 5 2 octets (16 bits) 0000 0000 0000 0101 (sans bit de signe)
long int x = 5 4 octets (32 bits) 0000 0000 0000 0000 0000 0000 0000 0101
unsigned long int x = 5 architecture de système 0000 0000 0000 0000 0000 0000 0000 0101 (32 bits)
32 bits / 64 bits
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
int x = 5 architecture de système
0000 0101 (64 bits)
32 bits / 64 bits
unsigned int x = 5 architecture de système unsigned = sans bit de signe
32 bits / 64 bits

Exemple2 : donner une valeur qui n’est conforme au type de donnée :


▪ short int x = -33768 (Plage de valeurs de short int : -32768 … 32768)
→ warning: overflow in conversion from ‘int’ to ‘short int’ changes value from ‘-33768’ to ‘31768’
Les éléments de base du langage C 27

2) Les variables ► Définition

▪ La liste des types utilisés en C :


Exemple 3 : différence entre les types float, double et long double.
Précision de float : 6 chiffres significatifs
Précision de double : 15 chiffres significatifs
Précision de long double : 18 chiffres significatifs

Le comportement du compilateur concernant les déclarations suivantes:


float x = 15.123456 → Affiche 15.123456
float x = 15.1234567 → 15.1234567 → Affiche 15.123457 (arrondi = 7 >5 → 6+1 )
float x = 15.123456789 → 15.123456789 → Affiche 15.123457 (arrondi)
double x= 15.123456789123456 → Affiche 15.123457 → Personnaliser l’affichage pour afficher les 15 chiffres après la virgule
(voir diapo 27 )

arrondi = si le dernier chiffre est inférieur à 5, arrondissez le chiffre précédent vers le bas. En revanche, s'il est supérieur ou égal à 5,
il faut arrondir le chiffre précédent vers le haut.
Les éléments de base du langage C 28

2) Les variables ► Déclaration

▪ Toute variable utilisée en C doit être déclarée.


▪ La déclaration d’une variable
➢ Syntaxe :
type identificateur;
➢ Exemples :
int age ; // Cette déclaration définit une variable d'identificateur age qui contient un entier de type int
float moyenne ; // Cette déclaration définit une variable d'identificateur moyenne qui contient un réel de type float

▪ Rq : Plusieurs variables peuvent être déclarées simultanément si elles ont le même type (à travers une séparation par des virgules)
➢ Syntaxe :
type identificateur1 , identificateur2 ;
➢ Exemple :
int jour, mois, annee ; // Cette déclaration définit trois variables (jour, mois, annee ) de type int
Les éléments de base du langage C 29

2) Les variables ► Déclaration

▪ Une variable peut être initialisée en lui affectant une valeur avant de l’utiliser.

▪ L’affectation d’une valeur à une variable se fait à travers l’opérateur =

▪ L’affectation peut être effectuée de deux manières différentes :

• soit lors de la déclaration de la variable • soit après de la déclaration de la variable


➢ Exemple : ➢ Exemple :
int a = 4 ; char c = ‘a’ ; bool b = true ; int r ;
r = 6;

Rq : Il est possible également de faire plusieurs affectations en même temps en enchaînant plusieurs fois l'opérateur =
➢ Exemple :
int a = b = 0 // initialisation des deux variables a et b à 0
Les éléments de base du langage C 30

3) Les constantes

► Définition
▪ Une constante est une donnée qui ne change pas au cours de l’exécution d’un programme.
➢ Il peut arriver que la valeur d’une variable ne doive pas changer après l’initialisation.
▪ Une constante peut être de n’importe quel type (entier, réel, caractère, … ).

► Déclaration et initialisation
▪ Il existe deux méthodes simples pour définir des constantes : en utilisant le préprocesseur #define ou le mot clé const.

En utilisant le préprocesseur #define En utilisant le mot clé const


Syntaxe #define identificateur valeur const type identificateur = valeur ;
Exemple #define maximum 100 const int maximum = 100 ; // déclaration d’une constante de type int
#define c ‘A' const char c = ‘A’ ; // déclaration d’une constante de type caractère
#define NOMBRE_PI 3.1415927

Rq : Une constante doit être obligatoirement déclarée et initialisée sur la même ligne
Les éléments de base du langage C 31

3) Les constantes

► #define vs const
▪ En C, const et #define présentent quelques différences en termes de fonctionnement et de cas d'utilisation.

Aspect const #define


Sécurité des types Oui, conserve le type de la variable Non, aucune sécurité des types
Allocation de mémoire Alloue de la mémoire pour chaque variable Aucune allocation de mémoire

Portée Respecte la portée des blocs et fonctions Portée globale, pas de restrictions
Préprocesseur Ne peut pas être utilisé pour la substitution de texte Utilisé pour la substitution de texte
Débogage Permet l'inspection des valeurs pendant le débogage Peut rendre le débogage plus difficile

▪ const est préférable lorsque vous avez besoin d'une variable constante avec une sécurité des types et une portée,
▪ #define est plus adapté pour la création de macros pour la substitution de texte ou la définition de constantes simples sans souci
de sécurité des types ou de portée.
Exemple : #define CARRE(x) ((x) * (x))
Les entrées-sorties
Les entrées / sorties en C 33

1) Introduction

▪ Les entrées/sorties désignent les opérations de lecture et d'écriture de données (afficher des informations à l'écran ou à lire des données

tapées au clavier).

▪ Le C utilise une bibliothèque standard contenant un ensemble de fonctions qui assurent la gestion des opérations d’E/S

➔ Cette bibliothèque est nommée stdio

➔ Cette nomination est une abréviation de Standard Input and Output en anglais, qui signifie "entrée/sortie standard".

➔ L’appelle de cette bibliothèque se fait suivant la syntaxe suivante :

#include <stdio.h>
Les entrées / sorties en C 34

2) Les opérations de sorties

▪ Ce type d’opérations permet d’ afficher des informations à l'écran. Pour ce faire, il existe une fonction nommée (printf)

1) Afficher une chaine statique

➢ La syntaxe de l'utilisation de cette fonction est la suivante :

printf ("chaine statique") ;

➢ Exemple : On veut afficher un message pour dire bonjour

printf ("Bonjour LSI1 ") ;

➢ Opérateurs d'échappement qui peuvent être utilisés dans la chaine statique :

Opérateur Signification Opérateur Signification


\a Bip sonore (bell) \n retour à la ligne
\b un caractère de retour arrière (backspace) \t tabulation
\f début de page suivante \v retour forcé
\r retourner au début de la ligne \\ affiche un antislash
Les entrées / sorties en C 35

2) Les opérations de sorties

▪ Ce type d’opérations permet d’ afficher des informations à l'écran. Pour ce faire, il existe une fonction nommée (printf)

2) Afficher le contenu d’une ou plusieurs variables

➢ La syntaxe de l'utilisation de cette fonction est la suivante :

printf ("Indicateurs_de_Format", nom_var1, nom_var2, …, nom_varN) ;

Indicateur de Format Signification Indicateur de Format Signification


%c caractère %f float (six chiffres après la virgule)
%d décimal %.2f %.3f %.15f … float avec X chiffres après la virgule
%x et %X hexadécimal %s chaîne de caractères

➢ Exemples :

printf ("%d", n) ; // afficher le contenu d’une variable de type décimal

printf ("%d et %d", n1 , n2) ; // afficher le contenu de plusieurs variables à la fois


Les entrées / sorties en C 36

3) Les opérations d’entrées

▪ Ce type d’opérations permet de lire des données tapées au clavier. Pour ce faire, il existe une fonction nommée (scanf).

1) Lire le contenu d’une seule variable

➢ La syntaxe de l'utilisation de cette fonction est la suivante :

scanf ("code_format_variable", &nom_var) ;

▪ Cette fonction permet d'affecter à la variable nom_var les informations saisies par l'utilisateur.
▪ Le caractère & doit toujours figurer devant le nom de la variable à affecter.
▪ Comme la fonction printf, il est nécessaire de spécifier le format de la variable.

➢ Exemple :

printf("Donner la valeur de a : ");


scanf("%d", &a); // Lecture du contenu de la variable a
Les entrées / sorties en C 37

3) Les opérations d’entrées

▪ Ce type d’opérations permet de lire des données tapées au clavier. Pour ce faire, il existe une fonction nommée (scanf).

2) Lire le contenu de plusieurs variables à la fois

➢ La syntaxe de l'utilisation de cette fonction est la suivante :

scanf ("code_format_variable1 code_format_variable2 … code_format_variableN ", &nom_var1, &nom_var2, … ,&nom_varN) ;

▪ Il est possible en C de saisir plusieurs variables de même ou de types différents en une seule instruction.
▪ Cela se fait en spécifiant le format de chaque variable dans la chaîne de format, séparé par des espaces.
▪ Cependant, l’entrée d’une autre chose que les valeurs attendues, cela peut entraîner des erreurs de saisie ou de lecture incorrecte.

➢ Exemple :

printf("donner les valeurs de a et b");


scanf("%d %d", &a, &b); // Lecture du contenu des variables a et b
Les entrées / sorties en C 38

4) Exercice d’application

▪ Écrire un programme en C qui permet d’afficher une date donnée par l’utilisateur (sous la forme JJ/MM/AAAA)

Algorithme Affichage #include <stdio.h>


Variables jour , mois , annee : entier int main()
Début {
Écrire ("Donner le jour : ") , Lire (jour) int jour , mois , annee ;
Écrire ("Donner le mois : ") , Lire (mois) printf("Donner le jour :"); scanf ("%d",&jour) ;
Écrire ("Donner l’année : ") , Lire (annee) printf("Donner le mois :"); scanf ("%d",&mois) ;
Écrire (" La date est : " , jour, "/ ", mois, "/ " , annee) printf("Donner l’année :"); scanf ("%d",&annee) ;
Fin printf("La date est : %d / %d / %d", jour, mois, annee);
return 0;
}
Les opérateurs
Les opérateurs 40

1) Introduction

▪ Les opérateurs sont des symboles permettant d'effectuer des opérations sur des valeurs.

▪ Il existe plusieurs types d’opérateurs :

➢ Les opérateurs d'affectation

➢ Les opérateurs arithmétiques

➢ Les opérateurs de comparaison

➢ Les opérateurs logiques

➢ Les opérateurs unaires

➢ Les opérateurs conditionnels


Les opérateurs 41

2) Les opérateurs d'affectation

▪ Ce type d’opérateur permet d’affecter une valeur à une variable.


▪ Les membres de cette opération doivent être de même nature

Opérateur Signification Exemple


= ▪ Un opérateur d'affectation simple i=2
▪ Affectation de contenu du member de droit au membre de gauche
+= ▪ Un opérateur d'affectation additionneur i+=2 i=i+2
▪ Affectation en additionnant le contenu du member de droit avec le contenu du membre de gauche
-= ▪ Un opérateur d'affectation soustracteur i-=2 i=i-2
▪ Affectation en soustractant le contenu du member de droit du contenu du membre de gauche
*= ▪ Un opérateur d'affectation multiplicateur i*=2 i=i*2
▪ Affectation en multipliant le contenu du member de droit par le contenu du membre de gauche
/= ▪ Un opérateur d'affectation diviseur i/=2 i=i/2
▪ Affectation en divisant le contenu du member de gauche sur le contenu du membre de droit
%= ▪ Un opérateur d'affectation modulo i%=2 i=i%2
▪ Affectation en calculant le reste de la division de contenu du member de gauche sur le contenu du
membre de droit
Les opérateurs 42

3) Les opérateurs arithmétiques

▪ Ce type d’opérateur permet de faire des opérations arithmétiques entre entiers ou entre réels.

Opérateur Signification Exemple


+ Un opérateur d’addition 5+2=7
- Un opérateur de soustraction 5–2=3
* Un opérateur de multiplication 5 * 2 = 10
/ Un opérateur de division 5/2=2
% Un opérateur de modulo (reste de la division ) 5%2=1➔{ 5=2*2+1}

▪ Une opération arithmétique peut faire intervenir des opérandes de types différents.
▪ Dans ce cas, le compilateur effectue des conversions temporaires et automatiques de types.
▪ Ces conversions sont effectuées suivant des règles qui possèdent une priorité descendante.
Les opérateurs 43

3) Les opérateurs arithmétiques

▪ Les règles de conversion sont :

N° Règle Si un des deux types est alors l'autre est converti en


Règle 1 long double long double
Règle 2 double double
Règle 3 float float
Règle 4 unsigned long unsigned long
Règle 5 long long
Règle 6 unsigned int unsigned int

▪ Règle 1 est prioritaire par rapport à Règle 2, Règle 2 est prioritaire par rapport à Règle 3 et ainsi de suite.
Les opérateurs 44

4) Les opérateurs de comparaison

▪ Les opérateurs de comparaison comparent deux valeurs et renvoient Vrai ou Faux:

Opérateur Signification Exemple


== Egal x == y
!= Différent x != y
< Strictement inférieur x<y
<= Inférieur ou égal x <= y
> Strictement supérieur x>y
>= Supérieur ou égal x >= y
Les opérateurs 45

5) Les opérateurs logiques

▪ Ce type d’opérateur permet d’effectuer des tests logiques sur des données de types booléen et/ou binaire.
▪ Le résultat de ces tests est une valeur entière : true (1) / false (0)

Opérateur Signification Exemple Resultat


! ▪ Un opérateur logique inverseur (NOT) bool x = true; false (0)
▪ permet d’inverser une valeur !x
&& ▪ Un opérateur logique inverseur (AND) bool x = true; false (0)
▪ permet de vérifier si les 2 valeurs soumises sont vraies bool y = false;
▪ teste la 1ère valeur et si elle est false il renvoie directement false sans tester la 2ème valeur x && y
|| ▪ Un opérateur logique inverseur (OR) bool x = true; true (1)
▪ permet de vérifier si au moins une des valeurs soumises est vraie bool y = false;
▪ teste la 1ère valeur et si elle est true il renvoie directement true sans tester la 2ème valeur x || y

▪ Rq : Pour afficher une variable booléenne, on utilise le format %d car bool est un type entier (0 pour false, 1 pour true)
Les opérateurs 46

6) Les opérateurs unaires

▪ Ce type d’opérateur ne nécessite qu'un opérande. Ils sont appelés opérateurs unaires.

Opérateur Signification Formes Exemple Resultat


++ ▪ Un opérateur d’incrémentation ▪ Forme 1 : pré-incrémentation int i = 1; i=2
▪ affecte puis incrémente la valeur int j = i++ ; j= 1
▪ Forme 2 : post-incrémentation int i = 1; i=2
▪ incrémente puis affecte la valeur int j = ++i ; j= 2
-- ▪ Un opérateur de décrémentation ▪ Forme 1 : pré-décrémentation int i = 1; i=0
▪ affecte puis décrémente la valeur int j = i--; j= 1
▪ Forme 2 : post-décrémentation int i = 1; i=0
▪ décrémente puis affecte la valeur int j = --i ; j= 0
Les opérateurs 47

7) Les opérateurs conditionnels

▪ Ce type d’opérateur permet de tester une expression et de retourner une valeur suivant le résultat du test.
▪ Syntaxe :
Expression ? Valeur renvoyée si Expression vaut vrai : Valeur renvoyée sinon
▪ Exemple :
int i = 2 , j = 3 , max ;
max = i > j ? i : j ;
// la variable max reçoit la valeur maximale entre les deux entiers i et j
// Expression : i > j
// Valeur renvoyée si Expression vaut vrai : i
// Valeur renvoyée si Expression vaut faux : j
// Résultat : la variable max va recevoir la valeur de j puisque i n’est pas supérieur à j
Les opérateurs 48

8) L’opérateur (sizeof)

▪ Cet opérateur permet de retourner la taille en octets d'un type ou d'une variable.
▪ Le type ou la variable sont passés en argument.
▪ Syntaxe :
sizeof (type) | sizeof (variable)
▪ Exemple :
unsigned int t ; float r ;
t = sizeof (char) ; // t reçoit la taille en octets de type char qui vaut 1
t = sizeof (r) ; // t reçoit la taille en octets de la variable r qui est de type float, t vaut 4
Les opérateurs 49

9) Les conversions de type

► Les conversions forcées (casting)


▪ Il est possible de convertir explicitement une valeur en un type quelconque en forçant la transformation à l'aide de la syntaxe suivante:
Syntaxe :
(TypeDestination) Expression
Exemples :
char a = 3; // déclaration d’une variable d’identificateur (a) de type caractère (char) initialisée à ‘3’
int b = 4 ; // déclaration d’une variable d’identificateur (b) de type entier (int) initialisée à 4
float r ; // déclaration d’une variable d’identificateur (r) de type entier (float)
r = (float) a/b ; // r reçoit le résultat de la division de a / b qui est 0.75
// La valeur de a est explicitement convertie en float
// Automatiquement r convertira l'autre opérande (b) en float et effectuera une division rationnelle → r = 0.75

Rq : Les contenus de a et de b restent inchangés ; seulement les valeurs utilisées dans les calculs sont converties.
Les opérateurs 50

9) Les conversions de type

► Les conversions implicites (automatique)


▪ Si un opérateur a des opérandes de différents types, les valeurs des opérandes sont converties automatiquement (implicitement) dans un
type commun.
▪ En général des types plus 'petits' en des types plus 'larges'; de cette façon on ne perd pas en précision.
▪ Lors d'une affectation, le résultat est toujours converti dans le type de la destination. Si ce type est plus faible, il peut y avoir une perte de
précision.
▪ Exemple de conversion : float → int
float a = 1.5 ; // déclaration d’une variable d’identificateur (a) de type réel (float) initialisée à 1.5
int r ; // déclaration d’une variable d’identificateur (r) de type entier (int)
r = a ; // r reçoit la valeur de (a) qui est convertie implicitement en un entier (int) → r = 1 (perte de la partie décimale)

➔ Il existe donc une hiérarchie pour les conversions : char < short int < int < long int < float < double
Les opérateurs 51

10) La priorité des opérateurs

▪ Les opérateurs présentés dans le tableau ci-dessous possèdent une priorité descendante.
▪ Les opérateurs d'une même ligne possèdent la même priorité.

Opérateur
( ) [ ] ->
(casting) sizeof & ! ++ -- new delete
* / %
+ -
< <= > >=
== != Rq :
&& Si une expression fait intervenir en même temps plusieurs opérateurs qui ont
|| la même priorité
? : alors l'opérateur situé le plus à gauche dans l'expression sera le premier
= += -= *= /= %=
évalué
Les opérateurs 52

Division en C :
10) La priorité des opérateurs int = int / int
float = float / float
float = int / float
▪ Exercice : Donner les résultats des expressions suivantes : float = float / int

Expression Opérations résultat


8/4*6 Priorité : * et / ont la même priorité → respecter l’ordre 8 / 4 = 2 ➔ 2 * 6 = 12
8*6/4 Priorité : * et / ont la même priorité → respecter l’ordre 8 * 6 = 48 ➔ 48/4 = 12
28 / ( 3 * 4 ) Priorité : ce qui est entre les parenthèses puis la division. (3*4) = 12 ➔ 28 / 12 = 2 (!! normalement 2 .33)
Type de l’opération : int = int / int Puisque le résultat est un entier donc =2

3/ 4 + 6 Priorité : Division puis addition. 3/4 = 0 (!! normalement 0.75) ➔ 0+6= 6


Type de l’opération : int = int / int Puisque le résultat est un entier donc =6

3+6/4 Priorité : Division puis addition. 6/4 = 1 (!! normalement 1.5) ➔ 3 +1 = 4


Type de l’opération : int = int / int Puisque le résultat est un entier donc =4

( float ) 2 / 4 Priorité : Conversion puis division. conversion de 2 en float = 2.0


Type de l’opération : float = float / int ➔ 2.0 / 4 = 0.5

( float ) ( 2 / 4 ) Priorité : Division puis conversion. (2/4)=0


Type de l’opération : float = float / float ➔ conversion de 0 en float = 0.00000

-3 + 4 % 5 / 2 Priorité : Modulo puis division puis addition. 4 % 5=4 ➔ 4 / 2 =2 ➔ -3 + 2 = -1


Les structures de contrôle
Les structures de contrôle 54

Introduction

▪ Les structures de contrôles permettent de réaliser des tests, et suivant le résultat de ces tests, d’exécuter des parties de code différentes.

▪ Il existe trois catégories de structures de contrôle :

1) Les instructions conditionnelles.

2) Les instructions inconditionnelles.

3) Les instructions répétitives.


Les structures de contrôle 55

1) Les instructions conditionnelles

► Définition

❑ Les instructions conditionnelles sont des structures de contrôle qui permettent à un programme d'effectuer des actions différentes en

fonction de la valeur d'une expression booléenne.

❑ Il existe trois types d’instructions conditionnelles :

• Les instructions conditionnelles simples

• Les instructions conditionnelles imbriquées

• Les instructions conditionnelles multiples


Les structures de contrôle 56

1) Les instructions conditionnelles

► Les instructions conditionnelles simples

L’instruction conditionnelle « if »
Cette structure de contrôle permet d'exécuter une instruction ou une suite d'instructions seulement si une condition est vraie.
❑ Organigramme

Les conditions s'expriment avec des opérateurs


logiques ou des opérateurs de comparaisons.

Suite du programme
Les structures de contrôle 57

1) Les instructions conditionnelles

► Les instructions conditionnelles simples

L’instruction conditionnelle « if »
Cette structure de contrôle permet d'exécuter une instruction ou une suite d'instructions seulement si une condition est vraie.
❑ Syntaxe

En Algorithmique En langage C Toutes les conditions sont


entre des parenthèses
Si (condition) alors if (condition)
Si la condition est vraie alors
{
Instruction1 Instruction1 l'instruction ou le bloc d'instructions
Instruction2 Instruction2 qui suit le "if" est exécuté
…… ……

Finsi } S'il y a plusieurs instructions après le "if",


on les encadre par des accolades : { }
Les structures de contrôle 58

1) Les instructions conditionnelles

► Les instructions conditionnelles simples

L’instruction conditionnelle « if »
Cette structure de contrôle permet d'exécuter une instruction ou une suite d'instructions seulement si une condition est vraie.
❑ Exemple

int a; // Déclaration d’une variable d’identificateur « a » de type « int »


printf(" Tapez la valeur de a : ") ;
scanf ("%d", &a) ; // Lecture de la variable a
if (a > 5) { // Tester si a est (a > 5)
printf("a est plus grand que 5" ) ; // message affiché si la condition est vraie
}
Les structures de contrôle 59

1) Les instructions conditionnelles

► Les instructions conditionnelles simples

L’instruction conditionnelle « if ... else »


Cette structure de contrôle permet d'exécuter une instruction si une condition est vraie, ou une autre instruction si elle est fausse.
❑ Organigramme

Les conditions s'expriment avec des


Condition opérateurs logiques ou des opérateurs de
Vrai? comparaisons.
Oui Non

instruction1’ instruction1’
instruction2’ instruction2’
…… ……

Suite du programme
Les structures de contrôle 60

1) Les instructions conditionnelles

► Les instructions conditionnelles simples

L’instruction conditionnelle « if ... else »


Cette structure de contrôle permet d'exécuter une instruction si une condition est vraie, ou une autre instruction si elle est fausse.
❑ Syntaxe
En Algorithmique En langage C Si la condition est vraie alors
Si (condition) alors l'instruction ou le bloc d'instructions
if (condition)
{ qui suit le "if" est executé
Instruction1
Instruction2 Instruction1
sinon ou le bloc d'instructions qui suit le
…… Instruction2
…… "else" est exécuté
Sinon }
else
{ S'il y a plusieurs instructions après le "if",
Instruction1
Instruction2 Instruction1 ou après "else" , on les encadre par des
…… Instruction2
…… accolades : { }
Fin si }
Les structures de contrôle 61

1) Les instructions conditionnelles

► Les instructions conditionnelles simples

L’instruction conditionnelle « if ... else »


Cette structure de contrôle permet d'exécuter une instruction si une condition est vraie, ou une autre instruction si elle est fausse.
❑ Exemple

int a; // Déclaration d’une variable d’identificateur « a » de type « int »


printf(" Tapez la valeur de a : ") ;
scanf ("%d",&a); // Lecture de la variable a
if (a > 5) { // Tester si a est (a > 5)
printf(" a est plus grand que 5 ") ; // message affiché si la condition est vraie
} else {
printf(" a est plus petit ou égal à 5 ") ; // message affiché si la condition est fausse
}
Les structures de contrôle 62

1) Les instructions conditionnelles

► Les instructions conditionnelles simples

L’instruction conditionnelle « if ... else if … else »


Cette structure de contrôle permet d’enchaîner un ensemble de tests pour examiner plusieurs valeurs possibles.
❑ Organigramme

Oui Condition 1 Non


Vrai?

Oui Condition 2 Non


Instruction 1’ Vrai?

Instruction 2’ Oui Condition n Non


Vrai?

Instruction n-1’ Instruction n’

Suite du programme
Les structures de contrôle 63

1) Les instructions conditionnelles

► Les instructions conditionnelles simples

L’instruction conditionnelle « if ... else if … else »


Cette structure de contrôle permet d’enchaîner un ensemble de tests pour examiner plusieurs valeurs possibles.
❑ Syntaxe
En Algorithmique En langage C
Les tests sont effectués chacun leur tour et s’ils
Si (condition 1) alors if (condition1) { ne sont pas satisfait, on passe au test suivant.
Instruction1
Instruction1 ……
…… }
Sinon si (condition 2) alors else if (condition2) {
Instruction2 ▪ Si aucun test n’est satisfait, alors c’est la
Instruction2 …… dernière clause "else" qui est exécutée.
…… }
Sinon else {
▪ Ce dernier "else" est facultatif (donc si on
Instruction n
Instruction n ne le met pas, il est possible que rien ne soit
……
…… exécuté)
}
Fin si
Les structures de contrôle 64

1) Les instructions conditionnelles

► Les instructions conditionnelles simples

L’instruction conditionnelle « if ... else if … else »


Cette structure de contrôle permet d’enchaîner un ensemble de tests pour examiner plusieurs valeurs possibles.
❑ Exemple

int a; // Déclaration d’une variable d’identificateur «a» de type «int»


printf(" Tapez la valeur de a : ") ;
scanf ("%d",&a); // Lecture de la variable a
if (a > 5) {
printf(" a est plus grand que 5 ") ; // message affiché si la condition (a > 5) est vraie
} else if (a < 5) {
printf(" a est plus petit que 5 ") ; // message affiché si la condition (a < 5) est vraie
} else {
printf(" a est égale à 5 ") ; // message affiché si les conditions 1 et 2 sont fausses
}
Les structures de contrôle 65

1) Les instructions conditionnelles

► Les instructions conditionnelles multiples

L’instruction conditionnelle « switch »


L'instruction switch permet de tester plusieurs valeurs pour une expression.
❑ Organigramme

Oui Expression Non


= valeur1?

Oui Expression Non


Instruction 1’
= valeur2?

Instruction 2’ Oui Expression Non


= valeur n?

Instruction n-1’ Instruction n’

Suite du programme
Les structures de contrôle 66

1) Les instructions conditionnelles

► Les instructions conditionnelles multiples

L’instruction conditionnelle « switch »


L'instruction switch permet de tester plusieurs valeurs pour une expression.
❑ Syntaxe
La valeur de l’expression doit être de type scalaire discret et
En Algorithmique En langage C non réel.
▪ un scalaire est une quantité qui est décrite uniquement par sa
Selon (Expression) faire switch (Expression) {
case valeur1 : valeur numérique (Les types : char , short int , int , long int)

valeur1 : Instruction 1 Instruction1; break; ▪ discret signifie qu'il s'agit d'une valeur spécifique plutôt que
valeur2 : Instruction 2 case valeur2 :
d'une plage continue de valeurs (1..5 × )
valeur3 : Instruction 3 Instruction2; break;
…… case valeur3 :
Instruction3; break; Le mot clé "break" indique la sortie de la structure
Sinon conditionnelle.
……
Traitement par défaut default : Instruction
Fin si par défaut Le mot clé "default" précède la liste d'instructions qui sera
} exécutée si l'expression n'est jamais égale à une des valeurs.
Les structures de contrôle 67

1) Les instructions conditionnelles

► Les instructions conditionnelles multiples

L’instruction conditionnelle « switch »


L'instruction switch permet de tester plusieurs valeurs pour une expression.
❑ Exemple

int choix; // Déclaration d’une variable d’identificateur « choix » de type « int »


printf(" Tapez une valeur 1,2,3 ou 4 ") ;
scanf ("%d", &choix); // Lecture de la variable choix
switch (choix) { // Tester choix
case 1 : printf(" choix est égale 1 ") ; break;// message affiché si choix égale à 1 est vraie
case 2 : printf(" choix est égale 2 ") ; break; // message affiché si choix égale à 2 est vraie
case 3 : printf(" choix est égale 3 ") ; break; // message affiché si choix égale à 3 est vraie
default : printf(" choix est supérieur à 3 ") ; // message affiché si aucune des cases n’est vraie
}
Les structures de contrôle 68

1) Les instructions conditionnelles

► Exercice d’application

▪ Écrire un programme qui permet de saisir le n° de mois puis affiche la saison correspondante.

▪ Exemple :

n° mois=8 → affiche saison été

- 12,1,2 saison hiver

- 3,4,5 saison printemps

- 6,7,8 saison été

- 9,10,11 saison automne.


.
Les structures de contrôle 69

1) Les instructions conditionnelles

► Exercice d’application

▪ Écrire un programme qui permet de saisir le n° de mois puis affiche la saison correspondante.

▪ Solution en utilisant if ..elseif … else :

int mois;
printf(" Tapez un mois : ") ;
scanf ("%d", &mois);
if (mois==1 || mois==2 || mois==12) else if (mois==9 || mois==10 || mois==11 )

printf (" saison hiver") ; printf (" saison automne ") ;

else if (mois==3 || mois==4 || mois==5 ) else

printf (" saison printemps ") ; printf(" La valeur donnée n’est pas entre 1 ..12 ") ;

else if (mois==6 || mois==7 || mois==8 ) // message affiché si aucune des cases n’est vraie

printf (" saison été ") ;


Les structures de contrôle 70

1) Les instructions conditionnelles

► Exercice d’application

▪ Écrire un programme qui permet de saisir le n° de mois puis affiche la saison correspondante.

▪ Solution en utilisant switch:

int mois;
printf(" Tapez un mois : ") ;
scanf ("%d", &mois);
switch (mois) {
case 1 : case 2 : case 12: printf (" saison hiver") ; break;
case 3 : case 4 : case 5: printf (" saison printemps ") ; break;
case 6 : case 7 : case 8: printf (" saison été ") ; break;
case 9 : case 10 : case 11: printf (" saison automne ") ; break;
default : printf(" La valeur donnée n’est pas entre 1 ..12 ") ; // message affiché si aucune des cases n’est vraie
}
Les structures de contrôle 71

2) Les instructions répétitives

Le langage C dispose de trois structures pour le contrôle répétitif:

▪ La boucle while,

▪ La boucle do … while,

▪ La boucle for
Les structures de contrôle 72

2) Les instructions répétitives

► La boucle while

❑ Définition :

▪ La structure répétitive WHILE ou "TantQue… Faire " permet de répéter un traitement tant qu'une expression conditionnelle est vraie.

▪ Si d'emblée, la condition n'est pas vraie, le traitement ne sera pas exécuté.

▪ On voit donc que la structure répétitive "WHILE" a un point commun avec la structure conditionnelle: si la condition n'est pas vraie,

le traitement n'est pas exécuté.


Les structures de contrôle 73

2) Les instructions répétitives

► La boucle while

❑ Organigramme :

Les conditions s'expriment avec des


opérateurs logiques ou des opérateurs de
Condition comparaisons.
Vrai? Non

Oui

instruction1’
instruction2’
……

Suite du programme
Les structures de contrôle 74

2) Les instructions répétitives

► La boucle while

❑ Syntaxe :

En Algorithmique En langage C
Toutes les conditions sont entre deux parenthèses (……).

Tantque (condition) faire while ( condition)


{
Instruction1 Instruction1 Tant que la condition est vraie alors l'instruction ou le bloc
d'instructions qui suit le "While" est exécuté.
Instruction2 Instruction2
…… ……

Fin tanque } S'il y a plusieurs instructions après le "While" , on les


encadre par des accolades : { }
Les structures de contrôle 75

2) Les instructions répétitives

► La boucle while

❑ Exemple :

int i = 0 ; // Déclaration d’une variable d’identificateur « i » de type « int »


while (i<10) { // Tester si i < 10
printf(" La valeur de i est : %d \n", i) ; // Message pour afficher la valeur courante de i
i++; // incrémentation de i
}
printf("\n La valeur finale de i est : %d ", i) ; // Message pour afficher la valeur finale de i
Les structures de contrôle 76

2) Les instructions répétitives

► La boucle do ... while

❑ Définition :

▪ La structure répétitive "DO WHILE" ou "Répéter…Tant que " permet de répéter un traitement Tant qu'une condition est vraie.

▪ Le traitement est exécuté, puis la condition est vérifiée.

▪ On voit donc que la structure répétitive "DO WHILE" a aussi un point commun avec la structure conditionnelle: si la condition à la fin n'est

pas vraie, le traitement n'est pas exécuté.


Les structures de contrôle 77

2) Les instructions répétitives

► La boucle do ... while

❑ Organigramme :

instruction1’
instruction2’
……

Condition
= Vrai
Oui
Dans cette structure la condition est testée à la fin
Non pour garantir que le bloc d’instructions est
exécuté au moins une fois
Suite du programme
Les structures de contrôle 78

2) Les instructions répétitives

► La boucle do ... while

❑ Syntaxe :

En Algorithmique En langage C
Lorsque " do" est rencontré l'instruction ou le bloc d’instructions qui
suit le est exécutée, puis la condition est testée,
Répéter do si elle est vérifiée la boucle est répétée,
sinon l‘exécution continue à la première instruction après le "While"
{
Instruction1 Instruction1
Instruction2 Instruction2 S'il y a plusieurs instructions après le "do" , on les encadre
…… …… par des accolades : { }

Jusqu’à (condition) }while ( condition) ; Toutes les conditions sont entre deux parenthèses (……)
L’instruction "While (condition)" est suivie d'un point-virgule ;
(contrairement à la version de la structure répétitive WHILE)
Les structures de contrôle 79

2) Les instructions répétitives

► La boucle do ... while

❑ Exemple :

int i = 0 ; // Déclaration d’une variable d’identificateur « i » de type « int »


do {
printf(" La valeur de i est : %d \n ", i) ; // Message pour afficher la valeur courante de i
i++; // incrémentation de i
} while (i<10); // Tester si i < 10
printf("\n La valeur finale de i est : %d ", i) ; // Message pour afficher la valeur finale de i
Les structures de contrôle 80

2) Les instructions répétitives

► La boucle for

❑ Définition :

▪ La structure répétitive FOR est une structure répétitive qui itère le même traitement pour une plage de valeurs entières comprises entre

une borne inférieure et une borne supérieure.

▪ L’arrêt du traitement se réalise lorsqu’on dépasse l’une des bornes.


Les structures de contrôle 81

2) Les instructions répétitives

► La boucle for

❑ Organigramme :

instruction_d’initialisation
Les conditions s'expriment avec des
opérateurs logiques ou des opérateurs de
comparaisons.
Condition
Vrai? Non
Oui

instruction1’
instruction2’
……

instruction_d’incrémentation

Suite du programme
Les structures de contrôle 82

2) Les instructions répétitives

► La boucle for Le for prend trois arguments encadrés par deux


parenthèse (..) et séparés par des points-virgules.
❑ Syntaxe :

instruction_init : Une instruction


En Algorithmique En langage C d’initialisation. En général on initialise un
compteur avec cette instruction. Exemple i=0
Pour c de vi à vf faire for (instruction_init ; condition ; instruction_increment) condition : Une condition pour continuer la
{ boucle. En général on indique qu’un compteur
Instruction1 Instruction1 doit être inférieur à une certaine valeur
Instruction2 Instruction2 comme par exemple i<100
…… ……
} instruction_increment : Une instruction qui
Fin pour est exécutée à chaque fin de boucle, juste avant
de faire le test sur la condition pour continuer.
En général, on incrémente le compteur car ce
n’est pas automatique

C : compteur | vi : valeur initiale | vf: valeur finale


Les structures de contrôle 83

2) Les instructions répétitives

► La boucle for

❑ Exemple :

int i ; // Déclaration d’une variable d’identificateur « i » de type « int »


for (i=0 ; i<10 ; i++) {
printf(" La valeur de i est : %d \n ", i) ; // Message pour afficher la valeur courante de i
}

1 3
for (instruction_init ; condition ; instruction_increment){ 2/4

… 2
}
Suite du programme
Les structures de contrôle 84

2) Les instructions répétitives

► L’imbrication des boucles

❑ Définition :

▪ Il est possible de faire une imbrication pour tous les types de boucle. Cela consiste à placer une boucle dans le corps d'une autre boucle.

▪ On peut même imbriquer des boucles de types différents, comme une boucle for dans une boucle while.

▪ En théorie, il n'y a pas de limite au nombre d'imbrications possibles en C. Cependant, en pratique, le nombre d'imbrications est limité par

la taille de la pile d'exécution du programme.

Boucle for Boucle while

Boucle For Boucle For


… …
Fin Boucle For Fin Boucle For

Fin boucle for Fin while

Imbrication des boucles de même type Imbrication des boucles de type différent
Les structures de contrôle 85

2) Les instructions répétitives

► L’imbrication des boucles

❑ Syntaxe de l’imbrication des boucles (exp. Imbrication à 2 niveaux de la boucle for) :

En Algorithmique En langage C

Pour c1de vi1 à vf1 faire for (instruction_init1 ; condition1 ; instruction_increment1)


{
Pour c2 de vi2 à vf2 faire for (instruction_init2 ; condition2 ; instruction_increment2)
… {
Fin pour ……
}
Fin pour }
Les structures de contrôle 86

2) Les instructions répétitives

► L’imbrication des boucles

❑ Exemple:

1-1
int i, j; // Déclaration de deux variables « i » et « j » de type « int »
1-2
for (i = 1; i <= 3; i++) {
Résultat ? 1-3
for (j = 1; j <= 3; j++) {
2-1
printf("%d - %d \n", i, j); // Message pour afficher les valeurs courantes de i et j
2-2
}
2-3
}
3-1
3-2
3-3
Les structures de contrôle 87

2) Les instructions répétitives

► L’imbrication des boucles

❑ Précaution :
▪ Il est important de faire attention aux variables utilisées dans une boucle imbriquée.
▪ En effet, une variable déclarée dans la boucle externe est accessible dans la boucle interne.
▪ Il est donc important de ne pas modifier la valeur de cette variable dans la boucle interne.
→ cela pourrait affecter le comportement de la boucle externe.

int i, j; // Déclaration de deux variables « i » et « j » de type « int » Résultat ? 2-1


for (i = 1; i <= 3; i++) { 3-2
for (j = 1; j <= 3; j++) { 4-3
i = i + 1;
printf("%d - %d \n", i, j); // Message pour afficher les valeurs courantes de i et j
}
}
Les structures de contrôle 88

2) Les instructions répétitives

► Exercice d’application

Donner un programme qui permet d’afficher une pyramide ou un triangle rectangle de n lignes en étoiles.

▪ La hauteur du triangle est égale au nombre de lignes saisi par l’utilisateur.

▪ Le sommet de triangle doit être composé d’une seule étoile.

Exemple : n=5

*
**
***
****
*****
Les structures de contrôle 89

2) Les instructions répétitives

► Exercice d’application

Solution :

#include <stdio.h>
int main() {
int n, i , j;
printf("Donner le nombre de lignes : ") ; scanf ("%d", &n);
for (i = 1; i <= n; i++) { // Boucle externe (for) pour les lignes
for (j = 1; j <= i; j++) {// Boucle interne (for) pour les étoiles
printf("* ");
}
printf("\n");
}
return 0;
}
Les structures de contrôle 90

3) Les instructions inconditionnelles

Le langage C dispose de trois types d’instructions inconditionnelles :

▪ L'instruction break

▪ L'instruction continue

▪ L'instruction goto
Les structures de contrôle 91

3) Les instructions inconditionnelles

► L'instruction break
▪ L'instruction break peut être utilisée dans n'importe quelle boucle.
▪ Cette instruction provoque alors une interruption et une sortie immédiate de la boucle.
▪ Syntaxe : break ;

Exemple Exécution

int i; Début de l'itération 1


for(i=1 ; i <= 5 ; i++) { Bonjour
printf(" Début de l'itération %d \n", i) ; Fin de l'itération 1
printf(" Bonjour \n") ; Début de l'itération 2
if (i==3) Bonjour
break; Fin de l'itération 2
printf(" Fin de l'itération %d \n", i) ; Début de l'itération 3
} Bonjour
printf(" Après la boucle \n") ; Après la boucle
Les structures de contrôle 92

3) Les instructions inconditionnelles

► L'instruction continue
▪ L'instruction continue intervient également pour interrompre l'exécution des boucles
▪ Cette instruction ne provoque pas la sortie complète de la boucle, mais plutôt l'interruption de l'itération courante et le passage à
l'itération suivante de cette boucle.
▪ Syntaxe : continue ;

Exemple Exécution
int i; Début de l’itération 1
for(i=1 ; i <= 5 ; i++) { Début de l’itération 2
printf(" Début de l'itération %d \n", i) ; Début de l’itération 3
if (i < 3) Bonjour
continue ; Début de l’itération 4
printf(" Bonjour \n") ; Bonjour
} Début de l’itération 5
Bonjour
Les structures de contrôle 93

3) Les instructions inconditionnelles

► L'instruction goto
▪ L'instruction goto provoque un branchement immédiat du programme à un endroit prédéfini.
▪ Les boucles, les tests sont interrompus.
▪ L'endroit où reprend le programme est défini par une étiquette suivie du symbole.
▪ Syntaxe : goto NomEtiquette ; … NomEtiquette ;

Exemple Exécution
int i; Début de l'itération 1
for(i=1 ; i <= 5 ; i++) { Bonjour
printf(" Début de l'itération %d \n", i) ; Fin de l'itération 1
printf(" Bonjour \n") ; Début de l'itération 2
if (i == 3) Bonjour
goto Sortie ; Fin de l'itération 2
printf(" Fin de l'itération %d \n", i) ; Début de l'itération 3
} Bonjour
Sortie : printf(" Après la boucle \n") ; Après la boucle
Les tableaux
Les tableaux 95

1) Définition

▪ Problématique ?

Exemple

Pour conserver simultanément les notes de 10 étudiants, il nous faut 10 variables différentes.

→ Vous devez initialiser et gérer chaque variable individuellement

→ Pour effectuer des opérations telles que la somme des notes, la moyenne, la recherche de la note la plus élevée, etc., vous devez

écrire du code répétitif pour parcourir toutes les variables.

et si on avait 100 ou 1000 étudiants?!!

Utiliser une structure qui nous permet de stocker ces données


Les tableaux 96

1) Définition

▪ Solution ?

Disposer d’un objet plus complexe, pour stocker ces notes, et y accéder à l’aide d’un indice. → Tableau

Notes 15 12 9 10 14 11 14 9 15 8
Indice 0 1 2 3 4 5 6 7 8 9

▪ Intérêts ?

→ Gain de temps

→ rétrécissement du volume du programme;

→ possibilité de réutilisation de toutes les valeurs ultérieurement dans le programme.


Les tableaux 97

1) Définition

▪ Un tableau est une collection d'éléments de données similaires stockés dans des emplacements de mémoire contigus.

▪ Les éléments sont accessibles à l'aide des indices.

▪ Les éléments peuvent être de différents types de données.


10
➢ primitifs : int, float, double, char, etc. Tableau T 15
20
➢ dérivés : les structures, les pointeurs, etc.

▪ Un tableau peut avoir plus d'une dimension (matrice 2D, matrice 3D, ..)

Mémoire

Remarque : Si un programme en C ou dans un langage similaire ne peut pas trouver


d'emplacements de mémoire contigus pour stocker un tableau statique,
→ il générera généralement une erreur lors de la compilation ou de l'exécution.
Les tableaux 98

2) Tableaux à une dimension (vecteur)

► Déclaration
▪ Pour déclarer un tableau à une dimension en C, on utilise la syntaxe suivante :
➢ Syntaxe :
type NomTableau [Taille];
➢ Exemples :

int TabEntiers [10] ; // Cette déclaration définit un tableau d’entiers de taille 10


float TabReels [20] ; // Cette déclaration définit un tableau de réels de taille 20

▪ La taille d’un tableau peut également être déclarée comme une constante:

const int N=10 ; // Cette déclaration définit la taille du tableau sous forme d’une constante
int TabEntiers [N] ; // Cette déclaration définit un tableau d’entiers de taille N
Les tableaux 99

2) Tableaux à une dimension (vecteur)

► Déclaration

▪ En langage C, le nom d’un tableau est le représentant de l’adresse du premier élément du tableau.

▪ Les adresses des autres composantes sont calculées (automatiquement) relativement à cette adresse.

▪ Espace occupée en mémoire : Taille d’une composante en octets × Taille du tableau

▪ Exemples :
Taille ?
short A [4]; // Tableau nommé « A » de taille « 4 » de type « short » Taille = 2 octets × 4 → 8 octets

int TAB [10]; // Tableau nommé « Tab » de taille « 10 » de type « int » Taille = 4 octets × 10 → 40 octets
Les tableaux 100

2) Tableaux à une dimension (vecteur)

► Accès aux éléments du tableau


▪ Pour accéder à un tableau à une dimension en C, on utilise la syntaxe suivante :
➢ Syntaxe
NomTableau [Indice];

➔ La numérotation d’un tableau commence toujours à partir de 0.


➔ Dans un tableau de N éléments, le premier indice est (0) et le dernier indice est (N-1)

➢ Exemple :
Tab [4] ; // Accéder à l’élément numéro 5 de tableau Tab

Tab Taille du tableau : 10


Premier indice : 0
0 1 2 3 4 5 6 7 8 9
Dernier indice : 9
Les tableaux 101

2) Tableaux à une dimension (vecteur)

► Initialisation du tableau
▪ Pour initialiser un tableau à une dimension en C, on utilise la syntaxe suivante :
➢ Syntaxe
type NomTableau [Taille] = {Valeur1, Valeur2,…, Valeur_N-1} ;

➢ Exemple :
int Tab [5] = {1,2,3,4,5} ; // Cette déclaration définit un tableau d’entiers de taille (5) initialisé par les valeurs (1, 2, 3, 4, 5)
➔ Le nombre des valeurs d'initialisation ne peut pas dépasser la taille du tableau, mais il peut être inférieur.
➔ Les éléments qui ne sont pas initialisés explicitement seront initialisés implicitement (automatiquement) à 0

Lors de l'initialisation d'un tableau, la spécification de sa taille est facultative (optionnelle).


➔ La taille est automatiquement déterminée d'après le nombre des valeurs d'initialisation
int Tab [ ] = {1,2,3,4,5} ; // La taille est du tableau est égale à 5
Les tableaux 102

2) Tableaux à une dimension (vecteur)

► Initialisation du tableau
➢ Précaution :

int N=5 ; // Cette déclaration définit la taille du tableau sous forme d’une variable
int TabEntiers [N] ={1,2,3,4,5}; // Une déclaration et initialisation d’un tableau d’entiers de taille N

Le code C générera une erreur : error: variable-sized object may not be initialized

▪ Cette erreur se produit lorsque vous essayez d'initialiser une variable de taille variable.
▪ Cela n'est pas autorisé dans de nombreux langages de programmation, car le compilateur ne connaît pas la taille de la variable avant
l'exécution du programme.
▪ Solution ? Pour corriger cette erreur, vous devez déclarer le tableau sans l'initialiser, puis attribuer des valeurs aux éléments du tableau
individuellement.
Les tableaux 103

3) Tableaux multidimensionnels

► Déclaration
▪ En plus des tableaux à une seule dimension (vecteur), le C autorise la déclaration des tableaux à plusieurs dimensions.
▪ Pour déclarer un tableau multidimensionnel, on utilise la syntaxe suivante :
➢ Syntaxe
type NomTableau [Taille_D1] [Taille_D2] … [Taille_Dn]; // Taille_Di désigne la taille de la ième dimension

➢ Exemple :
Pour déclarer un tableau de deux dimensions (une matrice)
int Tab [2][5] ; // Cette déclaration définit un tableau d’entiers à 2 dimensions avec 2 lignes et 5 colonnes

0 1 2 3 4
Taille du tableau 2D : 2 lignes | 5 colonnes
0
Tab Premier indice (ligne) : 0 | Dernier indice (ligne) : 1
1 Premier indice (colonne) : 0 | Dernier indice (colonne) : 4
Les tableaux 104

3) Tableaux multidimensionnels

► Déclaration

▪ Le nom d’un tableau est le représentant de l’adresse du premier élément du tableau

▪ Les composantes d’un tableau à 2 dimensions sont stockées ligne par ligne dans la mémoire.

▪ Espace occupé en mémoire: Taille d’une composante en octets x L x C (avec L est le nombre de lignes et C est le nombre de colonnes)

▪ Exemples
Taille ?
short A [4][5]; //Tableau nommé « A » de taille « 4|5 » de type « short » Taille = 2 octets × 4 × 5 → 40 octets
int Tab [4] [5]; // Tableau nommé « Tab » de taille « 4|5 » de type « int » Taille = 4 octets × 4 × 5 → 80 octets
Les tableaux 105

3) Tableaux multidimensionnels

► Accès aux éléments du tableau


▪ Pour accéder à un tableau multidimensionnel en C, on utilise la syntaxe suivante :
➢ Syntaxe
NomTableau [Indice_D1] [Indice_D2] … [Indice_Dn]; // Indice_Di désigne l’indice de l’élément de la ième dimension

➢ Exemple :
Pour accéder à un tableau à deux dimensions :
Tab [1][3] ; // Accéder à l’élément situé dans la 2ème ligne / 4ème colonne de tableau Tab

0 1 2 3 4
0 Taille du tableau 2D : 2 lignes | 5 colonnes
Tab
Premier indice (ligne) : 0 | Dernier indice (ligne) : 1
1
Premier indice (colonne) : 0 | Dernier indice (colonne) : 4
Les tableaux 106

3) Tableaux multidimensionnels

► Initialisation du tableau
▪ Pour initialiser un tableau multidimensionnel en C, on utilise la syntaxe suivante :
➢ Syntaxe
type NomTableau [Taille_D1] [Taille_D2] … [Taille_Dn] = {Valeur1,1,…, Valeur_N*N} ;

➢ Exemple :
L’initialisation d’un tableau à deux dimensions peut être effectué de deux manières :
int Tab [2][5] = {1,2,3,4,5,6,7,8,9,10} ; // Initialisation élément par élément du tableau 2d d’entiers (1ère méthode)
int Tab [2][5] = { {1,2,3,4,5},{6,7,8,9,10} } ; // Initialisation ligne par ligne du tableau 2d d’entiers (2ème méthode)

➔ Les éléments qui ne sont pas initialisés explicitement seront initialisés implicitement (automatiquement) à 0
0 1 2 3 4
0 1 2 3 4 5
Tab
1 6 7 8 9 10
Les tableaux 107

4) Opérations sur les tableaux

► Affectation des valeurs aux éléments d'un tableau


▪ Pour affecter une valeur à un élément du tableau en C, on utilise la syntaxe suivante :
➢ Syntaxe
NomTableau [indice] = Valeur ;
➢ Exemple :
Tab [3] = 10 ; // Affectation de la valeur 10 au 4ème élément du tableau Tab

Remarques :
❑ Les indices peuvent être des expressions arithmétiques :
Tab [2*i] ou Tab[i+3][j-2]
Les tableaux 108

4) Opérations sur les tableaux

► Incrémentation et décrémentation des éléments d'un tableau


▪ L’incrémentation et la décrémentation d’un élément du tableau peuvent être effectuées comme suit :
➢ Syntaxe :
NomTableau [Indice] ++ ;
NomTableau [Indice] -- ;

➢ Exemple :
Tab [3] = 10 ;
Tab [3] ++ ; // Tab [3] vaut 11
Les tableaux 109

4) Opérations sur les tableaux

► Détecter la taille d’un tableau


▪ En C, il est important de noter que les tableaux n'incluent généralement pas d'informations sur leur taille intrinsèque.
→ La taille du tableau doit être gérée manuellement.
→ Pour ce faire, vous pouvez utiliser l'opérateur sizeof() pour déterminer la taille en octets du tableau entier. Ensuite, vous pouvez
diviser cette taille par la taille d'un élément individuel pour obtenir le nombre d'éléments.
➢ Syntaxe :
int taille = sizeof(tableau) / sizeof(tableau[0]);
➢ Exemple :

int Tab [] = {1, 2, 3, 4, 5};


Résultat ?
// Taille du tableau en octets
TailleOct =20 // Taille du Tab en octets
int TailleOct = sizeof(Tab);
TailleNbe = 5 // nombre d’éléments (20/4)
// Taille du tableau en termes du nombre d'éléments
int TailleNbe = sizeof(Tab)/sizeof(Tab[0]);
Les tableaux 110

4) Opérations sur les tableaux

► Modifier la taille d’un tableau


▪ La modification de la taille d'un tableau dépend du langage de programmation que vous utilisez.
▪ En C, les tableaux sont généralement de taille fixe.
→ ce qui signifie que la taille d'un tableau est définie à la compilation et ne peut pas être modifiée pendant l'exécution du programme.
→ vous ne pouvez pas modifier la taille directement.
→ vous devrez généralement créer un nouveau tableau de la taille souhaitée et copier les éléments du tableau d'origine dans le nouveau
tableau.
➢ Exemple :

int TabOriginal [5] = {1, 2, 3, 4, 5}; // Copiez les éléments de l'ancien tableau dans le nouveau
int nouvelle_taille = 10; // Nouvelle taille souhaitée for (int i = 0; i < 5; i++) {
int NouvTab[nouvelle_taille]; // Créez un nouveau tableau NouvTab[i] = TabOriginal[i];
}
// Vous pouvez maintenant utiliser NouvTab avec une taille de 10.
Les tableaux 111

4) Opérations sur les tableaux

► Insérer un nouvel élément dans un tableau


▪ En C, il n'existe pas de fonction prédéfinie pour insérer un nouvel élément dans un tableau statique.
▪ Vous devez suivre plusieurs étapes:
1. Créé un nouveau tableau
Vous devez créer un nouveau tableau avec une taille augmentée de 1 pour accueillir le nouvel élément.
2. Copiez les éléments dans le nouveau tableau
3. Déterminez où vous voulez insérer l'élément.
Vous devez savoir si vous souhaitez insérer l'élément au début, au milieu ou à la fin du tableau.
4. Décalez les éléments existants
Si vous insérez l'élément au milieu ou au début du tableau, vous devrez décaler les éléments existants pour faire de la place.
5. Insérez le nouvel élément
Une fois que vous avez fait de la place en décalant les éléments existants, vous pouvez insérer le nouvel élément à l'emplacement
souhaité.
Les tableaux 112

4) Opérations sur les tableaux

► Insérer un nouvel élément dans un tableau


▪ Par exemple:
0 1 2 3 4 0 1 2 3 4 5
Étape 1+2 10 20 40 50 60 10 20 40 50 60

Étape 3 : On souhaite insérer la valeur 30 à la 3ème position (index 2)

Position d’insertion Décalage des éléments

0 1 2 3 4 5 0 1 2 3 4 5
Étape 4 : 10 20 40 50 60 10 20 40 40 50 60

0 1 2 3 4 5
Étape 5 : 10 20 30 40 50 60
Les tableaux 113

4) Opérations sur les tableaux

► Supprimer un élément d’un tableau


▪ En C, il n'existe pas de fonction prédéfinie pour supprimer un élément d’un tableau statique.
▪ Vous devez suivre plusieurs étapes:
1. Déterminez l'élément à supprimer
Vous devez connaître l'index de l'élément que vous souhaitez supprimer du tableau.
2. Vérifiez que l'index est valide
Assurez-vous que l'index de l'élément à supprimer est dans les limites du tableau.
3. Décalez les éléments
Si l'index est valide, décalez les éléments du tableau pour remplir l'espace laissé par l'élément supprimé.
4. Réduisez la taille du tableau
Si le tableau est statique (de taille fixe), vous pouvez réduire sa taille de 1, car vous avez supprimé un élément.
Les tableaux 114

4) Opérations sur les tableaux

► Supprimer un élément d’un tableau


▪ Par exemple:

Étape 1 + 2 : On souhaite supprimer l’élément de la position 1 (index 0)

Étape 3 :
Position de l’élément à Décalage des éléments
supprimer
0 1 2 3 4 5 0 1 2 3 4 5
10 20 30 40 50 60 20 30 40 50 60 60

0 1 2 3 4 5
Étape 4 : 20 30 40 50 60 60

Continuer le programme avec une taille -1 Il demeure stocké en mémoire


Les tableaux 115

4) Opérations sur les tableaux

► Affectation d’un tableau à un autre


▪ En C, l'affectation d'un tableau à un autre ne peut pas être effectuée en utilisant simplement l'opérateur =.
→ L'opérateur = est principalement utilisé pour affecter une valeur à une variable simple
→ Cependant, il existe d'autres moyens de copier le contenu d'un tableau vers un autre.

➢ Exemple :
int T1 [4] = {2, 3, 5, 7};
Solution ?
int T2 [4] ;
Utiliser une boucle pour copier les
T2 = T1 ; // instruction incorrecte. ×
éléments un par un
Les tableaux 116

4) Opérations sur les tableaux

► Comparaison de deux tableaux


▪ Contrairement à la comparaison de deux variables, vous ne pouvez pas comparer deux tableaux en C en utilisant l'opérateur ==
→ car il compare simplement les adresses mémoire de ces tableaux (c.-à-d. les adresses de début de chaque tableau)
→ ce qui signifie que deux tableaux identiques ne renverront pas true (vrai) lors de la comparaison avec == puisqu'ils pointent vers des
emplacements mémoire différents.
→ ce qui ne donne pas le résultat attendu.

Ce n’est pas le résultat attendu !!!


➢ Exemple : Alors quelle est la solution pour
comparer deux tableaux ???
int T1 [4] = {2, 3, 5, 7};
int T2 [4] = {2, 3, 5, 7};
Affichage ?
if (T1 == T2)
Tableaux différents.
printf ("Tableaux identiques.");
else
printf ("Tableaux différents.");
Les tableaux 117

4) Opérations sur les tableaux

► Comparaison de deux tableaux


▪ Solution ? Pour comparer le contenu de deux tableaux de même taille en C, vous devez utiliser une boucle pour comparer les éléments
individuels du tableau un par un.

#include <stdio.h> if (egaux==true) {


#include <stdbool.h> printf("Les tableaux sont identiques.\n");
int main() { } else {
int T1 [4] = {2, 3, 5, 7}; printf("Les tableaux ne sont pas identiques.\n");
int T2 [4] = {2, 3, 5, 7}; }
int i ; bool egaux = true;
for (i = 0; i < 4 ; i++) { return 0;
if (T1[i] != T2[i]) { }
egaux = false; break;
}
}
Les tableaux 118

4) Saisie et affichage des éléments d'un tableau

► Saisie des éléments d'un tableau


▪ La saisie des éléments d'un tableau d’entiers de taille 5 se fait comme suit :
int Tab [5] ; // Déclaration d’un tableau d’entiers de taille 5
int i ; // Déclaration d’une variable i (compteur)
for(i=0 ; i < 5 ;i++) {
printf("Donner l’entier numéro %d :" , i+1);
scanf ("%d", &Tab[i]) ;
}
► Affichage des éléments d'un tableau
int Tab [5]={1,2,3,4,5} ; // Déclaration d’un tableau d’entiers de taille 5
int i ; // Déclaration d’une variable i (compteur)
for(i=0 ; i < 5 ; i++) {
printf("Tab[%d] : %d" , i+1 , Tab[i] ) ;
}
Les tableaux

4) Saisie et affichage des éléments d'un tableau

► Exercices
▪ Écrire un programme permettant de remplir et afficher un tableau d'entiers à deux dimensions.

▪ Écrire un programme permettant de trier dans un ordre croissant un tableau d'entiers (en utilisant l’algorithme de tri à bulle).
Les tableaux 120

4) Saisie et affichage des éléments d'un tableau

► Exercices
▪ Écrire un programme permettant de remplir et afficher un tableau d'entiers à deux dimensions (Taille 2×3).
Solution :

#include <stdio.h> // Remplissage du tableau // Affichage du tableau


int main(){ for (i=0; i<ligne ; i++){ for (i=0; i<ligne ; i++){
int i , j ; // Déclaration des compteurs for (j=0; j<colonne ; j++){ for (j=0; j<colonne ; j++){
const int ligne = 2 ; printf("Donner Tab[%d][%d] :" , i , j); printf(" %d ", Tab[i][j]) ;
const int colonne = 3 ; scanf ("%d", &Tab[i][j]) ; }
// Déclaration d'un tableau de taille 2 * 4 } printf("\n");
int Tab[ligne][colonne]; } }
return 0;}
Les tableaux 121

4) Saisie et affichage des éléments d'un tableau

► Exercices
▪ Écrire un programme permettant de trier dans un ordre croissant un tableau d'entiers (en utilisant l’algorithme de tri à bulle).
➢ Principe :
▪ Le tri à bulle consiste à parcourir le tableau, par exemple de gauche à droite, en comparant les éléments côte à côte et en les
permutant s'ils ne sont pas dans le bon ordre.
▪ Au cours d'une passe du tableau, les plus grands éléments remontent de proche en proche vers la droite comme des bulles vers
la surface.
▪ Condition d’arrêt ?
On s'arrête dès que l'on détecte que le tableau est trié : si aucune permutation n'a été faite au cours d'une passe.

… ? ? …
i i+1
Les tableaux 122

4) Saisie et affichage des éléments d'un tableau

► Exercices
➢ Exemple : Donnée : Tableau de 5 entiers [N=5] || Parcours du tableau 0 → N-1
Test = vrai (il y a une permutation) || Test = Faux (pas de permutation)

borne Test = Vrai

Étape 1 : i=0 ; T[0] > T[1] ✓ 7 3 18 13 7 3 7 18 13 7 Test = Vrai

Étape 2 : i=1 ; T[1] > T[2] × 3 7 18 13 7 3 7 18 13 7 Test = Faux

Étape 3 : i=2 ; T[2] > T[3] ✓ 3 7 18 13 7 3 7 13 18 7 Test = Vrai

Étape 4 : i=3 ; T[3] > T[4] ✓ 3 7 13 18 7 3 7 13 7 18 Test = Vrai

Étape 5 : i=4 ; (i < N -1) × 3 7 13 7 18 3 7 13 7 18


[Test = Vrai ]➔ continuer
Les tableaux 123

4) Saisie et affichage des éléments d'un tableau

► Exercices
➢ Exemple :
borne Test = Vrai

Étape 6 : i=0 ; T[0] > T[1] × 3 7 13 7 18 3 7 13 7 18 Test = Faux

Étape 7 : i=1 ; T[1] > T[2] × 3 7 13 7 18 3 7 13 7 18 Test = Faux

Étape 8 : i=2 ; T[2] > T[3] ✓ 3 7 13 7 18 3 7 7 13 18 Test = Vrai

Étape 9 : i=3 ; (i < N -1) × 3 7 7 13 18 3 7 7 13 18


[Test = Vrai ]➔ continuer
Les tableaux 124

4) Saisie et affichage des éléments d'un tableau

► Exercices
➢ Exemple :
borne Test = Vrai

Étape 10 : i=0 ; T[0] > T[1] × 3 7 7 13 18 3 7 7 13 18 Test = Faux

Étape 11 : i=1 ; T[1] > T[2] × 3 7 7 13 18 3 7 7 13 18 Test = Faux

Étape 12 : i=2 ; (i < N -1) × 3 7 7 13 18


[Test = Faux ]➔ arrêter

Test = Faux ⇔ pas de permutation =Tableau trié 3 7 7 13 18


Les tableaux 125

4) Saisie et affichage des éléments d'un tableau

► Exercices
▪ Écrire un programme permettant de trier dans un ordre croissant un tableau d'entiers (en utilisant l’algorithme de tri à bulle)..
Solution :

#include <stdio.h> while (test == true){ // Affichage du tableau


#include <stdbool.h> test = false ; for (i=0; i<n ; i++){
int main(){ for (i=0 ; i<borne-1 ; i++){ printf("%d ", tab[i]);
const int n = 5 ; if (tab[i]>tab[i+1]){ }
// Déclaration + initialisation d'un tableau d'entier aux = tab[i] ; return 0;
int tab[n] = {7, 3, 18, 13 , 7}; tab[i] = tab[i+1] ; }
int i, aux, borne ; tab[i+1] = aux;
borne = n ; test = true ; }
bool test ; }
test = true ; borne -- ;
}
Les tableaux
#include <stdio.h>
int main() {
int myArray[] = {1, 2, 3, 4, 5}; int size = 5;
int indexToDelete = 2; // Index de l'élément à supprimer

// Étape 2 : Vérifiez que l'index de suppression est valide


if (indexToDelete >= 0 && indexToDelete < size) {
// Étape 3 : Décalez les éléments pour supprimer l'élément
for (int i = indexToDelete; i < size - 1; i++) {
myArray[i] = myArray[i + 1];
}
// Réduisez la taille du tableau (Étape 4)
size--;
// Vous pouvez maintenant accéder à myArray avec l'élément supprimé
} else {
printf("Index de suppression invalide.\n");
}
Les tableaux 128

4) Saisie et affichage des éléments d'un tableau

► Exercices
▪ Écrire un programme permettant de trier dans un ordre croissant un tableau d'entiers (en utilisant l’algorithme de sélection).
➢ Principe :
▪ Le tri par sélection consiste à parcourir le tableau, par exemple de gauche à droite, en cherchant le plus petit élément, et
l'échanger avec l'élément d'indice 0.
▪ Au cours d'une passe du tableau, les plus grands éléments remontent de proche en proche vers la droite comme des bulles vers
la surface.
▪ Condition d’arrêt ?
On s'arrête dès que l'on détecte que le tableau est trié : si aucune permutation n'a été faite au cours d'une passe.

… ? ? …
i i+1
Les tableaux 129

1) Définition

▪ Un tableau est une collection d'éléments de données similaires stockés dans des emplacements de mémoire contigus.

▪ Les éléments sont accessibles à l'aide des indices.

▪ Les éléments peuvent être de différents types de données.

➢ primitifs : int, float, double, char, etc.

➢ dérivés : les structures, les pointeurs, etc.

▪ Un tableau peut avoir plus d'une dimension (matrice 2D, matrice 3D, ..)
10

Remarque : Tableau T 15
20
Si un programme en C ou dans un langage similaire ne peut pas trouver d'emplacements
de mémoire contigus pour stocker un tableau statique,
→ il générera généralement une erreur lors de la compilation ou de l'exécution.

Mémoire
Les tableaux 130

1) Définition

▪ Un tableau est une collection d'éléments de données similaires stockés dans des emplacements de mémoire contigus.

▪ Les éléments sont accessibles à l'aide des indices.

▪ Les éléments peuvent être de différents types de données.

➢ primitifs : int, float, double, char, etc.

➢ dérivés : les structures, les pointeurs, etc.

▪ Un tableau peut avoir plus d'une dimension (matrice 2D, matrice 3D, ..)
Les tableaux 131

2) Tableaux à une dimension (vecteur)

► Déclaration
▪ Pour déclarer un tableau à une dimension en C, on utilise la syntaxe suivante :
➢ Syntaxe :
type NomTableau [Taille];
➢ Exemples :
int TabEntiers [10] ; // Cette déclaration définit un tableau d’entiers de taille 10
float TabReels [20] ; // Cette déclaration définit un tableau de réels de taille 20

▪ La taille d’un tableau peut également être déclarée comme une constante:
const int N=10 ; // Cette déclaration définit la taille du tableau sous forme d’une constante
int TabEntiers [N] ; // Cette déclaration définit un tableau d’entiers de taille N
Les tableaux 132

2) Tableaux à une dimension (vecteur)

► Accès aux éléments du tableau


▪ Pour accéder à un tableau à une dimension en C, on utilise la syntaxe suivante :
➢ Syntaxe
NomTableau [Indice];
➔ La numérotation d’un tableau commence toujours à partir de 0.
➔ Dans un tableau de N éléments, le premier indice est (0) et le dernier indice est (N-1)

➢ Exemple :
Tab [4] ; // Accéder à l’élément numéro 5 de tableau Tab

Tab Taille du tableau : 10


Premier indice : 0
0 1 2 3 4 5 6 7 8 9
Dernier indice : 9

Vous aimerez peut-être aussi