Vous êtes sur la page 1sur 40

Cours de programmation en langage C

1ère Année
2019/2020

Ecole SupTechnology, Casablanca

Par : Nadia BOUHRIZ


Plan de cours
Plan :
• Introduction générale
• Rôle d’un langage de programmation
• Langage interprété vs langage compilé
• Le processus de compilation
• L’environnement de programmation : DEV C++
• Généralités sur le langage C
• Histoire du langage C
• Structure minimale d’un programme C
• Eléments de base d’un programme C
• Les variables, valeurs, et opérateurs
• La entrées/sorties
• Les instructions de contrôle
• Les tableaux et les pointeurs
• Les structure s
• La programmation modulaire : fonctions
• Les fichiers
• La gestion dynamique de la mémoire
Introduction générale

Rôle d’un langage de programmation :

Résolution de problème par ordinateur = traitement

automatique d’information
 Pour traiter automatiquement de l’information, la machine doit

disposer d’un ou de plusieurs programmes.

 Un programme est une suite d’instructions (opérations) que la

machine peut exécuter pour effectuer des traitements


Introduction générale

Rôle du langage de programmation :


L'exécution d'un programme par l'ordinateur passe, en général, par les
étapes suivantes :
 Le processeur (unité de traitement de l’ordinateur) extrait les
données à traiter à partir de la source indiquée dans le programme
(soit auprès de l'utilisateur qui devrait les introduire au moyen du
clavier, soit en mémoire secondaire ou centrale).
 Il exécute, ensuite, la série d'opérations élémentaires de manière
séquentielle (dans l'ordre prévu par le programme) et mémorise tous
les résultats intermédiaires.
 Il renvoie enfin le ou les résultats attendus à la destination
(périphérique de sortie) indiquée dans le programme.
Introduction générale

Rôle du langage de programmation


Programme exécutable ?
 Pour pouvoir effectuer un traitement donné, la machine doit disposer
du programme exécutable correspondant.
 Ce programme doit se trouver en mémoire et doit alors être codé en
binaire (langage machine).
 Un langage de programmation est par définition différent du
langage machine. Il faut donc le traduire pour le rendre intelligible
du point de vue du microprocesseur
 Les langages de programmation sont majoritairement de deux types :
les langages interprétés et les langages compilés.
Introduction générale
Rôle du langage de programmation
Langage interprété versus langage compilé ?
 un langage interprété a besoin d'un programme auxiliaire (l'interpréteur)
pour traduire au fur et à mesure les instructions du programme.
 Exemples de langages interprétés : Le langage HTML, le langage JAVA,
etc.
 Un programme écrit dans un langage dit compilé va être traduit une fois pour
toutes par un programme annexe : le compilateur, afin de générer un
nouveau fichier qui sera autonome, c'est-à-dire qui n'aura plus besoin d'un
programme autre que lui pour s'exécuter (on dit d'ailleurs que ce fichier est
exécutable).
 Exemples de langages compilés : Le langage C, le langage C++, le Cobol,
etc
Introduction générale
Le processus de compilation
introduction générale
Le processus de compilation
2. Compilation : le compilateur lit le texte du
fichier source et traduit ce texte en un fichier
appelé fichier objet « .obj ». Pendant ce
1. Edition du programme source, à processus de traduction, le compilateur
l’aide d’un éditeur (traitement de recherche les erreurs courantes, les éléments
textes). Le nom du fichier contient manquants et d'autres problèmes. Si quelque
l’extension «.C» chose ne va pas, le compilateur affiche une liste
d'erreurs. Pour corriger les erreurs, vous
rééditez le code source et essayez à nouveau de
3. Editions de liens: c’est un outil qui compiler.
crée le programme final (le fichier 4. Exécution du programme: après l’édition
executable « .exe »). Pour ce faire, il lie de liens vient l’étape d'exécuter le résultat.
le fichier objet aux bibliothèques de L’exécution vise principalement à démontrer
langage C. Les bibliothèques que le programme fait ce que vous voulez et
contiennent les instructions qui de la manière que vous désirez. Lorsque le
indiquent à l’ordinateur ce qu’il faut programme ne fonctionne pas, vous devez
faire. Ces instructions sont revenir en arrière et corriger le code. Il est tout
sélectionnées et exécutées en fonction à fait possible de créer un programme sans
des instructions abrégées trouvées aucune erreur, puis de constater que le
dans le code de l'objet. programme ne fonctionne pas (ne donne pas
le résultat désiré)
Introduction générale
Environnement de programmation : Dev c++

 Pour réaliser un programme en C :


 La première méthode dont un programme en langage C est exécuté est
d’utiliser ces outils d’une façon distincte sur une ligne de commande. C’est
un processus qui peut encore être fait, mais c’est fastidieuse
 La deuxième méthode consiste à obtenir un environnement de
développement intégré (integrated developpement environement) appelé
IDE. Il regroupe tous les outils dont vous avez besoin pour programmer
dans une unité compacte, terrifiante et intimidante. L'EDI est utilisé pour
écrire du code, le compiler, et ensuite l’exécuter.
 L’utilisation d'un IDE résout également la multitude de problèmes liés
à la configuration d'un compilateur, à la configuration de l'éditeur de
texte et à la mise en synergie de tous ces éléments.
 Pendant ce cours, l’IDE Dev-C++ sera utilisé.
Introduction générale
Environnement de programmation : Dev c++

 DEV C++ est IDE permettant de programmer en C et en C++. Développé avec


Borland Delphi 6,
 Dev-C++ utilise la version MinGW du compilateur GCC (GNU Compiler
Collection)
 Dev-C++ peut aussi être utilisé en combinaison avec Cygwin ou tout autre
compilateur basé sur GCC.
Généralités sur le langage c
Histoire du langage C

 Le langage C a été développé en 1972 chez AT & T Bell Labs par


Dennis Ritchie.

 Il combinait des fonctionnalités des langages de programmation B


et BCPL, mais aussi un peu du langage Pascal. M. Ritchie et Brian
Kernighan ont utilisé C pour créer le système d'exploitation Unix.

 Un compilateur C fait partie de ce système d’exploitation depuis.

 Au début des années 1980, Bjarne Stoustroup utilisait le langage C


comme base du langage de programmation C ++ orienté objet.
Généralités sur le langage c
Elément de base d’un programme C

Un programme en langage C est constitué de composants élémentaires


suivants :
 Les identificateurs,
 Les mots-clefs,
 Les constantes,
 Les délimiteurs, opérateurs et séparateurs
 Les commentaires
Généralités sur le langage c
Elément de base d’un programme C
 Les identificateurs :
 Les identificateurs servent à désigner les différents « objets » manipulés par
le programme : variables, fonctions, etc.
 ils sont formés d’une suite de caractères choisis parmi les lettres ou les
chiffres, le premier d’entre eux étant nécessairement une lettre. :
• composé de lettres et chiffres ainsi que du caractère de soulignement ( _ ) qui
peut remplacer des espaces.
• commencer par une lettre ou le caractère de soulignement. Néanmoins, celui-ci
est souvent utilisé pour désigner des variables du système.
• Seuls les 32 premiers caractères sont significatifs (pris en compte par le
compilateur).
• 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, … ).
Généralités sur le langage c
Elément de base d’un programme C
Les mots-clefs ou mots réservé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.
Généralités sur le langage c
Elément de base d’un programme C

Les constantes :

 Les 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
Il est également possible d’utiliser une notation octale ou hexadécimale.
Généralités sur le langage c
Elément de base d’un programme C

Les constantes :

 Les 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
Il est également possible d’utiliser une notation octale ou hexadécimale.
Généralités sur le langage c
Les constantes :
 Les constantes flottantes:
peuvent s’écrire indifféremment suivant l’une des deux notations : décimale ou
exponentielle
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
La notation exponentielle utilise la lettre e (ou E) pour introduire un exposant entier
(puissance de 10), avec ou sans signe. La mantisse peut être n’importe quel nombre
décimal ou entier (le point peut être absent dès que l’on utilise un exposant). Voici
quelques exemples corrects (les exemples d’une même ligne étant équivalents) :
4.25E4 4.25e+4 42.5E3
54.27E-32 542.7E-33 5427e-34
48e13 48.e13 48.0E13
Généralités sur le langage c
Les constantes :
 Les constantes de type caractère :
les caractères imprimables, se notent de façon classique, en écrivant entre apostrophes
(ou quotes) le caractère voulu, comme dans ces exemples : 'a', 'Y', '+', '$',
Certains caractères non imprimables possèdent une représentation conventionnelle
utilisant le caractère « \ », Dans cette catégorie, on trouve également quelques
caractères (\, ’, " et ?) qui, bien que disposant d’un graphisme, jouent un rôle particulier
de délimiteur qui les empêche d’être notés de manière classique entre deux
apostrophes. Voici la liste de ces caractères :

Remarque : Les constantes


chaînes de caractères
doivent être entourées de
guillemets, par exemple
"bonjour"
Généralités sur le langage c
Opérateurs, délimiteurs et séparateurs :

Les opérateurs, délimiteurs et séparateurs de C sont formés à partir des divers caractères
qui ne sont pas utilisés par les identificateurs. La table ci-dessous indique toutes les
séquences utilisées. On y trouve la plupart des opérateurs classiques comme +
(addition) , / (division), etc. (ligne 1), des opérateurs de comparaisons (ligne 4) avec en
particulier != (différent de) et == (égal à).

Certains symboles combinent un


opérateur et une affectation (lignes 2
et 3). D’autres, moins habituels,
seront présentés au fur et à mesure
de l’avancement de cours. Enfin, # et
## sont des opérateurs qui
s’adressent au préprocesseur (le
compilateur)
Généralités sur le langage c
Structure minimale d’un programme C

Un programme simple se compose de plusieurs parties:


 Des directives de précompilation.
 Une ou plusieurs fonctions dont l’une s’appelle obligatoirement main(), celle-ci constitue
le programme principal et comporte 2 parties : la déclaration de toutes les variables et
les instructions.
 Les commentaires: débutent par “ /* ” et finissent par “ */ “
[directives au préprocesseur]
[déclarations de variables externes]
[fonctions secondaires]
int main()
{
<déclarations de variables>
<Instructions à exécuter>
}
Les variables, valeurs, et opérateurs
 Les variables sont les données que manipulera le
programme lors de son exécution.
 Ces variables sont rangées dans la mémoire vive de
l’ordinateur.
 Les variables doivent être déclarées au début du
programme.
Déclaration d’une variable
Pour déclarer une variable, on fait précéder son nom par son type.
Syntaxe:

<Type> <NomVar1>, <NomVar2>, . .., <NomVarN>;

Exemples
Les trois instructions suivantes sont des déclarations des variables :
int a1, a2;
float x ;
double x1, x2;
Les variables, valeurs, et opérateurs
Les types de variables

Un type est un ensemble de valeurs que peut prendre une variable. Il y a des types
prédéfinis et des types qui peuvent être définis par le programmeur.
La table qui suit permet de trouver le domaine des valeurs selon le type, en combinant
l’information sur la taille-mémoire :

Type Taille mémoire Domaine de valeurs

int 2 octets (16 bits) -32 767 à 32 767

short 2 octets (16 bits) -32768 à 32767

long 4 octets (32 bits) -2 147 483 647 à 2 147 483 647

float 4 octets (32 bits) ± 10-37 à ± 1038

double 8 octets (64 bits) ± 10-307 à ± 10308

Long double 10 octets (80 bits) ± 10-4932 à ± 104932


Les variables, valeurs, et opérateurs
Les types de variables
Type Taille mémoire Domaine de valeurs
int 2 octets (16 bits) -32 767 à 32 767
short 2 octets (16 bits) -32768 à 32767
long 4 octets (32 bits) -2 147 483 647 à 2 147 483 647
float 4 octets (32 bits) ± 10-37 à ± 1038
double 8 octets (64 bits) ± 10-307 à ± 10308
Long double 10 octets (80 bits) ± 10-4932 à ± 104932

Remarques :
 Tout les types cités auparavant peuvent être précédé par le qualificatif dits unsigned (non
signés) qui signifie qu’on peut stocker que des nombres positifs.
 Pour les utiliser, il suffit d'écrire le mot unsigned devant le type : Comme vous le voyez,
les unsigned sont des types qui ont le défaut de ne pas pouvoir stocker de nombres
négatifs, mais l'avantage de pouvoir stocker des nombres deux fois plus grands (signed
int peut représenter de -32 767 à 32 767, tandis que unsigned int va de 0 à 65 535).
 Le type char est utilisé pour représenter des caractères soit dans leur forme caractère ou
dans le leur code ASCII
Les variables, valeurs, et opérateurs
Les types de variables

L’opérateur sizeof renvoie le nombre d’octets réservés en mémoire pour chaque type
d’objet.
Syntaxe:
Taille_objet= sizcof(Type);

Exemple:
Exemple: n = sizeof(char);

Résultat n=1
Les variables, valeurs, et opérateurs
Les types de variables

L’opérateur sizeof renvoie le nombre d’octets réservés en mémoire pour chaque type
d’objet.
Syntaxe:
Taille_objet= sizcof(Type);

Exemple:
Exemple: n = sizeof(char);

Résultat n=1
Les variables, valeurs, et opérateurs
Déclaration des constantes

En utilisant l’attribut const, nous pouvons indiquer que la valeur d’une variable ne
change pas au cours d’un programme
 
Syntaxe :
Const type nom-variable ;
 
Exemple :
const int x=200 ;
const double e = 4.715 ;
const char a =’t’ ;
Les variables, valeurs, et opérateurs
Les opérateurs arithmétiques :
+ Addition

Le résultat d’une opération entre types - Soustraction


différents se fait dans le type le plus
* Multiplication
haut. Les types sont classés ainsi : char
< int <long < float <double / Division

% Reste de la division

Exemple:
int p1, p2, p3;
float X;
p1 * p2 + p3 * x
Les variables, valeurs, et opérateurs
Les opérateurs arithmétiques :

priorité
En C comme dans les autres langages, lorsque plusieurs opérateurs apparaissent dans
une même expression, les règles sont naturelles et rejoignent celles de l’algèbre
traditionnelle.

a + b * c a + (b * c)
a * b + c % d (a * b) + (c % d)
- c % d (-c) % d
- a + c % d (- a) + (c % d)
- a / - b + c ((-a)/(-b))+c
- a / - (b + c) (-a)/(-(b+c))
Les variables, valeurs, et opérateurs
Les opérateurs de conversion de type

II est possible de convertir explicitement une valeur en un type quelconque


en forçant la transformation à l’aide de la syntaxe :
(<Type>) <Expression>;
 
Exemple:

int A=3;

int B=4;

float C, D;

C = (float)A/B;

D= (float) (A/B+A);
Les variables, valeurs, et opérateurs

Opérateurs relationnels:
Le résultat de la comparaison est, non pas une valeur ‘booléenne” prenant
l’une des deux valeurs vrai ou faux, mais un entier valant :
 0 si le résultat de la comparaison est faux.
 1 si le résultat de la comparaison est vrai.
Les trois opérateurs logiques classiques se présente comme suit :
&& ET

‫­׀׀‬ OU

` ! NON

Exemple:
(a<b) && (c<d)
(a<b)││(c<d)
!(a<b)
Les variables, valeurs, et opérateurs

Opérateur d’affectation est : =

Quelles seront les valeurs des variables a, b et c après exécution des


exécutions suivants ?
a = 12;
b = 2;
e = a+b;
a = b+c;
a = a+ 1;
Les variables, valeurs, et opérateurs

Opérateur d’Incrémentation

++ incrémente la variable d’une unité.

-- décrémente la variable d’une unité.

Exemple:
i++ → i=i+1
i-- → i=i-1

Remarque:
Ces 2 opérateurs ne s’utilisent pas avec de réels.
Les variables, valeurs, et opérateurs
Opérateur d’incrémentation élargie

X = I++ passe d’abord la valeur de I à X et incrémente après


X = I-- passe d’abord la valeur de I à X et décrémente après
X = ++I incrémente d’abord et passe la valeur incrémentée à X
X = ++I décrémente d’abord et passe la valeur décrémenté à X
Exemple:

j=i++; j=i et ensuite i=i+1

j=++i; i= i+1 ensuite j = i

i+=5; i= i+5

i-=3 ; i=i-3

i*=4 ; i=i*4

i/=2 ; i=i/2

i*=a ; i=i*a
Les entrées-sorties
Fonction de sortie : printf()
L’instruction printf() (de la bibliothèque stdio.h) permet d’afficher
des informations à l’écran

Syntaxe:
printf(”chaîne de caractères”, variables);

La chaîne de caractères peut contenir des caractères spéciaux:


\n pour le retour à la ligne
\t pour les tabulations
%d pour le format d’écriture à l’écran

Exemple:
printf(” liste des variables: \n”);
printf(” variable 1: ”);
Les entrées-sorties

Chaine de formatage
Si des variables suivent la chaîne de caractères, cette dernière doit
spécifier comment présenter ces variables :
Formats Types signification

%c Char Caractère

%s Char Chaîne de caractères

%d Int Entier signé

%u Unsigned int Entier non signé (positif)

%hd Short Entier court

%hu Unsigned short Entier court non signé

%ld Long int Entier long signé

%lu Unsigned long int Entier long non signé

%f Float Réel, notation avec le point décimal (ex:13.15)

%e Float Réel, notation exponentiel (ex : 0.123E+03)

%lf Double Réel en double précision avec le point décimal

%le Double Réel en double précision, notation exponentielle

Le caractère % indique le format d’écriture à l’écran. Dès qu’un format


est rencontré dans la chaîne de caractère entre “ “, le programme affiche
la valeur de l’argument correspondant.
Les entrées-sorties

Exemple:
int i=l;
int j=2;
printf (“la somme de i et j est:\n”);
printf (“i = %d \t j= %d \n”,i,j);
printf (“i +j = %d “,i+j);

Affichage sur l’écran


la somme de i et j est:
i = l j = 2
i+j = 3
Les entrées-sorties

La fonction d’entrée : scanf()


La fonction scanf() (de la bibliothèque stdio.h) permet de lire la
valeur que l’utilisateur rentre au clavier et de la stocker dans la
variable donnée en argument.

Syntaxe
scanf(”chaîne de formatage” ,&variable1, &variable2,…… );

 La chaîne de formatage spécifie le type des données attendues


 Pour éviter tout risque d’erreur, on lit et on écrit une même
variable avec le même format
 Le & est indispensable pour le bon fonctionnement de la fonction.
Il indique l’adresse de la variable.
Les entrées-sorties
Exemples:

char a;
int j;
float r;
scanf(”%c”,&a); /* saisie d’un caractère */
scanf(”%d”,&i); /* saisie d’un nombre entier en décimal */
scanf(”%f”,&r); /* saisie d’un nombre réel */
Les entrées-sorties
Les fonctions getchar() et putchar()
permettent respectivement de lire et d’imprimer des caractères.
Il s’agit de fonctions d’entrées-sorties non formatées.

Syntaxe
caractere = getchar();
putchar(caractere);

Exemple
int C;
C = getchar();

Remarque
a = getchar; scanf(”%c”, &a);
putchar(a); printf(”%c “,a);
 
Exercice d’application

Compiler et exécuter le programme suivant:

#include <stdio.h> /* bibliothèque d’entrées—sorties standard


*/
#include <math.h>
int main()
{
int a, b, som ; /* déclaration de 3 variables */
a = 10 ; /* affectation * /
b = 50 ; /* affectation */
som = a + b ; /* affectation et opérateurs */
printf( ” Voici le résultat : %d”, som); /*affichage le résultat
sur l’écran*/
}

Vous aimerez peut-être aussi