PROGRMMATION EN C
Présenté par
Dr. Mohamed S. Esseissah
Département de Mathématiques-Informatique
Faculté des Sciences et Techniques
Université de Nouackott Al-Aasriya
25 October, 2021
1
Les variables
• Une variable correspond à une portion de mémoire
• Pour pouvoir utiliser une variable en C, il faut, en premier lieu, la déclarer:
Déclaration d’une variable: lui donner un nom et un type
Syntaxe: Les identificateurs servent à désigner
type nom; les différents « objets » manipulés par
En informatique, il s'appelle le programme : variables, fonctions,
un identificateur etc. (règles d'écriture)
Le types d'une variables désigne les caractéristiques du stockage:
- Le domaine des valeurs admissibles
- Le nombre d'octets qui est réservé pour une variable
Exemple:
2
int a, b, c; /* On peut déclarer plusieurs variables d'un même type */
Identificateur
• Le rôle d’un identificateur est de donner un nom à une variable ou à une fonction
du programme.
• Un identificateur est une suite de caractères parmi :
Les lettres (minuscules ou majuscules, mais non accentuées),
Les chiffres,
Le “blanc souligné” ( _ ), aussi appelé sous-tiret.
• Par ailleurs, quelque contrainte doivent être respectées:
Le premier caractère d’un identificateur ne peut pas être un chiffre.
Un identificateur ne peux pas comporter plus de 32 caractères.
Il est déconseillé d'utiliser le symbole "_" comme premier caractère pour un
identificateur, car il est souvent employé pour définir les variables globales
de l'environnement C.
3
Aucun espace ne peut figure dans identificateur.
Identificateur
• Les majuscules et minuscules sont différenciées dans les identificateurs.
• int valeur;
Ils sont deux variables différent.
• int Valeur;
• Voici quelques nom corrects:
A A1 n n_1 nombre_1 racine_carree
taxe_a_la_valeur_ajoutee
• Voici quelques nom incorrects:
1b (il commence par un chiffre)
nombre 1 (il comporte un esapce)
Racine_carrée (il comporte un caractère accentué)
4
nombre-1 (il comporte un sign - qui n'est ni lettre ni un chiffre)
Types de base
• Le C est un langage typé. Cela signifie en particulier que toute variable sont
de types précis.
• En informatique, l'unité de mesure de base est le bit. Chaque bit est un 0 ou
un 1.
• On regroupe 8 bit pour former ce que l'on appelle byte= octet = 8 bit
• Le terme octet est couramment utilisé comme unité de mesure en
informatique.
• Le langage C fournit quatre types de base
• Le type int: 2 ou 4 octets
• Le type float: 4 octets (float: approximation de nombres réels)
• Le type double: 8 octets
• Le type char: 1 octet 5
Les types entiers
• Int désigne un objet de type entier.
• On a trois tailles types d’entiers:
short int (qu’on peut abréger en short )
long int (qu’on peut abréger en int)
long long int (qu’on peut abréger en long long)
Définition Valeur min Valeur max Nombre d'octets
short -32768 32767 2
int -2147483648 2147483647 4
long long −𝟐𝟔𝟑 𝟐𝟔𝟑 -1 8
• Si l'on ajoute le préfixe unsigned (non signé), les domaines sont déplacés ainsi:
Définition Valeur min Valeur max Nombre d'octets
unsigned short 0 65535 2
unsigned int 0 4294967295 4
unsigned long long 0 𝟐𝟔𝟒 8
6
Les types flottants (Nombres réels à virgule flottante)
• Le type flottant permet de représenter, de manière approchée, une partie
des nombres réels.
• Le C prévoit trois types de flottants correspondant à des tailles différentes
float
double
long double
Définition Précision Mantisse* Valeur min Valeur max Nombre
d'octets
float simple 6 3.4 𝟏𝟎−𝟑𝟖 3.4 𝟏𝟎𝟑𝟖 4
double double 15 1.7 𝟏𝟎−𝟑𝟎𝟖 1.7 𝟏𝟎𝟑𝟎𝟖 8
long double avancée 19 3.4 𝟏𝟎−𝟒𝟗𝟑𝟐 3.4 𝟏𝟎𝟒𝟗𝟑𝟐 10
* La mantisse est le nombre de chiffres significatifs après la virgule.
7
Le type caractère
• char désigne un objet de type caractère.
• Un char peut contenir n’importe quel élément des codes ASCII.
• On regroupe 8 bit pour former ce que l'on appelle byte= octet = 8 bit.
signed char [−𝟐𝟕 , 𝟐𝟕 [
unsigned char [0; 𝟐𝟖 [
Codes ASCII des
caractères imprimables
8
Types de base
• Déclaration de variables et initialisation
Déclaration
char ch;
int x, y;
float valeur;
Initialisation: la première valeur qu’on donne à la variable au moment
de la déclaration
char ch = ‘A’;
int x = 0;
float y = 5.3;
Deux variables peuvent être déclarer et initialiser sur la même ligne
int x = 0, y = 5;
9
Exercice
• Ecrivez un programme qui saisit deux entiers et qui affiche
successivement la somme, la différence, le produit de ce deux
entiers.
10
Lecture et écriture en langage C
• L’instruction de l’ écriture permet de passer des données à notre
programme à partir du clavier.
• L’instruction de lecture (affichage) permet à un programme
d'afficher des données sur l'écran.
• La bibliothèque standard <stdio> contient un ensemble de
fonctions permettant la communication de l’ordinateur avec le
clavier et l'écran.
11
Lecture (affichage) des données
La fonction printf
• printf permet de transférer du texte, des valeurs de variables ou des résultats
d’expressions vers l’écran.
• printf est une fonction formatée, elle exige l’utilisation de formats de
sortie.
Syntaxe : printf(<format>, p1, p2, …, pn);
<format> - chaîne de caractères contenant:
- texte
- séquence d’échappement
- spécificateurs de format (% suivi d’un caractère de conversion): permet à la
fonction printf de connaître le type de la variable à inclure (p1, p2, …, pn).
12
L’écriture (affichage) des données
Spécificateurs de format
%d – int %u – unsigned int
%ld – long long %lu – unsigned long
%f – double ou float (notation décimale, 6 chiffres après .)
ex = 1.234500
%c – char %s – char[ ]
13
L’écriture (affichage) des données
Exemple 1:
printf("Bonjour\n");
int res = 124;
double x = 1274.11;
float y = 12.45;
printf("Resultats : %d\n", res);
printf("x = %f\t y = %f\n", x, y);
14
L’écriture (affichage) des données
Exemple 2:
printf("Bonjour\n");
int x=100 , y= 100;
printf("La valeur de y est %d\n", y);
printf("La somme = %d\n", x+y);
float moyenne=12.3333 ;
printf("La moyenne est %.2f\n", moyenne);
char c=‘A’ ;
printf("Le caractère %c a le code %d", c, c);
15
Lecture des données
La fonction scanf
• scanf permet de lire à partir du clavier des données, au moment de l’
exécution.
• scanf est une fonction formatée, elle exige l’utilisation de formats de
l’entrée.
Syntaxe : scanf(<format>, &p1, &p2, …, &pn);
<format> - chaîne de caractères contenant:
- texte : caractère à afficher à tels quels
- spécificateurs de format (% suivi d’un caractère de conversion): permet à la
fonction scanf de connaître le type de la variable.
- L'identificateur de la variable est précédé du symbole & désignant l'adresse
16
de la variable
Lecture des données
La fonction scanf (suite)
• La chaîne de format détermine comment les données reçues
doivent être interprétées.
• Les données reçues correctement sont mémorisées
successivement aux adresses indiquées par &p1, &p2, …, &pn
17
Lecture d’une valeur du type caractère
Exemple 3:
int x;
scanf("%d",&x);
Printf("x = %d", x );
• Si l'utilisateur saisie un nombre entier tout va bien, x devient ce nombre.
• Si l'utilisateur saisie des caractères, sa saisie est ignorée.
18
Lecture des données
Exemple 4:
int x, y;
float z;
scanf("%d%d%f", &x, &y, &z);
printf(“x = %d, y= %d, z=%f“, x,y,z);
19
Lecture d’une valeur du type caractère
Exemple 5:
char ch;
scanf("%c",& ch);
printf("caractère est %c", ch);
20
Expressions et Opérateurs
Quelques définitions
• Un opérateur: Un opérateur correspond à une opération permettant de
calculer un résultat à partir des constants ou des variable.
Par exemple, l'opérateur d'addition permet de calculer la somme de deux
valeurs numériques.
• Un opérande : correspond à une quantité acceptée par un opérateur.
Par exemple, l'opérateur d'addition + accepte deux opérandes, dans
l'exemple 4 + 8, les quantités 4 et 8 correspondent à deux opérandes de
l'opérateur +
• Une expression: correspond à une valeur littérale ou à un calcul de valeur.
Dans une expression, plusieurs opérateurs (et opérandes) peuvent être mis en
relation pour effectuer un calcul complexe.
21
• Par exemple : 1,4 , (2 + 3) * 5.
Les operateurs
L'opérateur de l’affectation =
Syntaxe : nom_de_variable = expression;
En C, l'affectation est un opérateur qui permet d’affecter la valeur d’une
expression à une variable.
Exemple:
n_carre = n * n;
l'exécution de l'affectation se fait en deux étape:
1. La partie qui est à droite de l’opérateur de l’affectation (expression) va
être évalué
2. On stock le résultat de cette évaluation dans la variable qui est à gauche
de l’opérateur de l’affectation.
n_caree n
5 * 5 = 25
25 5
22
L’affectation
Exemple 1: a b
int a = 1; 1 24
int b = 24;
a b
a = b;
24 5
b = 5;
Exemple 2:
a b
int a = 1;
int b = 24; 1 24
a b
b = a;
b= 5; 1 5 23
Les operateurs
• Un opérateur correspond à une opération permettant de calculer un résultat à
partir des constants ou des variable.
• Par exemple, l'opérateur d'addition permet de calculer la somme de deux
valeurs numériques.
Les opérateurs arithmétiques
+ addition
- soustraction
* multiplication
/ division
% reste de la division (modulo)
Faites bien attention:
• Si les deux valeurs sont de type entier, / produira une division entière
• Par contre, il délivrera une valeur flottante dès que l’un des valeurs est
un flottant.
Exemple:
int x= 5, y=2; float z = 5/2; (le résultat z =2) 24
float a=5; int b=2; float c = a/b; (le résultat c =2.5)
Les operateurs
Les opérateurs de comparaison
> strictement supérieur
>= supérieur ou égal
< strictement inférieur
<= inférieur ou égal
== égal
!= inégal
La valeur retournée par ces opérateurs est un entier qui vaut 1 si la
condition est vraie et 0 sinon.
Attention: à ne pas confondre l’opérateur de test d’égalité == avec
l’opérateur = qui donne une valeur à une variable:
Exemple:
int a = 0; int b = 1;
if (a == b)
printf("\n a et b sont egaux \n");
else 25
printf("\n a et b sont differentes \n");
Les opérateurs
Opérateurs d’affectation étendues (élargies)
Langage C propose des combinaisons puissantes d’opérateurs, dans le cas
où la variable à gauche du signe = se retrouve à droite.
Exemple:
1- a = a + 3; il peut s'écrire comme suit
a += 3;
2- b = b - 2; b -= 2;
3- c = c * 5; c *= 5;
4- d = d / 7; d /= 7;
5- f = f % 4; f %= 4;
D’une manière générale,
variable = variable opérateur expression;
peut être réécrit comme
variable opérateur= expression ;
26
Les operateurs
Opérateurs d’incrémentation et de décrémentation
• Opérateur d'incrémentation (++ ) a = a +1;
- peut être utilisé à la place de a +=1;
• Opérateur de décrémentation (--)
- peut être utilisé à la place de a -= 1;
• Pré-incrémentation (++a)
- Lorsque l'opérateur est utilisé avant la variable (++a)
- b = a++; passe d'abord la valeur de a à b, puis incrémente a.
• Post-incrémentation (a++)
- Lorsque l'opérateur est utilisé après la variable (a++)
- b = ++a; incrémente d'abord a puis passe la valeur de a incrémentée à b.
Exemple 1:
a = 5;
b = a++; Résultat: b = 5 et a = 6
Exemple 2:
a = 5; 27
b = ++a; Résultat: b = 6 et a = 6
Les operateurs
Opérateur d’adressage
Il est utilisé pour retourner l'adresse d'une variable.
Syntaxe:
&variable;
Exemple:
int a = 9;
int x = &a;
La variable x contient l’adresse-mémoire de la variable a.
28
Les operateurs
Les opérateurs logiques booléens
Ils sont basées sur les deux valeur booléenne true et false.
Attention: il n’y a pas de type booléen (true et false) en C. Le language C
comprend que 1 correspond à true et 0 correspond à false.
&& et logique && true false
en C
&& 1 0
|| ou logique true true false 1 1 0
false false false
! négation logique 0 0 0
|| true false || 1 0 !true = false !1 = 0
en C en C
true true true 1 1 1
false true false ! false = true !0=1
0 1 0
int x = 1, y=8;
if ((x >= 2) && (y <= 9) )
printf(“Oui”);
else 29
printf(“Non”);
Les operateurs
L'opérateur de conversion de type
() cast (changement de type)
L’opérateur de conversion de type, appelé cast, permet de changer explici-
tement le type d’une variable.
Exemple:
(int) c;
(int)2.35 // donne 2
(float) 2 // donne 2.0
int x = 3, y = 2;
float z = (float)x/y;
printf("%f \n", z); // retourne la valeur 1.5
30
Les operateurs
On peut classer les opérateurs selon le nombre d'opérandes:
En C, nous pouvons distinguer :
les opérateurs unaires : ils acceptent un seul opérande (ex: !1, 3++)
les opérateurs binaires : ils acceptent deux opérandes (ex: 5 * 8)
l'opérateur ternaire : il n'y en a qu'un seul et il accepte trois opérandes
(ex: condition ? trueValue : falseValue )
31
Les operateurs
Règles de priorité des opérateurs
Afin d'évaluer une expression composée de plusieurs opérateurs
Classes de priorités opérateurs
Priorité 1 (la plus élevée) () [ ]
Priorité 2 !, ++, -- , (type)
Priorité 3 *, /, %
Priorité 4 +, -
Priorité 5 <, <=, >, >=
Priorité 6 ==, !=
Priorité 7 &&
Priorité 8 ||
Priorité 9 ?:
Priorité 10 =, +=, - =, *=, /=, %=
Priorité 11 (la plus basse) ,
Dans chaque classe, les opérateurs ont la même priorité.
32
Les operateurs
Règles de priorité des opérateurs …
• Si on a une suite d'opérateurs binaires de la même classe, l'évaluation se
fait en passant de la gauche vers la droite.
• Pour les opérateurs unaires (!, ++, --) et pour les opérateurs d'affectation,
l'évaluation se fait de la droite vers la gauche
Exemple 1:
• S = 10 + 20 - 30 + 15 / 3 *5; évalué comme suit:
15/3 5, 5 * 5 25, 10 + 20 30, 30 – 30 0, 0 +25 25
• Pour a = 2, b = 6;
a *= b += 5;
b += 5 b =11, a *= 11 a = 22
• Pour a = 1 et b = 6
!-- a == !++b
33
!-- a !0 1 , !++b !7 0 , 1 == 0 0
Exercices
• Exercice 1: Ecrire un programme qui affiche la taille de chaque type
d’entier. (short, unsigned short, int, unsigned int, long long, unsigned
long long)
• Exercice 2: Donner les résultats qui s'affichent à l'écran en utilisant le
programme suivant :
int a = 20 , b = 6, c = 11;
int result= 5 * a + 6 *(b / 2 + 4);
printf(" result = %d\n", result );
result= a == (b=20);
printf(" result = %d\n", result );
result *=a +=b -=c;
34
printf(" result = %d\n", result );
Exercices
result = b-- * !a++ + --c;
printf(" result = %d\n", result );
• Exercice 3: Donner les résultats qui s'affichent à l'écran en utilisant le
programme suivant :
int a = 2 , b = 12, c = 7;
a +=a * 2 / 2 > 3;
printf("a = %d\n", a);
b *= ++a || c % 2 != 2;
printf(“b = %d\n", b);
int result = !(b < a && a < c || !c!= 0);
printf(" result = %d\n", result ); 35