Introduction à l'algorithmique en C
Introduction à l'algorithmique en C
TP 3 : Algorithmique et Langage C
I. Introduction
L’objectif de ce TP3 est d’introduire les bases de l’algorithmique tout en les appliquant de manière
concrète à travers le langage C. Ce TP marque une étape importante dans l'apprentissage des
algorithmes, car il fait le lien entre la théorie et la pratique en programmation. Les étudiants
apprendront à concevoir des solutions logiques pour résoudre des problèmes et à les implémenter
en C.
Au cours des TP précédents, des fondations essentielles ont été posées. Dans le TP1, nous avons
exploré la représentation et le codage des nombres, en étudiant les différents systèmes de
numération (binaire, octal, décimal et hexadécimal) ainsi que leur conversion. Ces notions sont
fondamentales pour comprendre comment les données sont manipulées par l'ordinateur, et elles
seront directement utiles lors de la manipulation des données dans ce TP, notamment pour les
opérations impliquant des nombres ou des bits.
Dans le TP2, l'étude de l’algèbre de Boole nous a permis de comprendre et de manipuler des
expressions booléennes, de construire des tables de vérité, et de découvrir les principes des circuits
logiques. Ces concepts trouvent leur application directe dans la gestion des conditions (avec les
instructions if, switch, ...) et des structures de contrôle logiques, qui sont des éléments clés en
programmation.
Le TP3 a pour objectif de vous familiariser avec les structures de base de l’algorithmique, telles
que les conditions, les boucles, les procédures et les fonctions. Vous apprendrez à analyser un
problème, à concevoir un algorithme pour le résoudre, et à le traduire en un programme C
fonctionnel, en utilisant les principes appris dans les TP précédents.
BOUCHABOU K. 1
Coordination VRSP Première année Tronc Commun Parcours Ingénieur
Structures des données Sciences et Technologies
Un algorithme est une série d'instructions précises, organisées de manière logique, qui permettent
de résoudre un problème ou d'atteindre un objectif particulier. Il peut être utilisé dans de nombreux
domaines, notamment la programmation, les mathématiques et les sciences. Les algorithmes sont
au cœur de tout programme informatique, servant de plan pour exécuter des tâches spécifiques.
Par exemple, une recette de cuisine peut être considérée comme un algorithme : elle contient une
liste d’ingrédients (les entrées) et une série d’instructions claires (le traitement) pour obtenir un
plat (la sortie).
Pour être considéré comme un algorithme valide, il doit répondre aux critères suivants :
Les actions primitives sont les éléments fondamentaux d’un algorithme. Ce sont des instructions
simples, élémentaires, et non décomposables, que l’ordinateur ou le programme peut exécuter
directement. Ces actions servent de blocs de construction pour élaborer des algorithmes capables
de résoudre des problèmes complexes :
• Lecture (Input) : La lecture est une action primitive qui consiste à recevoir des données
fournies par une source externe. Cela peut inclure la saisie d’informations par
l’utilisateur au clavier, la lecture de données depuis un fichier ou encore la réception de
données via un capteur ou un réseau. Par exemple, demander à l’utilisateur d’entrer son
âge dans un programme est une action de lecture.
BOUCHABOU K. 2
Coordination VRSP Première année Tronc Commun Parcours Ingénieur
Structures des données Sciences et Technologies
• Écriture (Output) : L’écriture est une action primitive qui permet d’afficher ou de
transmettre une donnée. Elle est souvent utilisée pour communiquer des résultats ou des
messages à l’utilisateur. Par exemple, un programme qui calcule la somme de deux
nombres affiche ensuite le résultat à l’écran grâce à une action d’écriture.
• Affectation (Assignment) : L’affectation est l’action qui consiste à attribuer une valeur
à une variable. Cette valeur peut être une constante, une donnée lue par une action de
lecture, ou le résultat d’une opération mathématique ou logique. Par exemple, stocker le
résultat d’une addition dans une variable pour une utilisation ultérieure est une action
d’affectation.
• Opérations Mathématiques (Arithmetic Operations) : Les algorithmes utilisent souvent
des calculs pour résoudre des problèmes, comme l’addition, la soustraction, la
multiplication, ou la division. Ces opérations sont des actions primitives qui manipulent
des nombres pour produire des résultats. Par exemple, dans un programme qui calcule la
moyenne de deux notes, les actions mathématiques incluent l’addition des deux notes et
leur division par deux.
• Comparaison (Comparison) : Les comparaisons sont des actions primitives qui
permettent de tester des relations entre des valeurs, comme l’égalité, la supériorité, ou
l’infériorité. Ces tests sont souvent utilisés dans des structures conditionnelles pour prendre
des décisions. Par exemple, déterminer si un nombre est positif ou négatif nécessite une
action de comparaison.
• Opérations Logiques (Logical Operations) : Les opérations logiques permettent de
combiner plusieurs conditions ou de manipuler des valeurs booléennes (vraies ou fausses).
Par exemple, vérifier si un étudiant a réussi un examen implique de tester plusieurs critères,
comme une note supérieure à la moyenne et une présence suffisante.
BOUCHABOU K. 3
Coordination VRSP Première année Tronc Commun Parcours Ingénieur
Structures des données Sciences et Technologies
Un algorithme est une suite finie d’instructions ordonnées permettant de résoudre un problème ou
de réaliser une tâche spécifique. Pour être efficace, un algorithme doit suivre une structure bien
définie, qui facilite sa compréhension, son développement et sa traduction en langage de
programmation.
L’en-tête présente brièvement l’algorithme, ses entrées (les données initiales), et ses sorties (les
résultats attendus). C’est une sorte de résumé de l’algorithme, expliquant ce que l’algorithme fait
et ce qu’il produit.
La partie déclarative consiste à définir les variables et les types de données utilisés par
l'algorithme. Cela permet de préparer l'espace mémoire pour stocker les valeurs nécessaires
pendant l'exécution.
Le corps de l’algorithme contient toutes les instructions qui réalisent le traitement réel. C'est là
que l'algorithme effectue les calculs, applique des opérations sur les données, et génère les
résultats.
Algorithme : CalculeSomme
Début
Lire A, B // Lire les deux nombres
S ←A+ B // Calculer la somme
Écrire S // Afficher le résultat
Fin
II.3- Organigramme
BOUCHABOU K. 4
Coordination VRSP Première année Tronc Commun Parcours Ingénieur
Structures des données Sciences et Technologies
Symbole Désignation
Exemple :
BOUCHABOU K. 5
Coordination VRSP Première année Tronc Commun Parcours Ingénieur
Structures des données Sciences et Technologies
III. Langage C
Le langage C est un langage de programmation de bas niveau, conçu pour offrir un contrôle précis
sur les ressources matérielles tout en restant relativement simple à utiliser. Il permet une gestion
directe de la mémoire, notamment à travers l’utilisation de pointeurs et d’allocation dynamique,
ce qui le rend particulièrement adapté pour la programmation système, le développement de
systèmes d’exploitation, et la création de logiciels nécessitant des performances optimisées. Sa
syntaxe concise, associée à sa capacité à être exécutée rapidement sur une large gamme de
plateformes matérielles, fait de C un langage incontournable pour les développeurs travaillant sur
des projets nécessitant efficacité et portabilité.
Ligne 1 : #include <stdio.h> est une bibliothèque d'en-tête qui permet d'utiliser des fonctions
d'entrée et de sortie, comme printf() (utilisé à la ligne 4). Les fichiers d'en-tête ajoutent des
fonctionnalités aux programmes en C.
Ligne 2 : Une ligne vide. Le langage C ignore les espaces blancs, mais nous les utilisons pour
rendre le code plus lisible.
Ligne 3 : Une autre partie fondamentale d'un programme C est main(). Il s'agit d'une fonction. Le
code à l'intérieur de ses accolades {} sera exécuté.
Ligne 4 : printf() est une fonction utilisée pour afficher du texte à l'écran. Dans notre exemple,
elle affichera "Bonjour, Monde!". Notez que chaque instruction en C se termine par un point-
virgule ;.
BOUCHABOU K. 6
Coordination VRSP Première année Tronc Commun Parcours Ingénieur
Structures des données Sciences et Technologies
Ligne 5 : return 0; termine la fonction main(). N'oubliez pas d'ajouter l'accolade fermante } pour
bien clôturer la fonction main().
Un programme informatique est une liste d'« instructions » à exécuter par un ordinateur. Dans un
langage de programmation, ces instructions sont appelées instructions. L'exemple précèdent «
ordonne » au compilateur d'afficher le texte « Bonjour Monde! » à l'écran.
Il est important de toujours terminer une instruction par un point-virgule ;. Si vous oubliez le point-
virgule, une erreur se produira et le programme ne pourra pas s'exécuter :
Lorsque vous travaillez avec du texte, celui-ci doit être encadré par des guillemets doubles "". Si
vous oubliez les guillemets doubles, une erreur se produira :
BOUCHABOU K. 7
Coordination VRSP Première année Tronc Commun Parcours Ingénieur
Structures des données Sciences et Technologies
Le caractère de nouvelle ligne (\n) est une séquence d'échappement, qui oblige le curseur à se
déplacer au début de la ligne suivante à l'écran, ce qui crée un saut de ligne.
Caractère Description
Les commentaires sont utilisés pour expliquer le code et le rendre plus lisible. Ils peuvent
également être utilisés pour empêcher l'exécution de certaines parties du code lors de tests ou
d'expérimentations. Tout texte commentaire sera ignoré par le compilateur. Il existe deux types de
commentaires en C : les commentaires sur une seule ligne et les commentaires multi-lignes.
• Les commentaires sur une seule ligne commencent par deux barres obliques (//).
• Les commentaires multi-lignes commencent par /* et se terminent par */.
BOUCHABOU K. 8
Coordination VRSP Première année Tronc Commun Parcours Ingénieur
Structures des données Sciences et Technologies
Dans le langage C, les types de données et les variables sont des concepts fondamentaux qui
permettent de stocker et manipuler différentes sortes de données. Cette section explique les types
de données les plus courants en C, ainsi que la manière de déclarer et utiliser les variables.
En C, un type de donnée spécifie la nature des informations qu’une variable peut stocker. Les
types primitifs les plus courants incluent les entiers, les réels, et les caractères.
Les types de données en C permettent de définir différentes sortes de valeurs, qu'elles soient
entières, réelles, ou alphabétiques, et sont essentiels pour la manipulation des données dans le
programme.
Une variable est un espace mémoire dans lequel une donnée de type spécifique peut être stockée
et manipulée. Avant d'utiliser une variable, il est nécessaire de la déclarer en précisant son type,
puis de lui attribuer une valeur initiale.
type nom_de_variable;
Exemple :
Les constantes sont des valeurs fixes qui ne peuvent pas être modifiées une fois définies. Elles
peuvent être utilisées pour rendre le code plus lisible et éviter des erreurs de modification
accidentelles. On utilise le mot-clé const pour déclarer une constante.
BOUCHABOU K. 9
Coordination VRSP Première année Tronc Commun Parcours Ingénieur
Structures des données Sciences et Technologies
Exemple :
L’entrée et la sortie (I/O pour Input/Output) sont des mécanismes essentiels dans tout programme,
permettant à l’utilisateur d’interagir avec le programme. En C, ces opérations se font
principalement à l’aide des fonctions fournies par la bibliothèque standard, telles que printf et
scanf.
La fonction printf est utilisée pour afficher des informations à l'utilisateur ou pour la sortie des
résultats du programme. Elle permet d'afficher des chaînes de caractères, des variables, et d'autres
valeurs à l'écran.
BOUCHABOU K. 10
Coordination VRSP Première année Tronc Commun Parcours Ingénieur
Structures des données Sciences et Technologies
La fonction scanf est utilisée pour lire des données entrées par l'utilisateur au clavier. Elle permet
de récupérer des valeurs et de les stocker dans des variables spécifiques.
BOUCHABOU K. 11
Coordination VRSP Première année Tronc Commun Parcours Ingénieur
Structures des données Sciences et Technologies
III.4- Operateurs
Les opérateurs sont utilisés pour effectuer des opérations sur des variables et des valeurs. Dans
l'exemple suivant, l'opérateur + est utilisé pour additionner deux valeurs :
L'opérateur + peut également additionner une variable et une valeur, ou deux variables :
BOUCHABOU K. 12
Coordination VRSP Première année Tronc Commun Parcours Ingénieur
Structures des données Sciences et Technologies
Les opérateurs de comparaison permettent de comparer deux valeurs ou variables. Ils renvoient
une valeur booléenne : 1 (vrai) ou 0 (faux).
BOUCHABOU K. 13
Coordination VRSP Première année Tronc Commun Parcours Ingénieur
Structures des données Sciences et Technologies
Les opérateurs logiques combinent plusieurs conditions pour tester des relations logiques entre
elles.
En C, les conditions logiques permettent d'exécuter différents blocs de code selon la décision prise.
Voici les opérateurs conditionnels les plus courants :
BOUCHABOU K. 14
Coordination VRSP Première année Tronc Commun Parcours Ingénieur
Structures des données Sciences et Technologies
• else if (sinon si) : Permet de tester une nouvelle condition si la précédente est fausse.
• switch (selon) : Permet de choisir parmi plusieurs alternatives selon une valeur donnée.
L'instruction if en C est utilisée pour exécuter un bloc de code uniquement si une condition donnée
est évaluée comme vraie. Elle est essentielle pour la prise de décisions dans un programme. La
condition, placée entre parenthèses, doit être une expression logique ou relationnelle (par exemple,
x > 5 ou a == b). Si cette condition est vraie, le bloc de code entre accolades {} sera exécuté. Sinon,
il sera ignoré.
L'instruction else complète un if en permettant d'exécuter un autre bloc de code lorsque la condition
du if est évaluée comme fausse. Elle agit comme un plan de secours, garantissant qu'au moins un
des blocs de code sera exécuté.
L'instruction else if permet de tester plusieurs conditions successivement après un if initial. Elle
est utile pour gérer des cas multiples. Si la condition du if est fausse, le programme vérifie la
condition suivante dans le else if, et ainsi de suite jusqu'à ce qu'une condition soit vraie ou qu'il
atteigne un bloc else (s'il existe).
BOUCHABOU K. 15
Coordination VRSP Première année Tronc Commun Parcours Ingénieur
Structures des données Sciences et Technologies
L'instruction switch est utilisée pour exécuter différents blocs de code en fonction de la valeur
d'une seule expression ou variable. Elle est particulièrement adaptée lorsque plusieurs cas
possibles doivent être gérés. Chaque cas est défini par un mot-clé case, suivi d'une valeur et d'un
double point (:). Le mot-clé break est utilisé pour sortir du bloc après l'exécution d'un cas. Si
aucun des cas ne correspond, le bloc default (facultatif) est exécuté.
En langage C, les boucles permettent d’exécuter de manière répétée un bloc de code tant qu’une
condition est remplie. Elles sont particulièrement utiles pour automatiser des tâches répétitives,
réduire le risque d’erreurs et rendre le code plus clair et plus facile à maintenir.
La boucle while est l’une des structures de boucle les plus simples. Elle exécute un bloc de code
tant qu’une condition donnée est évaluée comme vraie. La condition est vérifiée avant chaque
itération de la boucle. Si elle est fausse dès le départ, le bloc de code ne sera jamais exécuté.
BOUCHABOU K. 16
Coordination VRSP Première année Tronc Commun Parcours Ingénieur
Structures des données Sciences et Technologies
La boucle do/while est une variante de la boucle while. Contrairement à la boucle while, la boucle
do/while exécute son bloc de code au moins une fois, même si la condition est fausse. En effet,
la condition est vérifiée après l’exécution du bloc de code.
Ici, le message "10" sera affiché, bien que la condition (i < 5) soit fausse. La boucle ne se répète
pas, mais le bloc est exécuté une fois.
La boucle for est idéale lorsque vous savez exactement combien de fois vous souhaitez exécuter
un bloc de code. Elle permet de contrôler de manière précise l'initialisation, la condition de
répétition et l'incrémentation de la variable de boucle, le tout en une seule ligne.
BOUCHABOU K. 17
Coordination VRSP Première année Tronc Commun Parcours Ingénieur
Structures des données Sciences et Technologies
III.7- Tableaux
Les tableaux permettent de stocker plusieurs valeurs sous une même variable, plutôt que de
déclarer des variables séparées pour chaque valeur.
Pour créer un tableau, il suffit de définir le type de données (par exemple, int) et de spécifier le
nom du tableau suivi de crochets []. Ensuite, vous pouvez insérer des valeurs dans le tableau en
les séparant par des virgules à l'intérieur de crochets {}. Toutes les valeurs doivent être du même
type de données.
Pour accéder à un élément d'un tableau, il faut se référer à son index. Les indices des tableaux
commencent à partir de 0 : [0] est le premier élément, [1] est le deuxième, etc.
BOUCHABOU K. 18
Coordination VRSP Première année Tronc Commun Parcours Ingénieur
Structures des données Sciences et Technologies
Pour modifier la valeur d'un élément spécifique du tableau, il suffit de référencer son index et de
lui attribuer une nouvelle valeur.
Un tableau à deux dimensions est souvent appelé une matrice, qui représente une table de lignes
et de colonnes. Pour accéder à un élément d'un tableau à deux dimensions, vous devez spécifier
l'indice de la ligne et de la colonne.
Ici, l'élément à la première ligne (0) et à la troisième colonne (2) est accédé. Rappelez-vous que
les indices des tableaux commencent à 0 : [0] est le premier élément, [1] est le deuxième, etc.
Pour modifier la valeur d'un élément d'un tableau 2D, vous devez spécifier l'indice correspondant
à la ligne et à la colonne de l'élément à modifier.
BOUCHABOU K. 19
Coordination VRSP Première année Tronc Commun Parcours Ingénieur
Structures des données Sciences et Technologies
Les chaînes de caractères sont utilisées pour stocker des textes ou des caractères. Par exemple,
"Bonjour Monsieur" est une chaîne de caractères.
Puisque les chaînes sont en réalité des tableaux en C, vous pouvez accéder à chaque caractère de
la chaîne en utilisant l’indice de ce caractère dans des crochets [].
Pour changer la valeur d’un caractère spécifique dans une chaîne, il suffit de faire référence à son
indice et de lui affecter une nouvelle valeur entre guillemets simples (' '):
BOUCHABOU K. 20
Coordination VRSP Première année Tronc Commun Parcours Ingénieur
Structures des données Sciences et Technologies
III.8- Fonctions
En C, une fonction est un bloc de code qui s'exécute uniquement lorsqu'elle est appelée. Les
fonctions permettent de regrouper des actions spécifiques dans un même endroit, ce qui facilite la
réutilisation du code. Une fonction peut recevoir des données, appelées paramètres, et effectuer
des actions en retour. Vous utilisez déjà des fonctions prédéfinies, comme main() qui exécute le
programme, ou printf() qui affiche du texte à l'écran.
Pour créer votre propre fonction, vous devez spécifier son nom, suivi de parenthèses () et
d'accolades {} contenant le code à exécuter. Par exemple :
Lorsqu'une fonction est définie, les paramètres sont indiqués après son nom, entre parenthèses.
Ces paramètres servent à recevoir des valeurs lors de l'appel de la fonction. Les valeurs passées à
une fonction lors de son appel sont appelées arguments. Par exemple :
BOUCHABOU K. 21
Coordination VRSP Première année Tronc Commun Parcours Ingénieur
Structures des données Sciences et Technologies
Lorsque vous utilisez le mot-clé void, cela signifie que la fonction ne retourne aucune valeur.
Cependant, vous pouvez spécifier un type de donnée (par exemple, int ou float) pour qu'une
fonction retourne une valeur. Voici un exemple de fonction qui retourne une valeur :
La fonction ceil() arrondit un nombre à l'entier supérieur le plus proche, tandis que floor() arrondit
un nombre à l'entier inférieur le plus proche :
BOUCHABOU K. 22
Coordination VRSP Première année Tronc Commun Parcours Ingénieur
Structures des données Sciences et Technologies
La fonction pow() permet de calculer la puissance d'un nombre, c'est-à-dire x élevé à la puissance
y (x^y) :
III.10- Structures
Les structures (ou structs) en langage C permettent de regrouper plusieurs variables associées
sous un même type de données. Contrairement aux tableaux qui stockent uniquement des éléments
d'un même type, une structure peut contenir différents types de données, comme int, float, char,
etc.
Pour déclarer une structure, utilisez le mot-clé struct, suivi des membres (variables) définis entre
accolades {}. Chaque déclaration doit se terminer par un point-virgule ;.
BOUCHABOU K. 23
Coordination VRSP Première année Tronc Commun Parcours Ingénieur
Structures des données Sciences et Technologies
Pour utiliser une structure, vous devez déclarer une variable de cette structure. Les membres d'une
structure sont accessibles à l'aide de l'opérateur point « . ».
Il est possible de copier les valeurs d'une structure dans une autre en utilisant simplement
l'opérateur d'affectation =.
BOUCHABOU K. 24
Coordination VRSP Première année Tronc Commun Parcours Ingénieur
Structures des données Sciences et Technologies
BOUCHABOU K. 25