Vous êtes sur la page 1sur 24

14/03/16

Programmation en langage C
EL Moukhtar ZEMMOURI

ENSAM – Meknès

Version 1.0 – 2015 / 2016

What is C

"C is a general-purpose programming language which


features economy of expression, modern control flow and
data structures, and a rich set of operators. C is not a "very
high level" language, nor a "big" one, and is not specialized
to any particular area of application."

Kernighan & Richie, 1978

E. Zemmouri, ENSAM - Meknès

1
14/03/16

Sommaire
•  Généralités
•  Éléments de base de C
o  Identificateurs
o  Mots clés
o  Commentaires
o  Les types

•  Lecture / écriture
•  Structures de contrôle

E. Zemmouri, ENSAM - Meknès

Un peu d'histoire …
•  Le C a été conçu en 1972 par Dennis Richie et Ken Thompson
o  Deux chercheurs au Bell Labs
o  Objectif : développer un système d'exploitation UNIX

•  En 1978, Brian Kernighan et Dennis Richie publient la


définition classique du C
o  Première édition du livre "The C programming language"

•  En 1983, l'ANSI décida de normaliser le langage


o  1989 la définition de la norme ANSI C (ou C89)
o  Deuxième édition de "The C programming language"

•  L'ISO à repris la même norme en 1990 (ou C90)


E. Zemmouri, ENSAM - Meknès

2
14/03/16

La compilation
•  C est un langage compilé
o  Par opposition au langages interprétés (Python, Matlab, …)
•  è Un programme C écrit dans un fichier source est traduit en
totalité en langage machine avant exécution.
•  Quatre phases :
o  Traitement par le préprocesseur
o  Compilation
o  Assemblage
o  Édition de liens
•  Exemples de compilateurs
o  GCC du projet GNU
o  MinGW (Minimalist GNU for Windows)

E. Zemmouri, ENSAM - Meknès

La compilation

Ficher source Messages d'erreurs


Préprocesseur Compilateur

Code assembleur

Assemblage

Ficher objet

Librairies de fonctions Editeur de Messages d'erreurs


liens

Fichier exécutable

E. Zemmouri, ENSAM - Meknès

3
14/03/16

Éléments de base du langage

Premier programme

•  À éditer à l'aide d'un éditeur de texte


o  Fichier source hello.c

•  Compiler
o  gcc hello.c

•  Puis exécuter J

E. Zemmouri, ENSAM - Meknès

4
14/03/16

Composants élémentaires du C
•  Six catégories de composants élémentaires :
o  Les identificateurs
o  Les mots clés
o  Les opérateurs
o  Les constantes
o  Les chaines de caractères
o  Les signes de ponctuation

•  Les commentaires sont enlevés par le préprocesseur

E. Zemmouri, ENSAM - Meknès

Identificateurs

•  Servent pour identifier (donner des noms) aux entités du


programme :
o  variables, fonctions, types, …

•  Suite de caractères parmi :


o  les lettres (minuscules ou majuscules, non accentuées),

o  les chiffres,

o  le “blanc souligné _

•  Commence par une lettre (ou _ )


•  Ne doit pas être un des mots clés du langage.

E. Zemmouri, ENSAM - Meknès

5
14/03/16

Mots clés

•  32 mots clefs de la l'ANSI C

•  int float double char void short long signed

unsigned struct enum union

•  const volatile static auto register extern typedef

•  if else for while do switch case default break

continue goto

•  return sizeof

E. Zemmouri, ENSAM - Meknès

Les commentaires
•  Les commentaires permettent de documenter un programme.
o  Améliorer la lisibilité du programme

•  Un commentaire en C commence par /* et se termine par */


o  Exemple /* ceci est un commentaire */

•  // permet un commentaire sur une seule ligne


•  N.B. Les commentaires ne peuvent pas être imbriqués

E. Zemmouri, ENSAM - Meknès

6
14/03/16

Les types de base


•  Le C est un langage typé :
o  è Toute variable, constante ou fonction est d’un type précis

•  Le type définit la représentation mémoire d'un objet


•  Les types de base en C concernent
o  les entiers
o  les flottants (nombres réels)
o  les caractères

E. Zemmouri, ENSAM - Meknès

Les types entiers


•  Le type entier représente l'ensemble des entiers relatifs (positifs et négatifs)
•  Plusieurs sous types :

Type Taille Valeurs Intervalle


char 8 bits caractères [–128 , 127]
short 16 bits Entiers courts [–32768 , 32767]
int 32 bits Entiers [–231 , 231 – 1]
long 64 bits Entiers long [–263 , 263 – 1]
unsigned char 8 bits caractères [0 , 255]
unsigned short 16 bits Entiers courts non signés [0 , 65536]
unsigned int 32 bits Entiers non signés [0 , 232 – 1]
unsigned long 64 bits Entiers long non signés [0 , 264 – 1]

N.B. La taille mémoire des types en C dépend de la machine !


E. Zemmouri, ENSAM - Meknès

7
14/03/16

Les types entiers


•  Exercice :
o  Ecrire un programme qui donne d'intervalle des nombres représentés par
les types : char, short, int, et long, signed et unsigned.

E. Zemmouri, ENSAM - Meknès

Les types flottants


•  3 types correspondant à différentes précisions :

Type Taille Valeurs


float 32 bits Flottants simple précision
double 64 bits Flottants double précision
long double 128 bits Flottants précision étendue

•  Erreur de troncature :
o  Quelle que soit la machine utilisée, on est assuré que cette erreur (relative)
ne dépassera pas 10-6 pour le type float et 10-10 pour le type long double.

N.B. La taille mémoire des types en C dépend de la machine !


E. Zemmouri, ENSAM - Meknès

8
14/03/16

Les types flottants


•  Exercice :
o  Ecrire un programme qui donne le plus grand nombre et le plus petit
nombre proche de zéro (epsilon) qu'on peut représenter avec le type float.

E. Zemmouri, ENSAM - Meknès

Le type des caractères


•  Le type char représente le jeu de caractères de la machine
•  Un char en C est codé sur un octet (8 bits)
•  Un caractère est encodé en utilisant un entier avant sa
représentation binaire en mémoire.
•  Plusieurs encodages sont utilisés:
o  ASCII (American Standard Code for Information Interchange)
•  Vesrion originale (1960) représente 128 caractères avec les nombres de 0 à 127
sur 7 bits.

•  Version étendue (1980) représente 256 sur 8bits

o  Unicode (1990) représente 65 536 sur 16 bits

E. Zemmouri, ENSAM - Meknès

9
14/03/16

Standard Code for Information Interchange.) In the 1960s, the original ASCII set
Delannoy Livre.book Page 22 Mercredi, 6. mai 2009 4:26 16each keyboard character and several control characters using the inte-
encoded
gers from 0 through 127. An example of a control character is Control+D, which
is the command to terminate a shell window. As new function keys and some
international characters were added to keyboards, the ASCII set doubled in size
Le type des caractères
to 256 distinct values in the mid-1980s. Then, when characters and symbols were
added from languages other than English, the Unicode set was created to support
Programmer en langage C 65,536 values in the early 1990s.
•  L'ensemble des caractère
Table 2.5 shows ASCII (Version
the mapping of characteroriginale)
values to the first 128 ASCII
codes. The digits in the left column represent the leftmost digits of an
o  ASCII
Comment lire : code,
R surandligne
the digits in the top row
8 colonne 2 are
esttheencodé
rightmostpar
digits.
82.Thus,
Par ailleurs, la notion
the ASCIIde caractère
code en C'R'
of the character dépasse
at row 8, celle
columnde
2 iscaractère
82. imprimable, c’est-à-dire
auquel est obligatoirement associé un graphisme (et qu’on peut donc imprimer ou afficher sur
un écran). C’est ainsi0 qu’il1 existe 2 certains
3 4 5
caractères de6changement
7 8 de 9ligne, de tabulation,

d’activation d’une0 alarme


NUL SOH sonore STX (cloche),...
ETX EOT NousENQ avons
ACKd’ailleurs
BEL BS déjà
HT utilisé le premier
(sous la forme \n1). LF VT FF CR SO SI DLE DCI DC2 DC3
2 DC4 NAK SYN ETB CAN EM SUB ESC FS GS
3
D e tels caractères sont souvent nommés « caractères de contrôle ». Dans` le code ASCII (res-
RS US SP ! “ # $ % &
4 ( ) * + , - . / 0 1
treint ou non), ils ont des codes compris entre 0 et 31.
5 2 3 4 5 6 7 8 9 : ;
6 < = > ? @ A B C D E
7 F G H I J K L M N O
4.2 Notation des 8constantes
P Q caractères
R S T U V W X Y
9 Z [ \ ] ^ _ ‘ a b c
Les constantes de10type
d
« caractère
e f
», lorsqu’elles
g h
correspondent
i j k
à des
l
caractères
m
imprimables,
se notent de façon
11 n
classique,
o
enp écrivant
q
entre
r
apostrophes
s t
(ou
u
quotes)
v w
le caractère voulu,
comme dans ces 12exemples
x y: z { | } ~ DEL
E. Zemmouri, [TABLE 2.5] The original
'a'
ENSAM - Meknès 'Y' ASCII character set'+' '$'

Certains caractères non imprimables possèdent une représentation conventionnelle utilisant


le caractère « \ », nommé « antislash » (en anglais, il se nomme « back-slash », en français,
on le nomme aussi « barre inverse » ou « contre-slash »). 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. Le type des caractères
[ 56 ] CHAPTER 2 Software Development, Data Types, and Expressions
Voici la liste de ces caractères.
Copyright 2011 Cengage Learning. All Rights Reserved. May not be copied, scanned, or duplicated, in whole or in part. Due to electronic rights, some third party content may be suppressed from the eBook and/or eChapter(s).

•  Les caractères nonCaractères


imprimables :
Editorial review has deemed that any suppressed content does not materially affect the overall learning experience. Cengage Learning reserves the right to remove additional content at any time if subsequent rights restrictions require it.

disposant d’une notation spéciale

NOTATION CODE ASCII ABRÉVIATION SIGNIFICATION


EN C (hexadécimal) USUELLE
\a 07 BEL cloche ou bip (alert ou audible bell)
\b 08 BS Retour arrière (Backspace)
\f 0C FF Saut de page (Form Feed)
\n 0A LF Saut de ligne (Line Feed)
\r 0D CR Retour chariot (Carriage Return)
\t 09 HT Tabulation horizontale (Horizontal Tab)
\v 0B VT Tabulation verticale (Vertical Tab)
\\ 5C \
\' 2C '
\" 22 "
\? 3F ?

E. Zemmouri, ENSAM - Meknès

22 © Éditions Eyrolles

10
14/03/16

Le type booléen
•  Le type booléen n'est pas prédéfini en C.
•  On utilise le type int
o  0 est faux
o  Toute valeur différente de 0 est vraie, en particulier 1.

E. Zemmouri, ENSAM - Meknès

Les constantes en C
•  Une constante est une valeur qui apparaît littéralement dans le code
source d’un programme
o  Exemples : 123, 'A', "Hello", 1.5, …

•  La manière avec laquelle on écrit une constante détermine implicitement


son type

E. Zemmouri, ENSAM - Meknès

11
14/03/16

Les constantes en C

Catégorie Représentation Notation et exemples

Décimale Habituelle : 123


Hexa Commence par 0x : 0x1F4 è 500
Entiers Octale Commence Par 0 : 0377 è 255
Long Se termine par l ou L : 123L
unsigned Se termine par u ou U : 123U

A virgule Habituelle : 12.5 1. .5


Exponentielle Avec e ou E : 12.4E-5 1e-6 1.5E10
Réels Le type par défaut est double
Pour le type float on ajoute F/f : 1.5F
Pour le type long double on ajoute L/l : 1.5L

Caractère Entre apostrophes : 'A' '\n' '1'


Caractères Chaine Entre guillemets : "Hello world"

E. Zemmouri, ENSAM - Meknès

Définition de constantes symboliques


•  Définition à l'aide de la directive :
o  #define NOM Valeur

•  Demande au préprocesseur de remplacer NOM par Valeur dans


la suite du fichier source.
•  Exemples :
o  #define PI 3.14
o  #define N 100
o  #define MIN 0
o  #define MAX 100
o  #define AVG (MIN + MAX)/2

E. Zemmouri, ENSAM - Meknès

12
14/03/16

Déclaration
•  Déclaration de variables :
o  type identificateur;
o  //déclaration et initialisation
o  type identificateur = valeur;

•  Déclaration de constantes:
•  On utilise le mot clé const
o  const type identificateur = valeur;

•  Exemple:
o  const double pi = 3.14

E. Zemmouri, ENSAM - Meknès

Les opérateurs en C

Catégorie Opérateurs Syntaxe et remarques


Affectation = variable = expression;
•  Ne pas confondre avec ==

arithmétiques + - •  Division entière et réelle : si les deux


* / % opérandes sont entières, / produira une
division entière (quotient de la division).
Exemple :
float x;
x = 3/2; è x = 1.0
x = 3.0/2; è x = 1.5
•  Pas d'opérateur de puissance en C. on
utilise la fonction pow(x,y) de math.h
Comparaison < <= > >= expression1 op expression2
== != •  Le résultat est de type int (pas de type
booléen en C): 1 si vrai, et 0 sinon.

E. Zemmouri, ENSAM - Meknès

13
14/03/16

Les opérateurs en C

Catégorie Opérateurs Syntaxe et remarques


Logiques && (le ET) •  Le résultat est de type int: 1 si vrai, et 0
booléens || (le OU) sinon.
•  L’évaluation d'une expression se fait de
! (le NON)
gauche à droite et s’arrête dès que le
résultat final est déterminé.
Exemple:
int i,j, n;
if (i!=j && i<n && j<n)
i<n ne sera évaluée que si i!=j est vraie
j<n ne sera évaluée que si i!=j et i<n vraies

E. Zemmouri, ENSAM - Meknès

Les opérateurs en C

Catégorie Opérateurs Syntaxe et remarques


Logiques & Exemple et signification:
bit à bit | unsigned char a = 103, b = 41; //sur 8 bits
^
expr binaire déc signification
(bitwise ~ ------ --------- ----- ------------------
operators) << a 0110 0111 103 valeur de a
>> b 0010 1001 41 valeur de b
a & b 0010 0001 33 et bit à bit
a | b 0110 1111 111 ou bit à bit
a ^ b 0100 1110 78 ou exclusif
~a 1001 1000 152 complément à 1
a >>2 0001 1001 25 décalage à droite
a <<3 0011 1000 56 décalage à gauche

E. Zemmouri, ENSAM - Meknès

14
14/03/16

Les opérateurs en C

Catégorie Opérateurs Syntaxe et remarques


Incrémentation ++ •  ++ ajoute 1 à son opérande
Décrémentation -- •  -- soustrait 1 à son opérande
•  S'utilisent en suffixe (var++ et var--) et
en préfixe (++var et --var).
Exemple:
int x, n;
n = 5;
•  x = n++; incrémentation après affectation
è x = 5 puis n = 6
•  x = ++n; incrémentation avant affectation
è n = 6 puis x = 6

Affectation += -= variable op= expression;


composée *= /= %= Équivalent à:
variable = variable op expression;

E. Zemmouri, ENSAM - Meknès

Les opérateurs en C

Catégorie Opérateurs Syntaxe et remarques


Opérateur ? : Condition ? Expression1 : Expression2
conditionnel •  Le résultat est Expression1 si la condition
est vraie et Expression2 sinon.
ternaire
•  C'est l'équivalent d'un if – else.
Exemple :
int a, b, max, min;
min = (a<=b) ? a : b;
max = (a>=b) ? a : b;

float x;
x = (x>=0) ? x : (-x);

E. Zemmouri, ENSAM - Meknès

15
14/03/16

Les opérateurs en C

Catégorie Opérateurs Syntaxe et remarques


Opérateur de (type) (type)expression
conversion •  Permet de modifier explicitement le type
d'un objet.
explicite de
Exemple :
type (cast) int a = 3, b = 2;
float x;
x = a/b; è x = 1.0
x = (float)a/b; è x = 1.5;

Opérateur & &variable


d'adresse •  Appliqué à une variable retourne l’adresse
mémoire de cette variable.

Opérateur de sizeof sizeof(expression)


taille •  expression est un type, une variable, …
•  Le résultat est le nombre d’octets
nécessaires pour stocker l'expression.

E. Zemmouri, ENSAM - Meknès

Les opérateurs en C
•  Ordre de priorité des opérateurs
o  En cas de doute, on utilise les parenthèses

E. Zemmouri, ENSAM - Meknès

16
14/03/16

Les entrées sorties standards

Fonctions d'E/S
•  Il s’agit des fonctions de la librairie standard stdio.h utilisées
avec les unités classiques d’entrées / sorties:
o  le clavier et l’écran.

•  Pour les utiliser :


o  #include <stdio.h>

E. Zemmouri, ENSAM - Meknès

17
14/03/16

Fonction d'affichage

•  La fonction printf
o  C'est une fonction d’impression formatée
o  è les données sont converties selon le format choisi avant impression.

•  Syntaxe:
o  printf ("chaine de caractères", expression1, …, expressionN);
o  La chaîne de caractères contient le texte à afficher et les spécifications de
format correspondant à chaque expression.

E. Zemmouri, ENSAM - Meknès

Fonction d'affichage
•  30
Spécificateurs de format pour printfChapitre 1. Les bases de la programmation en C

format conversion en écriture


%d int décimale signée
%ld long int décimale signée
%u unsigned int décimale non signée
%lu unsigned long int décimale non signée
%o unsigned int octale non signée
%lo unsigned long int octale non signée
%x unsigned int hexadécimale non signée
%lx unsigned long int hexadécimale non signée
%f double décimale virgule fixe
%lf long double décimale virgule fixe
%e double décimale notation exponentielle
%le long double décimale notation exponentielle
%g double décimale, représentation la plus courte parmi %f et %e
%lg long double décimale, représentation la plus courte parmi %lf et %le
%c unsigned char caractère
%s char* chaı̂ne de caractères

E. Zemmouri, ENSAM - Meknès Tab. 1.5 – Formats d’impression pour la fonction printf

Exemple :
#include <stdio.h>
main()
{
int i = 23674;
int j = -23674; 18
14/03/16

Fonction de lecture
•  La fonction scanf
o  permet de saisir des données au clavier les convertir selon les formats
spécifiés puis les stocker en mémoire.

•  Syntaxe
o  scanf ("formats", adresse1, adresse2, … , adresseN);

E. Zemmouri, ENSAM - Meknès

Fonction de lecture
32 Chapitre 1. Les bases de la programmation en C

format type d’objet pointé représentation de la donnée saisie


•  Format pour scanf
%d int décimale signée
%hd short int décimale signée
%ld long int décimale signée
%u unsigned int décimale non signée
%hu unsigned short int décimale non signée
%lu unsigned long int décimale non signée
%o int octale
%ho short int octale
%lo long int octale
%x int hexadécimale
%hx short int hexadécimale
%lx long int hexadécimale
%f float flottante virgule fixe
%lf double flottante virgule fixe
%Lf long double flottante virgule fixe
%e float flottante notation exponentielle
%le double flottante notation exponentielle
%Le long double flottante notation exponentielle
%g float flottante virgule fixe ou notation exponentielle
%lg double flottante virgule fixe ou notation exponentielle
%Lg long double flottante virgule fixe ou notation exponentielle
%c char caractère
%s char* chaı̂ne de caractères
E. Zemmouri, ENSAM - Meknès
Tab. 1.6 – Formats de saisie pour la fonction scanf

1.11.3 Impression et lecture de caractères


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.
La fonction getchar retourne un int correspondant au caractère lu. Pour mettre le ca-
ractère lu dans une variable caractere, on écrit 19
caractere = getchar();
14/03/16

Les structures de contrôle

Bloc d'instructions
•  Pour délimiter un bloc d'instructions on utilise les { }
o  Deux instructions ou plus.

•  Les blocs peuvent être imbriqués:


Ligne d'entête {
Instruction
Ligne d'entête { Instruction
Instruction 1 Ligne d'entête {
Instruction 2 Instruction
... Instruction
Instruction N }
} Instruction
Instruction
}

E. Zemmouri, ENSAM - Meknès

20
14/03/16

La sélection
•  Utilisée pour l'exécution conditionnelle
•  Sélection simple : if (expression) {
Bloc d'instructions 1
if (expression){ }
Bloc d'instructions else{
} Bloc d'instructions 2
}

False
expr
True expr
False True

Instructions
Instructions 2 Instructions 1

E. Zemmouri, ENSAM - Meknès

La sélection
•  Sélection multiple switch True
False
= cste1

switch (expression){
False True
case constante1 : { = cste2 Instructions 1
instructions 1
break; }
case constante2 : { . Instructions 2
instructions 2 .
.
break; }
...
case constanteN : { False True
= csteN
instructions N
break; }
default : { Instructions Instructions N
instructions
break; }
}

E. Zemmouri, ENSAM - Meknès

21
14/03/16

La répétition
•  La boucle for
o  Permet de répéter un bloc d'instructions un nombre prédéfini de fois

for (expr1; expr2; expr3){ expr1


Instruction 1
... False
Instruction N expr2
} True

Instructions 1
...
Instruction N

expr3
E. Zemmouri, ENSAM - Meknès

La répétition
•  La boucle while
o  Tant que une condition est vraie, on répète l'exécution des instructions
o  On teste, puis on exécute.

False
expr
while (expression){
True
Instruction 1
...
Instructions 1
Instruction N
...
}
Instruction N

E. Zemmouri, ENSAM - Meknès

22
14/03/16

La répétition
•  La boucle do - while
o  Répéter un bloc d'instructions tant que une condition est vraie
o  On exécute, puis on teste.

Instructions 1
do { ...
Instruction 1 Instruction N
...
Instruction N
}while (expression);
True
expr

False

E. Zemmouri, ENSAM - Meknès

break et continue
•  Utilisées dans une boucle for ou while ou do - while
o  break : permet de sortir de la boucle (ou de switch aussi)

o  continue : permet de passer à l'itération suivante de la boucle

E. Zemmouri, ENSAM - Meknès

23
14/03/16

break et continue

E. Zemmouri, ENSAM - Meknès

24