Université Sultan Moulay Slimane
Ecole Supérieure de Technologie - FBS
Les Bases de Programmation en C
Filière: Génie Informatique
Semestre 1
A.U 2021-2022
Pr. Rachid AIT DAOUD
1
Objectif principal:
Être capable de développer des programmes (applications)
informatiques qui soient:
▪ Correctes
▪ Simples
▪ Efficaces
▪ Rapides
Avec le langage de programmation C.
2
Plan de cours
Chapitre 1- Introduction à la programmation
▪ Langage de programmation
▪ Compilation et exécution d’un programme en C
Chapitre 2- La programmation sous C
▪ Structure d’un programme en C
▪ Les directives de compilation
▪ Types de base, variables et constantes
▪ L’affectation (Assignation)
▪ Les opérateurs et expressions
▪ Les entrées/sorties en C
▪ Les instructions sélectives (alternatives)
▪ Les instructions itératives (répétitives)
▪ Les Tableaux
▪ Les fonctions
▪ Les Pointeurs
▪ Les chaines de caractères
▪ Les structures
▪ Les fichiers
3
A- Introduction à la programmation
Rappel
Algorithmique et Programmation
Programme
Langage de programmation
Langage de programmation compilé
Langage de programmation interprété
4
Introduction à la programmation
Rappel
Algorithmique et Programmation:
Tout problème à programmer doit être résolu, d’abord sous forme
d’algorithme, puis converti en programme dans le langage de votre
choix.
Un algorithme est indépendant du langage de programmation utilisé.
Programme:
Est un enchainement d’instructions, écrit dans un langage
de programmation, exécutées par un ordinateur,
permettant de traiter un problème et de renvoyer des
résultats. Il présente la traduction d’un algorithme à l’aide
d’un langage de programmation.
5
Introduction à la programmation
Le cycle de développement d’un programme informatique:
Analyse Programmation Exécution et test
Problème Algorithme Programme Résultats
Cycle de développement d’un programme
6
Introduction à la programmation
Langage de programmation:
Un langage de programmation permet au programmeur d'écrire
son programme suivant une grammaire qui peut être, soit celle
du langage machine même (0 et 1), soit une grammaire
facilement interprétable par la machine ou pouvant être traduite
en langage machine au moyen d'un outil logiciel dit compilateur
du langage.
7
Introduction à la programmation
Il existe, en fait, trois niveaux des langages :
▪ Le langage binaire : il s'agit du langage machine exprimé par des chiffres (0 ou 1). Ce
langage produit, en effet, des programmes automatiquement consommables
(compréhensibles) par la machine mais qui sont illisibles et non portables.
▪ Les langages de bas niveau (comme l'assembleur) : ces langages produisent des
programmes facilement interprétables par la machine mais d'utilisation lourde pour
les programmeurs.
▪ Les langages évolués : ils sont, d'utilisation, souples et produisent des programmes
clairs et lisibles mais ils doivent encore être compilés (traduits en langage machine
par un compilateur du langage) pour générer des programmes exécutables.
Exemple: Pascal, C, C++, PHP,Visual Basic, Python et Java...
8
Introduction à la programmation
La compilation
Le C est un langage compilé. Cela signifie qu’un programme C est décrit par un
fichier texte, appelé fichier source. Ce fichier n’étant évidemment pas exécutable
par le microprocesseur, il faut le traduire en langage machine. Cette opération est
effectuée par un programme appelé compilateur.
9
Introduction à la programmation
La compilation
Le C est un langage compilé. Cela signifie qu’un programme C est décrit par un fichier texte,
appelé fichier source. Ce fichier n’étant évidemment pas exécutable par le microprocesseur, il
faut le traduire en langage machine. Cette opération est effectuée par un programme appelé
compilateur.
La compilation se décompose en fait en 4 phases successives :
1- Le traitement par le préprocesseur : le fichier source est analysé par le préprocesseur
qui effectue des transformations purement textuelles (recopier ou supprimer des sections de
codes sans chercher à les compiler).
2- La compilation : le compilateur traduit le fichier généré par le préprocesseur (C pur) en
langage assembleur, c’est-`a-dire en une suite d’instructions du microprocesseur.
3- L’assemblage : cette opération transforme le code assembleur en un fichier binaire,
c’est-à-dire en instructions directement compréhensibles par le processeur. (Le fichier produit
par l’assemblage est appelé fichier objet)
4- Editions des liens: C'est la dernière phase de la compilation, qui sert à éditer des liens
afin d’assembler les fichiers binaires « .o » générés dans la phase précédente en un seul gros
fichier : appelé l'exécutable final, Cet exécutable a l'extension « .exe ».
10
Introduction à la programmation
❑ Les catégories de langages
Langage de programmation compilé:
Un programme écrit dans un langage compilé va être traduit
une fois pour toutes par un programme annexe (compilateur)
afin de générer un nouveau fichier appelé exécutable.
Langage de programmation interprété:
Un programme écrit dans un langage interprété a besoin d’un
programme auxiliaire (l’interpréteur) pour traduire au fur et à
mesure les instructions du programme.
11
Récapitulatif:
Un programme informatique est un ensemble d’instructions
exécutable par l’ordinateur. Ces instructions sont écrites
utilisant un langage de programmation et traduites par un
compilateur
12
Chapitre 2- La programmation sous C
En 1970, Dennis RITCHIE a créé le langage C, un langage de
haut niveau, pour écrire le système d'exploitation Unix. La
conception de ce langage a été régie par les pré requis
suivants :
La souplesse
La fiabilité
La portabilité
13
1. STRUCTURE D'UN PROGRAMME EN C
UN PREMIER PROGRAMME EN C
/*Ce programme affiche un message*/
main( )
{
printf("Welcome");
}
main () indique qu'il s'agit du programme principal.
{ et } jouent le rôle de début et fin de programme.
Printf est l'instruction d'affichage à l'écran, le message étant entre guillemets.
; indique la fin d'une instruction.
14
1. STRUCTURE D'UN PROGRAMME EN C
Structure général d’un programme en C
Un programme en C se présente en général sous la forme suivante :
<Directives de compilation>
<Déclaration de variables externes>
<Déclaration de prototypes de fonctions>
main ( )
{
corps du programme
(commentaires,
déclaration de variables et constantes,
instructions)
}
<Définition de fonctions>
Remarque :
Un programme en C doit contenir au moins le programme principal (la partie main).
15
2. Les directives de compilation
Syntaxe :
#include < nom_fichier>
#include indique le fichier de bibliothèque C à inclure dans le programme. Ce
fichier
contient les définitions de certaines fonctions prédéfinies utilisées dans le
programme.
--------------------------------------------
Syntaxe :
#define expression_à_remplacer expression_de_remplacement
#define permet de remplacer un symbole par une constante ou un type.
Exemples :
#include <stdio.h> /*ce fichier contient les fonctions d'entrées/sorties comme
printf*/
#define pi 3.14 /*pi sera remplacé par la valeur 3.14*/
#define entier int /*entier sera remplacé par le type prédéfini int*/
16
3. Les commentaires
Un commentaire est un texte placé entre les signes /* et */.
Il permet de commenter une ou plusieurs lignes de
commandes en vue d'éclairer le lecteur.
Syntaxe :
/* texte du commentaire */
Exemples :
main( )
{
printf("bonjour"); /* ce programme affiche bonjour*/
/* commentaire s’étendant
sur plusieurs lignes
de programme source */
int i ; /* compteur de boucle */
}
17
3. Les commentaires
Remarque
La norme C99 autorise une seconde forme de commentaire, dit « de fin de ligne
», que l’on retrouve également en C++.
Un tel commentaire est introduit par // et tout ce qui suit ces deux caractères
jusqu’à la fin de la ligne est considéré comme un commentaire. En voici un
exemple :
printf ("Welcome\n") ; // formule de politesse
18
4. Les variables et les constantes
4.1 Notion de variable
Les données ainsi que les résultats des calculs intermédiaire ou finaux, sont rangés dans des
cases mémoires qui correspondent à des variables.
Ainsi une variable est rangée dans un emplacement mémoire nommé, (dont la taille dépend
du type) prenant au cours du déroulement du programme, un nombre indéfini de valeurs
différentes.
4.2 Déclaration des variables
La partie déclaration consiste à énumérer toutes les variables
dont on aura besoin au cours du programme.
→ Chaque déclaration doit comporter le nom de la variable
(identificateur) et son type.
Syntaxe :
Type identificateur;
Ou
Type identificateur1, identificateur2, … ,identificateur n;
19
4. Les variables et les constantes
▪ 4.2 Déclaration des variables (suite)
Syntaxe :
Type identificateur;
Ou
Type identificateur1, identificateur2, … ,identificateur n;
Exemple:
Déclaration de varaibles
int i; /* i est une variable de type entier */
float j,k; /* j et k sont des variables de type réel */
char c; /* c est une variable de type caractère */
20
4. Les variables et les constantes
▪ 4.3 Identificateurs
Un identificateur est le nom donnée à une variable, une fonction, etc. Ce nom doit
obligatoirement commencer par une lettre suivie d'une suite de lettres et de chiffres et
il ne doit pas contenir d'espace.
→ L'emploi des identificateurs doit répondre à un certain nombre d'exigences :
✓ Un identificateur doit être composé indifféremment de lettres et chiffres ainsi que
du caractère de soulignement ( _ ) qui peut remplacer des espaces.
✓ Majuscules et minuscules donnent lieu à des identificateurs différents.
✓ Un identificateur ne doit pas être un mot réservé (utilisé dans le langage C comme
int, char, … ).
Exemples :
solution1 est un identificateur valide (constitué de lettres et de 1)
1solution n'est pas un identificateur valide
prix unitaire n'est pas un identificateur valide (Il contient un espace).
prix_unitaire est un identificateur valide
jour, Jour et JOUR sont 3 identificateurs différents
int n'est pas un identificateur valide. C'est un mot utilisé en C
21
4. Les variables et les constantes
▪ 4.4 Les mots-clés
Certains « mots-clés » sont réservés par le langage à un usage bien défini et ne peuvent
pas être utilisés comme identificateurs. En voici la liste, classée par ordre alphabétique.
Les mots-clés du langage C
22
4. Les variables et les constantes
▪ 4.5 Les types de base du langage C
→ Le type d'une variable est l'ensemble des valeurs qu'elle peut prendre. Par
exemple, une variable de type logique (booléen) peut prendre les valeurs Vrai ou
Faux. Il y a des types prédéfinis et des types qui peuvent être définis par le
programmeur (les tableaux, les structures ou les unions).
→ Les types de base du langage C se répartissent en trois grandes catégories en
fonction de la nature des informations qu’ils permettent de représenter :
• nombres entiers (mot-clé int),
• nombres flottants (mot-clé float ou double),
• caractères (mot-clé char)
→ La mémoire centrale est un ensemble de positions
binaires nommées bits. Les bits sont regroupés en octets (8
bits), et chaque octet est repéré par ce qu’on nomme son
adresse.
23
4. Les variables et les constantes
▪ 4.5 Les types de base du langage C
Types simples prédéfinis en C
Type Signification Taille Exemple
(bits)
int Entier standard 16 -32768 à 32767
short int Entier court 16 -32768 à 32767
long Entier en double longueur 32 -2147483648 à 2147483647
char Caractère 8 ‘a’, ‘A’, ‘1’
float Réel 32 ± 10-37 à ± 1038
double (ou long float) Réel en double précision 64 ± 10-307 à ± 10308
long double Réel en très grande précision 80 ± 10-4932 à ± 104932
NB: Chaque Type impose naturellement ses limites. Toutefois, ces dernières dépendent, non
seulement du mot-clé considéré (type), mais également de la machine utilisée. (Tous les int n’ont
pas la même taille sur toutes les machines)
Autres types introduits par la norme C99: le type booléen, sous le nom bool .
24
4. Les variables et les constantes
▪ 4.6 Les Constantes
1. Constantes entières
La façon la plus naturelle d’introduire une constante entière dans un programme
est de l’écrire simplement sous forme décimale, avec ou sans signe, comme dans
ces exemples: +533 48 -273
2. Constantes flottantes
La notation décimale doit comporter obligatoirement un point (correspondant à notre
virgule).
La partie entière ou la partie décimale peut être omise (mais, bien sûr, pas toutes les deux
en même temps !). En voici quelques exemples corrects : 12.43 -0.38 -.38 4. .27
3. Constantes caractères
Les constantes qui désignent un (seul) caractère sont toujours indiquées entre des
apostrophes: par exemple 'x'. La valeur d'un caractère constant est le code interne de ce
caractère. Ce code (ici: le code ASCII) est dépendant de la machine.
25
4. Les variables et les constantes
▪ 4.6 Les Constantes (suite)
Déclaration de constantes
▪ Une constante est une donnée dont la valeur ne varie pas lors de l'exécution du
programme.
▪ Elle doit être déclarée sous forme :
Syntaxe : constType Identificateur = Valeur ;
Remarque:
Une valeur constante peut, également, être exprimée au moyen d’un identificateur défini en
utilisant la directive #define: #define Identificateur Valeur
main( )
{
const float pi=3.14; /*déclare la constante pi avec const*/
Exemple: printf("pi égale à %f",pi); /*affiche la valeur de pi*/
}
#define pi 3.14 /*définit la constante pi avec define*/
main( )
{ printf("pi égale à %f",pi); /*affiche la valeur de pi*/}
26
4. Les variables et les constantes
▪ 4.7 Fonctions prédéfinies sur les types simples:
Des fonctions appliquées au différents types de données sont prédéfinies dans des
fichiers de bibliothèque C.
❑ Fonctions mathématiques: Math.h
Ce fichier contient des fonctions mathématiques pouvant être appliquées
aux types numériques.
Exemple:
#include <math.h> /*pour inclure le fichier math.h*/
main( ) /* fonction principale
{
int p,i=4,j=-2; /* p entier et i et j entiers initialisés à 4 et -2*/
float r; /* r réel*/
p=pow(i,2); /* p reçoit 16 (4 à la puissance 2) */
r=sqrt (i); /* r reçoit 2 (racine carrée de 4) */
i=abs(j); /* i reçoit 2 (valeur absolue de -2)*/
}
27
5. Initialisation de variables
→ Une valeur initiale peut être affectée à une variable dès la déclaration sous forme:
Syntaxe :
a) Cas de types numériques :
Type Identificateur = Valeur numérique ;
b) Cas du type caractère :
Type Identificateur = 'caractère' ;
Exemple:
main( )
{
int i, j=3, k; /* seul j est initialisé à 3*/
char b=‘A’;
}
28
6. L’affectation
L'affectation est l'opération qui attribue à une variable, au moyen de l'opérateur =, une
valeur constante ou résultat d'une expression.
Syntaxe :
Variable = Valeur ou expression ;
Exemple:
main( )
{
int i, j;
i=2; /*i reçoit 2*/
j=(i*3)+5; /*j reçoit 11 résultat de (2*3)+5*/
i=j=2; /*j reçoit d'abord 2 puis i reçoit la valeur de j (2)*/
}
Remarque :
C permet de faire des assignations entre des variables de types différents. Des
conversions de types sont alors automatiquement réalisées.
29
6. L’affectation
Exemple: Conversion automatique de types
1- main( )
{
int i; /*i entier*/
float j=3.5; /*j réel initialisé à 3.5*/
i=j; /*i reçoit ??? */ 3
}
2- main( )
{
int i; /*i entier*/
char c='A'; /*c caractère initialisé à A*/
i=c; /*i reçoit ??? */ 65 code ascii de A
}
30
7. Les entrées/Sorties
▪ 7.1 L’affichage de données
La fonction printf est utilisée pour afficher du texte, des valeurs de variables
ou des résultats d'expressions sur la sortie standard (qui est l'écran).
Cette fonction est prédéfinie dans la bibliothèque stdio.h.
Syntaxe :
1- affichage de message constitué de texte et de caractères de contrôle
Printf ("texte et caractères de contrôle") ;
2- affichage de valeurs de variables ou d'expressions
Printf("message et formats d'affichage", arg1, arg2,…,argn);
Arg1, arg2, argn Noms de variables ou expressions
31
7. Les entrées/Sorties
▪ 7.1 L’affichage de données
Exemples :
main( )
{
int i=2,k=5;
float j=3.5;
printf("Donnez le prix unitaire");
printf("Donnez le prix unitaire \n");
printf("la valeur de i est %d\n ",i);
printf("i=%d j=%f",i,j);
printf("i=%d\n j=%f",i,j);
printf("somme(%d,%d)=%d\nFIN",i,k,i+k); }
32
7. Les entrées/Sorties
▪ 7.2 La lecture de données
L’instruction scanf effectue la lecture des variables.
Cette fonction est prédéfinie dans la bibliothèque stdio.h.
Syntaxe :
scanf("formats d'affichage", adressevariable1, adressevariable2,…,adressevariablen) ;
Exemple:
int A=7;
printf("Entrer un nombre entier");
scanf("%d", &A); // le programme lit une valeur entière et l’affecté à la variable A.
33
34
7. Les entrées/Sorties
35
8. Les opérateurs et expressions
▪ 8. 1 Les opérateurs arithmétiques:
Les opérateurs arithmétiques permettent de faire des calculs entre des valeurs
numériques :
entre des réels et/ou des entiers : +, -, * (la multiplication), / (la division entière ou
réelle selon le type des opérandes)
entre deux entiers : % (le reste de la division entière )
main( )
{
int i=9,j=4,k; /*i, j et k entiers*/
float x=9, y; /*x et y réel*/
k=i+j; /*k reçoit 13*/
y=i/j; /*y reçoit 2.0 (division entière : i et j entiers)*/
y=x/j; /*y reçoit 2.25 (division réelle : x réel*/
y=9.0/j; /*y reçoit 2.25 (division réelle : 9.0 réel*/
k=i%j; /*k reçoit 1 (reste de la division de i par j)*/
36
}
8. Les opérateurs et expressions
▪ 8. 2 Les opérateurs d’affectation:
1- Affectation simple « = »
2- Affectation avec calcul arithmétique: Ils sont utilisés pour
faciliter l'écriture.
Ecriture classique Ecriture équivalente
i = i + 20; i += 20; Ces opérateurs
i = i - 20; i -= 20; effectuent le calcul
arithmétique de leur
i = i * 20; i *= 20; premier opérande
i = i / 20; i /= 20; avec le second en
l'affectant au premier.
3- incrémentation: ajoute 1 à son opérande (++) (a++).
4- décrémentation (--)
37
8. Les opérateurs et expressions
▪ 8. 3 Les opérateurs de comparaison:
Opérateurs Signification
> >= < <= Test de supériorité et d'infériorité
== et != Test d'égalité et d'inégalité
▪ 8. 4 Les opérateurs logiques:
Opérateurs Signification
! Non logique
&& et || ET et OU logique
38
8. Les opérateurs et expressions
Exemple
#include <stdio.h>
main( )
{
int a,b,c; /*a,b et c entiers*/
printf ("Introduire a, b et c : ");
scanf ("%d%d%d",&a,&b,&c);
if (a==b && b!=c) /*si a=b et b#c affiche le message suivant*/
printf("a égale à b et b différent de c\n");
if (!(a<b) || a==0) /*si a>=b ou a=0 affiche le message suivant*/
printf("a est supérieure ou égale à b ou a égale à 0\n");
}
Remarques pour les opérations logiques
Les résultats des opérations de comparaison et des opérateurs logiques sont du type int:
- la valeur 1 correspond à la valeur booléenne vrai
- la valeur 0 correspond à la valeur booléenne faux
Attention!
Les opérateurs logiques considèrent toute valeur différente de zéro comme vrai et zéro comme faux:
39
8. Les opérateurs et expressions
▪ 8. 5 Les opérateurs particuliers de C
→ pré-incrémentation vs post-incrémentation
++i # i++
Différence ??
Remarque: lorsque l'opérateur d'incrémentation ou
Exemple
de décrémentation est placé avant son opérande ce
dernier est incrémenté avant d'être utilisé dans int i = 0 , j;
l'expression, c'est la pré-incrémentation. j = i++; (j reçoit 0)
///////////:
lorsque l'opérateur d'incrémentation ou de
int i = 0 , j;
décrémentation est placé après son opérande ce j = ++i; (j reçoit 1)
dernier est incrémenté après son utilisation dans
l'expression, c'est la post-incrémentation.
40
8. Les opérateurs et expressions
pré-incrémentation vs post-incrémentation
Question: Qu'affiche le programme suivant?
0
1
1
41