Vous êtes sur la page 1sur 29

Généralité sur la programmation

Historique des langages de programmation

Définition
La programmation concerne toutes les actions liées au codage des programmes
informatiques à destination des différents systèmes informatiques (logiciels, sites
internet, applications mobiles et web, plugins, etc.).

Fonctionnement d’un langage de programmation


Différents types de langages
Il existe plusieurs types de langages de programmation, chacun avec un
fonctionnement spécifique. Ainsi, il existe des langages dits compilés, interprétés et
semi-interprétés.
Un langage compilé utilise un programme appelé compilateur, qui se charge de
traduie directement le code source écrit en code binaire. C’est le cas du langage C,
C++, C#...
Un langage interprété utilise un interpréteur pour fonctionner, il a la particularité
d’être plus rapide lors de l’exécution car il ne passe pas par l’étape de compilation.
C’est le cas par exemple du langage python, JavaScript…
Un langage sémi-interprété utilise une machine virtuelle qui traduit un pseudo code
appelé byte code en code binaire. Il est réputé pour sa portabilité. C’est le cas du
langage Java.
Fonctionnement d’un langage compilé
L’ordinateur est une machine qui ne comprend que le langage binaire, une suite de 0
et de 1(011101010010). Ainsi, toutes les opérations faites, sont d’abord traduites par
un langage binaire comme le calcul « 3 + 5 ». Ce langage est absolument
incompréhensible et difficile pour un humain d’écrire des programmes.
L’informaticien écrit donc le code source en langage informatique, puis fait appel au
compilateur, qui à son tour se charge de convertir le code source en langage binaire.

Le schéma suivant résume ce qui a été expliqué plus haut.

Le On obtient un
programme programme en
Votre programme est de binaire que votre
écrit dans un langage traduction ordinateur
simplifié traduit en
« Fais le calcul 3 + 5 » comprend :
code 00101010110101010
« binaire » 010
Comment écrire un programme

Pour l’écriture d’un programme, il faut utiliser un langage de programmation. De


plus, un système (logiciels, applications, etc.) est un regroupement de programmes
(différents langages informatiques sont souvent utilisés pour les écrire) destinés aux
usagers de ce système.

Différence entre développement informatique et programmation informatique

Par conséquent, la programmation est considérée comme l’écriture du code source


d’un système informatique. Il est plus judicieux d’employer le terme de
développement afin de faire référence à toutes les actions en lien avec la conception
de systèmes et les étapes qui les structurent. De ce fait, il faut prendre en compte les
spécifications du système, sa création, sa maintenance, ses tests de performance,
son monitoring, les différentes écritures utilisées pour le programme.
Il y a quatre grandes étapes dans la programmation d’un système informatique :
la conception, l’implémentation, la conversion du code source et finalement
les tests du système. Une grande partie des programmes exécutés sur nos terminaux
numériques (smartphones, ordinateurs, tablettes, montres connectées, etc.) sont
rédigés dans des langages de programmation nommés impératifs. Autrement dit,
chaque ligne du programme est exécutée séquentiellement. En effet, la ligne d’un
certain programme réalise une action basique ou une fonction particulière. Cette
dernière suit également une logique d’actions basique

But de la programmation
Dans le cadre de la conception de systèmes informatiques, la programmation est la
base du développement informatique. Son but est l’écriture du code source des
programmes pour l’implémentation des logiciels, site internet, application web et
mobile, services, plugins, chiffrements… Généralement, le développeur est le
professionnel qui gère cette programmation informatique et dispose des différentes
compétences techniques pour maitriser les langages informatiques tels que le C, C#,
PHP, le Javascript, l’HTML, le CSS,

Exemple de quelques Langage de programmation et leur domaine d’utilisation


Il existe de nombreux langages de programmation, on peut citer : C, C++, C#,
Objectif-C, Swift, Erlang, Java, PHP, Python, B, COBOL, PASCAL, JavaScript, SQL,
HTML, CSS, Perl, Ruby, FORTRAN, Visual Basic, Delphi…
Le Langage C
Historique
Le langage C a été inventé au cours de l'année 1972 dans les Laboratoires Bell. Il
était développé en même temps qu'Unix par Dennis Ritchie et Kenneth Thompson.
Kenneth Thompson avait développé un prédécesseur de C, le langage B, qui est lui-
même inspiré de BCPL. Dennis Ritchie a fait évoluer le langage B dans une nouvelle
version suffisamment différente, en ajoutant notamment les types, pour qu'elle soit
appelée C.
Bien que C soit officiellement inspiré de B et de BCPL, on note une forte influence
de PL/I (ou de PL360) ; on a pu dire que C était à Unix et au PDP-11 ce que PL/I fut
pour la réécriture de Multics.
Par la suite, Brian Kernighan aida à populariser le langage C. Il procéda aussi à
quelques modifications de dernière minute.
En 1978, Kernighan fut le principal auteur du livre The C Programming
Language décrivant le langage enfin stabilisé ; Ritchie s'était occupé des appendices
et des exemples avec Unix. On appelle aussi ce livre « le K&R », et l'on parle de C
traditionnel ou de C K&R lorsqu'on se réfère au langage tel qu'il existait à cette
époque.
C est un langage de programmation impératif et généraliste. Il est qualifié de langage
de bas niveau dans le sens où chaque instruction du langage est conçue pour
être compilée en un nombre d'instructions machine assez prévisible en termes
d'occupation mémoire et de charge de calcul. En outre, il propose un éventail
de types entiers et flottants conçus pour pouvoir correspondre directement aux types
de donnée supportés par le processeur. Enfin, il fait un usage intensif des calculs
d'adresse mémoire avec la notion de pointeur.
Hormis les types de base, C supporte les types énumérés, composés, et opaques. Il
ne propose en revanche aucune opération qui traite directement des objets de plus
haut niveau (fichier informatique, chaîne de caractères, liste, table de hachage…).
Ces types plus évolués doivent être traités en manipulant des pointeurs et des types
composés. De même, le langage ne propose pas en standard la gestion de
la programmation orientée objet, ni de système de gestion d'exceptions. Il existe des
fonctions standards pour gérer les entrées-sorties et les chaînes de caractères, mais
contrairement à d'autres langages, aucun opérateur spécifique pour améliorer
l'ergonomie. Ceci rend aisé le remplacement des fonctions standards par des
fonctions spécifiquement conçues pour un programme donné.
Son domaine d’utilisation

Ces caractéristiques en font un langage privilégié quand on cherche à maîtriser les


ressources matérielles utilisées, le langage machine et les données binaires
générées par les compilateurs étant relativement prévisibles. Ce langage est donc
extrêmement utilisé dans des domaines comme la programmation embarquée
sur microcontrôleurs, les calculs intensifs, l'écriture de systèmes d'exploitation et les
modules où la rapidité de traitement est importante. Il constitue une bonne alternative
au langage d'assemblage dans ces domaines, avec les avantages d'une syntaxe
plus expressive et de la portabilité du code source. Le langage C a été inventé pour
écrire le système d'exploitation Unix, et reste utilisé pour la programmation système.
Ainsi le noyau de grands systèmes d'exploitation comme Windows et Linux sont
développés en grande partie en C.
En contrepartie, la mise au point de programmes en C, surtout s'ils utilisent des
structures de données complexes, est plus difficile qu'avec des langages de plus
haut niveau. En effet, dans un souci de performance, le langage C impose à
l'utilisateur de programmer certains traitements (libération de la mémoire, vérification
de la validité des indices sur les tableaux…) qui sont pris en charge
automatiquement dans les langages de haut niveau.
Dépouillé des commodités apportées par sa bibliothèque standard, C est un langage
simple, et son compilateur l'est également. Cela se ressent au niveau du temps de
développement d'un compilateur C pour une nouvelle architecture de processeur :
Kernighan et Ritchie estimaient qu'il pouvait être développé en deux mois car « on
s'apercevra que les 80 % du code d'un nouveau compilateur sont identiques à ceux
des codes des autres compilateurs existant déjà. »

Pourquoi apprendre le langage C et quand l’utiliser ?

Le langage C est à l’origine de nombreux logiciels, mais surtout des plus grands
systèmes d’exploitation.

Il a l’avantage d’être un langage minimaliste, et donc très proche de la machine. Il


est alors plus simple à contrôler.

Il permet principalement des échanges plus rapides avec la machine et c’est


pourquoi le langage C se trouve toujours beaucoup dans les systèmes
embarqués et en robotique. Il peut toutefois encore être utilisé pour la conception de
logiciels ou de jeux, mais de nouveaux langages sont plus appropriés.

Il est intéressant d’apprendre le langage C, surtout lorsqu’on débute en


programmation, car c’est un langage parent de beaucoup d’autres. Donc, il est ensuite
beaucoup plus simple d’appréhender de nouveaux langages.

Différence entre les différents langages C

En effet, il n’existe pas plusieurs langages C, mais bien un seul.

Un autre langage, comme le C++ par exemple, est un dérivé qui apporte la possibilité
de faire de la programmation orientée objet. On parle parfois de surcouche, ce qui est
le cas, mais le code diffère tout de même.

Il existe aussi d’autres langages qui s’apparentent au langage C :


• L’Objective-C, autre langage pour la programmation objet, mais avec
une conception totalement différente. C’est un langage lié à l’univers
Apple.
• Le C# qui est un langage très abordable, mais plus limité dans son
utilisation. On peut l’utiliser, par exemple, comme Java, au sein du
moteur de création de jeux vidéo : Unity.

Qualités et défauts
C est un des langages les plus utilisés car :

• Il existe depuis longtemps, le début des années 1970 ;


• Il est fondé sur un standard ouvert ;
• Il permet la minimisation de l'allocation mémoire nécessaire et la
maximisation de la performance, notamment par l'utilisation de pointeurs ;
• Des compilateurs et bibliothèques logicielles existent sur la plupart
des architectures ;
• Il a influencé de nombreux langages plus récents
dont C++, Java, C# et PHP ; sa syntaxe en particulier est largement
reprise ;
• Il met en œuvre un nombre restreint de concepts, ce qui facilite sa maîtrise
et l'écriture de compilateurs simples et rapides ;
• Il permet l'écriture de logiciels qui n'ont besoin d'aucun support à l'exécution
(ni bibliothèque logicielle ni machine virtuelle), au comportement prévisible
en temps d'exécution comme en consommation de mémoire vive, comme
des noyaux de système d'exploitation et des logiciels embarqués.
Ses principaux inconvénients sont :

• Faible gestion des erreurs à cause du peu de vérifications offertes par les
compilateurs d'origine (K&R C), et l'absence de vérifications à l'exécution,
• Son approche de la modularité restée au niveau de ce qui se faisait au début
des années 1970, et largement dépassée depuis par d'autres langages :
o il ne facilite pas la programmation orientée objet,
• Il ne permet pas de créer des espaces de noms, le support très limité de
la généricité, malgré l’introduction des expressions à type générique en
C11 ;
• Les subtilités de l'écriture de programmes portables, car le comportement
exact des exécutables dépend de l'ordinateur cible ;
• Les bugs graves qui peuvent être causés par un simple manque d'attention
du développeur ; tel le dépassement de tampon qui constitue une faille de
sécurité informatique exploitable par les logiciels malveillants ;
• Certaines erreurs ne peuvent être détectées automatiquement qu'à l'aide
d'outils supplémentaires et non standardisés, comme lint et Valgrind ;
• La faible productivité du langage par rapport aux langages plus récents
Fonctionnement du langage C
C est un langage de programmation de bas niveau qui utilise un compilateur pour
effectuer l’opération de conversion du code source en langage de programmation en
code binaire. Le code source se trouve dans fichier ayant une extension .c.
Exemple : main.c, exercice.c, algo.c…

Les caractères de base utilisés et quelques raccourcis clavier


• ;(point virgule) :Marque la fin d’une instruction ;
• { } (Accolades ouvrantes et fermantes) : Délimite un bloc d’instruction ;
• \(Anti slash) : Caractère d’échappement
• ‘‘ (Double quotte) : Pour insérer une chaine de caractère ;
• ‘ (Simple quotte) : Pour insérer un caractère ;
• //(Double slash) : Insérer un commentaire uni ligne
• /*………*/ : Permet d’insérer un commentaire multi ligne
• () -parenthèse ouvrante et fermante :Pour les paramètres des fonctions ou
des structure ;
• [ ] (Crochets ouvrants et fermants) : Pour les tableaux
• < > et # (chevrons ouvrants et fermants) : Pour les directives de
préprocesseur
Quelques raccourcis clavier :
# : Alt Gr + 3
{ : Alt Gr + 4
} : Alt Gr + =
[ : Alt Gr + 5
] : Alt Gr + )
( : Touche 5 sur la ligne alpha numérique
) : Touche sur la ligne alpha numérique
\ : Alt Gr + 8
< : Maintenir Alt gauche + 60
> : Maintenir Alt gauche + 62

Les outils qu’il faut pour le développement


• Un éditeur de texte pour écrire le code source du programme en C++. En
théorie un logiciel comme le Bloc-Notes sous Windows ou vi sous Linux fait
l'affaire. L'idéal, c'est d'avoir un éditeur de texte intelligent qui colore tout seul
le code, ce qui permet de se repérer bien plus facilement.
• Un compilateur pour transformer (« compiler ») le code source en binaire.
• Un débugger (« Débogueur » ou « Débugueur » en français) pour aider à
traquer les erreurs dans le programme.

Afin de répondre aux besoins des développeurs, l'integrated development environment


(ou IDE) propose un panel d'outils dédiés à la programmation, il est plus simple
d'appréhender un projet de développement. Par exemple, la création d'un logiciel ou
d'une application Web.

Quels sont les particularités et les avantages d'un IDE ?

Dans le domaine du développement informatique, l’IDE (ou Integrated Development


Environment) regroupe un ensemble d’outils spécifiques. Ceux-ci sont dédiés aux
programmeurs afin qu’ils puissent optimiser leur temps de travail et améliorer leur
productivité. Autrement dit, l’IDE facilite la mise en œuvre de projets tels que le
développement de logiciels ou d’applications.
Pour cela, il assure l’automatisation de certaines tâches et peut éventuellement réaliser des
opérations de simplification du langage, comme Java ou Python. De nombreux IDE
proposent aussi des services annexes, comme la gestion de projet, la création de
prototypes ou encore l’organisation et la planification des travaux. On peut donc considérer
l’IDE comme une trousse à outils. Certains d’entre eux sont utilisables individuellement.
D’autres, en revanche, offrent une complémentarité afin de pouvoir disposer de leurs
fonctionnalités respectives sur un même projet.
Quelles sont les catégories d’outils que doit contenir un IDE ?
Voici une liste non exhaustive des principaux composants d’un IDE :
•Un éditeur de texte et de code source ;
•Un créateur d’interface graphique ;
•Un outil de tests automatiques pour s’assurer de la stabilité de l’application ;
•Un contrôleur de versions;
•Un compilateur ;
•Un éditeur de liens et de base de données ;
•Un débogueur en ligne ;
•Un outil d’analyse des exigences ;
•Un moteur de recherches compatible avec différents langages de programmation ;
•Un modélisateur…

Exemples de quelques IDE :

DevC++, Visual Studio code, Sublime Text, Code::Blocks, Eclipse, NetBeans, IntelliJ,
NotePad, NotePad++, Code Lite, XCode, KDevelop …

La syntaxe du langage
#include <stdio.h>

int main(void)
{
printf("hello, world\n");
return 0;
}

• #include <stdio.h> inclut l'en-tête standard <stdio.h> contenant les déclarations


des fonctions d'entrées-sorties de la bibliothèque standard du C, dont la
fonction printf utilisée ici.
• int est le type renvoyé par la fonction main. Le type int est le type implicite en
K&R C et en C89, et il était couramment omis du temps où l'exemple de
Kernighan et Ritchie a été écrit. Il est obligatoire en C99.

Le mot-clé void entre parenthèses signifie que la fonction n'a aucun paramètre

• L'instruction return 0; indique que la fonction main retourne la valeur 0.


Cette valeur est de type int, et correspond au int devant le main.

Les variables
Définition

Dans un langage de programmation, une variable permet de conserver des données.


Ce sont des parties de la mémoire qui contiennent des chaînes, des nombres, etc.
Les variables permettent d'effectuer des calculs mathématiques, de faire des
comparaisons ou tout simplement de stocker des informations pour les retrouver plus
tard.

Une variable est représentée par :


• un nom : Nom donné à la variable afin de la manipuler par le langage.
• un type : Nature de la donnée stockée dans la variable
• une valeur : Information stockée dans la variable.
• une portée : Limite d'utilisation de la variable dans le programme. La portée
est définie principalement par l'endroit où la variable est déclarée.

Déclaration d’une variable

Avant d'utiliser une variable, il faut tout d'abord la déclarer (c'est-à-dire la créer).
La déclaration se réfère donc à la création ou à l’instanciation de la variable
Exemple :
int a ;
double nombre ;

L’affectation
Lorsque la variable est déclarée, il est possible de l'affecter (ou lui donner une
valeur). L'opérateur = permet d'effectuer cette affectation.
Exemple :
a = 23 ;
nombre = 2.7 ;
Les types de variables

Définir le type d’une variable permet donc de préciser son contenu potentiel et ce que
nous pouvons faire avec. Le langage C fournit neuf types de base.

Type Sert à stocker

_Bool un entier

char un caractère ou un entier

short int un entier

int un entier

long int un entier

long long int un entier

float un réel

double un réel

long double un réel

Les types short int, int, long int et long long int servent tous à stocker des nombres
entiers qui peuvent prendre des valeurs positives, négatives, ou nulles. On dit qu’il
s’agit de types signés (car ils peuvent comporter un signe). Pour chacun de ces quatre
types, il existe un type équivalent dit non signé. Un type entier non signé est un type
entier qui n’accepte que des valeurs positives ou nulles : il ne peut pas stocker de
valeurs négatives. Pour déclarer des variables d’un type non signé, il vous suffit de
faire précéder le nom du type entier du mot-clé unsigned.

Le type _Bool est un type entier non signé un peu particulier : il permet de stocker soit
0, soit 1, on parle d’un booléen (nous verrons de quoi il s’agit un peu plus tard). À ce
titre, _Bool est le type entier non signé avec la plus faible capacité.

Le type char peut lui aussi servir à stocker des nombres. Il sert surtout au stockage de
caractères, mais ces derniers étant stockés dans l’ordinateur sous forme de nombres,
il est possible de stocker des nombres dans un char. Le seul problème, c’est que ce
type peut être signé ou non signé de base suivant les compilateurs. Pour éviter les
ennuis, spécifiez ce que vous souhaitez lors de la déclaration : non signé (unsigned
char) ou signé (signed char).

Les types float, double et long double permettent quant à eux de stocker des nombres
réels.

Conventions nommage des variables


Un identificateur est un nom donné à une variable pour la différencier de toutes les
autres.

• seuls les 26 lettres de l’alphabet latin (majuscules ou minuscules), le trait de


soulignement « _ » (underscore en anglais) et les chiffres sont acceptés. Pas
d’accents, pas de ponctuation ni d’espaces ;
• un identificateur ne peut pas commencer par un chiffre ;
• les mots-clés ne peuvent pas servir à identifier une variable ; il s’agit de :

auto if unsigned
break inline void
case int volatile
char long while
const register _Alignas
continue restrict _Alignof
default return _Atomic
do short _Bool
double signed _Complex
else sizeof _Generic
enum static _Imaginary
extern struct _Noreturn
float switch _Static_assert
for typedef _Thread_local
goto union

• Deux variables ne peuvent avoir le même identificateur (le même nom). Il y a


parfois quelques exceptions;
• les identificateurs peuvent être aussi longs que l’on désire, toutefois le compilateur
ne tiendra compte que des 63 premiers caractères.

Voici quelques exemples pour bien comprendre.

Identificateur correct Identificateur incorrect Raison

variable Nom de variable Espaces interdits

nombre_de_vie 1nombre_de_vie Commence par un chiffre


Identificateur correct Identificateur incorrect Raison

test test! Caractère « ! » interdit

un_dernier_pour_la_route1 continue Mot-clé réservé par le langage

On peut en l’occurrence utiliser la notation camel case pour nommer les variables :
nombre_de_vie = nombreDeVie.

NB : Le C fait la différence entre les majuscules et les minuscules (on dit qu’il respecte
la casse). Ainsi les trois identificateurs suivants sont différents.

variable
Variable
VaRiAbLe

Autres exemples de déclaration des variables :


int main(void)
{
_Bool booleen = true;
double taille = 3.9;
unsigned char age = 42
char caractere = ‘F’;
short petite_valeur;
char a = 'a';

return 0;
}

Les constantes

En plus d’attribuer une valeur à une variable, il est possible de préciser que cette
variable ne pourra pas être modifiée par la suite à l’aide du mot-clé const. Ceci peut
être utile pour stocker une valeur qui ne changera jamais (comme la constante \piπ qui
vaut toujours 3,14159265).

const double pi = 3.14159265;

Notez qu’il n’y a aucune limite au nombre d’affectations, comme le démontre l’exemple
ci-dessous.

petite_valeur = 2;
petite_valeur = 4;
petite_valeur = 8;
petite_valeur = 16;
petite_valeur = 8;
petite_valeur = 4;
petite_valeur = 2;

À chaque affectation, la variable va prendre une nouvelle valeur. Par contre, on ne met
pas le type quand on veut changer la valeur, sinon il y aura une erreur du type
« redefinition of 'nom_de_votre_variable' » car on aurait créé deux variables avec le
même identificateur !

Le code suivant est donc incorrect.

int age = 15;


int age = 20;

Les entrées/sorties
Les entrées/sorties (E/S) en programmation C sont les mécanismes qui permettent à
un programme de communiquer avec l'utilisateur et le monde extérieur. Les fonctions
d'E/S sont essentielles pour afficher des résultats à l'écran, lire des données depuis
la console, et manipuler des fichiers.
b. Importance
Les E/S sont cruciales pour rendre les programmes interactifs. Elles permettent à
l'utilisateur de fournir des informations au programme et d'obtenir des résultats en
retour. Sans un mécanisme d'E/S efficace, un programme serait limité dans son
utilité pratique.

La sortie standard
printf()
La fonction printf() est utilisée pour afficher des données à la console. Elle utilise des
spécificateurs de format pour définir le type de données à afficher.

Exemple :
Format Description
%d Une donnée entière de type int

Une donnée entière de type int. Si la valeur est inférieure à 100, des caractères
%3d
blancs sont ajoutés pour compléter sur 3 caractères.

Une donnée entière de type int. Si la valeur est inférieure à 100, des caractères 0
%03d
sont ajoutés pour compléter sur 3 caractères.

%ld Une donnée entière de type long.

%lu Une donnée entière de type long non signée.

%x Une donnée entière affichée en héxadécimal (ff, par exemple).

%X Une donnée entière affichée en héxadécimal et en majuscules (FF, par exemple).

%f Une donnée décimale de type float.

%lf Une donnée décimale de type double.

Une donnée décimale de type double, affichée au total sur cinq caractères (.
%5.2lf
compris) et avec deux chiffres après le caractère de séparation.

Une donnée décimale de type double, affichée de manière la plus compacte


possible. Le choix entre la notation exponentielle ou décimale est
%g
automatiquement réalisé pour obtenir l'affichage le plus concis. La partie décimale
n'apparait que si elle contient au moins un chiffre.

%c Une donnée de type caractère.

%s Une donnée de type chaîne de caractères.

%10s Une donnée de type chaîne de caractères sur 10 caractères alignés par la droite.

Une donnée de type chaîne de caractères sur 10 caractères alignés par la


%-10s
gauche.

Une donnée de type adresse en mémoire. Cette adresse sera présentée sous
%p
forme hexadécimale.

puts()
La fonction puts() est spécialement conçue pour afficher des chaînes de caractères.
Elle ajoute automatiquement un saut de ligne à la fin.

Exemple :
L’entrée standard
scanf()
La fonction scanf() est utilisée pour lire des données depuis la console. Elle utilise
des spécificateurs de format pour indiquer le type de données à lire.

Exemple :

getchar()
La fonction getchar() permet de lire un seul caractère depuis la console. Elle est
souvent utilisée pour attendre une pression sur la touche "Entrée".

Exemple :
La fonction gets() était autrefois utilisée pour lire une chaîne de caractères depuis la
console en langage C. Cependant, elle a été dépréciée en raison de problèmes de
sécurité, car elle ne prend pas en compte la taille maximale de la chaîne et peut
conduire à des dépassements de tampon. Par conséquent, son utilisation est
fortement déconseillée.

Au lieu de gets(), la fonction recommandée pour lire une ligne de texte depuis la
console est fgets(). fgets() permet de spécifier une taille maximale pour la chaîne,
ce qui contribue à éviter les problèmes de dépassement de tampon.

fgets()
La fonction fgets() est utilisée pour lire une ligne de texte depuis la console. Elle
prend en compte la taille maximale de la chaîne pour éviter les dépassements de
tampon.

Exemple :
Remarque : fgets() inclut le caractère de nouvelle ligne ('\n') dans la chaîne lue, il
peut donc être nécessaire de le traiter en conséquence

Sécurité avec fgets()

fgets() est plus sûr que gets() car elle permet de spécifier la taille maximale du
tampon, réduisant ainsi le risque de dépassement de tampon.

Exemple d'utilisation incorrecte de gets() :

Les opérateurs arithmétiques


Définition
Les opérateurs arithmétiques sont des symboles spéciaux utilisés pour effectuer des
opérations mathématiques sur les variables et les valeurs.

Liste des Opérateurs Arithmétiques


1. + (Addition) : Ajoute deux valeurs.
2. - (Soustraction) : Soustrait la deuxième valeur de la première.
3. * (Multiplication) : Multiplie deux valeurs.
4. / (Division) : Divise la première valeur par la deuxième.
5. % (Modulo) : Donne le reste de la division de la première valeur par la
deuxième.
Utilisation des Opérateurs Arithmétiques
a. Exemples d'Addition

Exemples de Soustraction
Exemples de Multiplication

Exemples de Modulo
#include <stdio.h>

int main() {
int a = 7, b = 3;
int reste = a % b;

printf("Le reste de la division de %d par %d est : %d\n", a, b, reste);

return 0;
}

Les opérateurs logiques


Les opérateurs logiques en langage C sont utilisés pour effectuer des opérations
logiques sur des valeurs booléennes (vraie ou fausse). Voici les principaux
opérateurs logiques et des exemples d'utilisation :
Opérateur ET logique (&&) :
• Renvoie vrai (1) si les deux opérandes sont vraies.
Exemple :
Opérateur OU logique (||) :
• Renvoie vrai (1) si au moins l'une des deux opérandes est vraie.
Exemple :

Opérateur NON logique (!) :


• Inverse la valeur de l'opérande.
Exemple :
Exemple combiné :
• Utilisation d'opérateurs logiques dans une condition complexe.
Exemple :

Ordre des opérateurs


Lorsque plusieurs opérateurs apparaissent dans une expression, l'ordre dans lequel
ils sont évalués est déterminé par la priorité des opérateurs. Voici un aperçu des
principaux opérateurs en langage C classés par ordre de priorité décroissante. Les
parenthèses peuvent être utilisées pour changer l'ordre d'évaluation.
1. Parenthèses () :
• Utilisées pour définir l'ordre d'évaluation.
2. Postfix ++, -- :
• Utilisés pour l'incrémentation et la décrémentation après l'utilisation de
la variable.
3. Unaire +, -, !, ~ :
• + et - sont utilisés pour l'arithmétique unaire.
• ! est l'opérateur logique NOT.
• ~ est l'opérateur de complément binaire.
4. Multiplicatif *, /, % :
• * est l'opérateur de multiplication.
• / est l'opérateur de division.
• % est l'opérateur modulo (reste de la division).
5. Additif +, - :
• + est l'opérateur d'addition.
• - est l'opérateur de soustraction.
6. Shift <<, >> :
• Utilisés pour les opérations de décalage binaire à gauche (<<) et à
droite (>>).
7. Relationnel <, >, <=, >= :
• Utilisés pour les comparaisons.
8. Égalité ==, != :
• == teste l'égalité.
• != teste la différence.
9. ET Bit à Bit & :
• Opérateur de ET bit à bit.
10. XOR Bit à Bit ^ :
• Opérateur XOR bit à bit.
11. OU Bit à Bit | :
• Opérateur de OU bit à bit.
12. ET Logique && :
• Opérateur de ET logique.
13. OU Logique || :
• Opérateur de OU logique.
14. Ternaire ? : :
• Opérateur ternaire conditionnel.
15. Affectation =, +=, -=, *=, /=, %= :
• Utilisés pour assigner des valeurs aux variables.
16. Virgule , :
• Utilisée pour séparer les expressions dans une liste.

L’incrémentation et la décrémentation
En informatique, l'incrémentation est l'opération qui consiste à ajouter 1 (et par
extension toute valeur entière fixée) à un compteur. L'opération inverse,
la décrémentation, consiste à retirer 1 (ou toute valeur entière fixée) au compteur.
Cette opération est très courante dans les programmes informatiques, notamment
dans les boucles d'itération, si bien que la plupart des langages de
programmation implémentent des opérateurs d'incrémentation et de décrémentation.
Ainsi, dans un grand nombre de langages, la syntaxe suivante permet d'ajouter ou
de retirer une unité à la variable x :

• ++x (respectivement --x) en forme préfixée, qui équivaut à x = x + 1 (resp. x = x -


1)
• x++ (resp. x--) en forme suffixée, qui équivaut à x = x + 1 (resp. x = x - 1)
Si la valeur de x, après l'évaluation de l'instruction x++ ou ++x est toujours le
successeur de x, il y a néanmoins une subtilité concernant la valeur de retour de
l'instruction, selon la forme utilisée ; L'une est la valeur avant incrémentation, l'autre
est la valeur après incrémentation :

• y = x++ équivaut à y = x ; x = x + 1
• y = ++x équivaut à x = x + 1 ; y = x

Les structures de contrôle


Définition
Les structures de contrôle permettent de gérer le flux d'exécution d'un programme en
décidant quelles instructions seront exécutées à quel moment. Il existe trois types
principaux de structures de contrôle : séquentielle, conditionnelle et itérative.

Structure Séquentielle
La structure séquentielle est la structure de base où les instructions sont exécutées
une après l'autre, dans l'ordre dans lequel elles apparaissent.

Exemple :

Structures Conditionnelles
Les structures conditionnelles permettent d'exécuter des blocs de code en fonction
de conditions.
IF
SWITCH

. Structures Itératives (Boucles)


Les structures itératives permettent de répéter l'exécution d'un bloc de code tant
qu'une condition est vraie.
WHILE
FOR

La boucle do-while

La boucle do while fonctionne comme la boucle while, à un petit détail près : elle
s’exécutera toujours au moins une fois, alors qu’une boucle while peut ne pas
s’exécuter si la condition est fausse dès le départ.

Syntaxe

À la différence de la boucle while, la condition est placée à la fin du bloc d’instruction


à répéter, ce qui explique pourquoi celui-ci est toujours exécuté au moins une fois.
Remarquez également la présence d’un point-virgule à la fin de l’instruction qui est
obligatoire.

do
{
/* Bloc d'instructions à répéter */
} while (/* Condition */);

Si vous n’avez qu’une seule instruction à exécuter, les accolades sont facultatives.

do
/* Une seule instruction */
while (/* Condition */);
Exemple 1

Voici le même code que celui présenté avec l’instruction while.

#include <stdio.h>

int main(void)
{
int i = 0;

do
{
printf("La variable i vaut %d\n", i);
++i;
} while (i < 5);

return 0;
}
Résultat
La variable i vaut 0
La variable i vaut 1
La variable i vaut 2
La variable i vaut 3
La variable i vaut 4

Opérateur Ternaire
a. Définition
L'opérateur ternaire est une expression conditionnelle compacte qui permet d'écrire
une condition en une seule ligne.

b. Syntaxe
(condition) ? expression_si_vraie : expression_si_fausse;
#include <stdio.h>

int main() {
int a = 5, b = 10;
// Utilisation de l'opérateur ternaire pour déterminer le plus grand nombre
int plusGrand = (a > b) ? a : b;

printf("Le plus grand nombre est : %d\n", plusGrand);

return 0;
}

Les opérateurs ternaires sont des constructions compactes pour écrire des
conditions simples en une seule ligne. En C, l'opérateur ternaire est souvent utilisé
pour remplacer une structure de contrôle if-else lorsqu'une seule instruction doit être
exécutée en fonction d'une condition.

6. Opérateur Ternaire
a. Définition
L'opérateur ternaire est une expression conditionnelle compacte qui permet d'écrire
une condition en une seule ligne.

b. Syntaxe
cCopy code
(condition) ? expression_si_vraie : expression_si_fausse;

Exemple
cCopy code
#include <stdio.h> int main() { int a = 5, b = 10; // Utilisation de l'opérateur ternaire
pour déterminer le plus grand nombre int plusGrand = (a > b) ? a : b; printf("Le plus
grand nombre est : %d\n", plusGrand); return 0; }

Dans cet exemple, si a est supérieur à b, alors plusGrand prend la valeur de a,


sinon il prend la valeur de b.

Avantages et Limitations
a. Avantages
• Compacité : L'opérateur ternaire permet de réduire la quantité de code
nécessaire pour exprimer des conditions simples.
• Lisibilité : Il peut rendre le code plus lisible lorsqu'il est utilisé de manière
judicieuse.
b.Limitations
• Complexité : Son utilisation excessive peut rendre le code difficile à
comprendre, en particulier pour des conditions complexes.
• Limité à une instruction : Il est conçu pour des conditions simples avec une
seule instruction dans chaque branche.
L'instruction break
L'instruction break est utilisée pour sortir d'une boucle (for, while, ou do-while)
prématurément, avant que la condition normale de sortie soit satisfaite.

Vous aimerez peut-être aussi