Cours C (
Cours C (
(Langage C)
Niveaux: Info 1
Dr Nafaa Haffar
Année universitaire:
2023/2024
Plan
3 Les entrées-sorties
4 Les opérateurs
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
• 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 ?
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
1) Présentation du langage C
▪ La programmation procédurale ?
❑ 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 ?
❑ Il comporte un grand nombre de fonctionnalités et de nombreuses bibliothèques de programmes dans divers domaines.
❑ Il est capable de très bien fonctionner même lors de la gestion de nombreuses données.
→ 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 :
❑ 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
#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
➢ 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
➢ 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
❑ 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) Ouvrir l’environnement DEV C++ et passer les étapes (> suivant, > suivant …)
Menu
Explorateur de Projet/Classes
Barre de statut
Introduction 17
4) Créer un nouveau fichier source : Menu → Fichier → Nouveau → Fichier Source (Ctrl+N)
Introduction 18
Emplacement: Bureau
6) Compiler/ Exécuter le programme : Menu → Exécuter (F9) → Compiler | Menu → Exécuter → Exécuter (F10)
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 :
▪ 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
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
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
▪ 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
▪ Une variable peut être initialisée en lui affectant une valeur avant de l’utiliser.
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.
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.
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 nomination est une abréviation de Standard Input and Output en anglais, qui signifie "entrée/sortie standard".
#include <stdio.h>
Les entrées / sorties en C 34
▪ Ce type d’opérations permet d’ afficher des informations à l'écran. Pour ce faire, il existe une fonction nommée (printf)
▪ Ce type d’opérations permet d’ afficher des informations à l'écran. Pour ce faire, il existe une fonction nommée (printf)
➢ Exemples :
▪ 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).
▪ 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 :
▪ 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).
▪ 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 :
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)
1) Introduction
▪ Les opérateurs sont des symboles permettant d'effectuer des opérations sur des valeurs.
▪ Ce type d’opérateur permet de faire des opérations arithmétiques entre entiers ou entre réels.
▪ 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
▪ 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
▪ 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)
▪ 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
▪ Ce type d’opérateur ne nécessite qu'un opérande. Ils sont appelés opérateurs unaires.
▪ 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
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
➔ Il existe donc une hiérarchie pour les conversions : char < short int < int < long int < float < double
Les opérateurs 51
▪ 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
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.
► Définition
❑ Les instructions conditionnelles sont des structures de contrôle qui permettent à un programme d'effectuer des actions différentes en
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
Suite du programme
Les structures de contrôle 57
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
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
instruction1’ instruction1’
instruction2’ instruction2’
…… ……
Suite du programme
Les structures de contrôle 60
Suite du programme
Les structures de contrôle 63
Suite du programme
Les structures de contrôle 66
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
► Exercice d’application
▪ Écrire un programme qui permet de saisir le n° de mois puis affiche la saison correspondante.
▪ Exemple :
► Exercice d’application
▪ Écrire un programme qui permet de saisir le n° de mois puis affiche la saison correspondante.
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 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
► Exercice d’application
▪ Écrire un programme qui permet de saisir le n° de mois puis affiche la saison correspondante.
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
▪ La boucle while,
▪ La boucle do … while,
▪ La boucle for
Les structures de contrôle 72
► 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.
▪ 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,
► La boucle while
❑ Organigramme :
Oui
instruction1’
instruction2’
……
Suite du programme
Les structures de contrôle 74
► La boucle while
❑ Syntaxe :
En Algorithmique En langage C
Toutes les conditions sont entre deux parenthèses (……).
► La boucle while
❑ Exemple :
❑ 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.
▪ 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
❑ 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
❑ 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
❑ Exemple :
► 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
► 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
► La boucle for
❑ Exemple :
1 3
for (instruction_init ; condition ; instruction_increment){ 2/4
… 2
}
Suite du programme
Les structures de contrôle 84
❑ 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
Imbrication des boucles de même type Imbrication des boucles de type différent
Les structures de contrôle 85
En Algorithmique En langage C
❑ 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
❑ 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.
► Exercice d’application
Donner un programme qui permet d’afficher une pyramide ou un triangle rectangle de n lignes en étoiles.
Exemple : n=5
*
**
***
****
*****
Les structures de contrôle 89
► 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
▪ L'instruction break
▪ L'instruction continue
▪ L'instruction goto
Les structures de contrôle 91
► 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
► 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
► 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.
→ 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
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
1) Définition
▪ Un tableau est une collection d'éléments de données similaires stockés dans des emplacements de mémoire contigus.
▪ Un tableau peut avoir plus d'une dimension (matrice 2D, matrice 3D, ..)
Mémoire
► Déclaration
▪ Pour déclarer un tableau à une dimension en C, on utilise la syntaxe suivante :
➢ Syntaxe :
type NomTableau [Taille];
➢ Exemples :
▪ 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
► 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.
▪ 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
➢ Exemple :
Tab [4] ; // Accéder à l’élément numéro 5 de tableau Tab
► 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
► 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
▪ 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
➢ 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
Remarques :
❑ Les indices peuvent être des expressions arithmétiques :
Tab [2*i] ou Tab[i+3][j-2]
Les tableaux 108
➢ Exemple :
Tab [3] = 10 ;
Tab [3] ++ ; // Tab [3] vaut 11
Les tableaux 109
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
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
É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
➢ 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
► 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
► Exercices
▪ Écrire un programme permettant de remplir et afficher un tableau d'entiers à deux dimensions (Taille 2×3).
Solution :
► 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
► 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)
► Exercices
➢ Exemple :
borne Test = Vrai
► Exercices
➢ Exemple :
borne Test = Vrai
► Exercices
▪ Écrire un programme permettant de trier dans un ordre croissant un tableau d'entiers (en utilisant l’algorithme de tri à bulle)..
Solution :
► 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.
▪ 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.
▪ Un tableau peut avoir plus d'une dimension (matrice 2D, matrice 3D, ..)
Les tableaux 131
► 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
➢ Exemple :
Tab [4] ; // Accéder à l’élément numéro 5 de tableau Tab