Académique Documents
Professionnel Documents
Culture Documents
Langage C
Chapitre 2:
2: Types, Opérateurs
et expressions.
Ensa de Tanger 1
ENSA de Tanger
Chapitre 2:
2: Types, Opérateurs
et expressions.
Ensa de Tanger 2
La mémoire centrale
La mémoire centrale est un ensemble de
positions binaires nommées bits qui sont
regroupés en octets (8 bits), et chaque octet
est repéré par ce qu’on nomme son adresse.
Ensa de Tanger 3
Notion de variable
Variable: consiste à réserver un emplacement mémoire
destiné à recevoir une donnée en lui donnant un nom.
syntaxe:
4
Les types de variables de base
Ce sont les types prédéfinis du compilateur, ils se répartissent
en trois grandes catégories en fonction de la nature des
informations qu’ils permettent de représenter :
5
Les types de variables de base
Le type entier
Le tableau suivant résume les caractéristiques des types
numériques entiers de C (sur 16 bits):
8
Les types de variables de base
Le type réel
float: ce type sert pour les calculs avec des parties décimales.
9
Les types de variables de base
La précision pour les différents types réel
float: simple précision (32 bits) 1 bit de signe, 8 bits d'exposant, 23 bits de
mantisse
double: double précision (64 bits) 1 bit de signe, 11 bits d'exposant , 52 bits de
mantisse.
long double: double précision étendue (80 bits) 1 bit de signe, 15 bits
d'exposant, 64 bits de mantisse
L’erreur (relative) ne dépassera pas (10-6 pour le type float) et (10-10 pour le
long double)
Ensa de Tanger 10
Les types de variables de base
Le type réel
Le tableau suivant résume les caractéristiques des types
numériques réel de C :
long
suppl. 64 bits 3.4 * 10-4932 1.1 * 104932 10
double
11
Les types de variables de base
Notation des constantes flottantes
Peuvent s’écrire indifféremment suivant l’une des deux
notations :
Décimale
Exponentielle
La notation décimale comporte obligatoirement un point
(virgule
virgule)
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
puissance de 10)10
4.25E4 4.25e+4 42.5E3
Ensa de Tanger 12
Les types de variables de base
Le type caractère: char
C permet de manipuler des caractères codés en mémoire sur
un octet
Exemple de caractères imprimables, en écrivant entre
apostrophes (ou quottes) le caractère voulu : 'a' 'Y'
'+' '$‘
Caractères non imprimables possèdent une représentation
conventionnelle utilisant le caractère « \ », nommé
«antislash
antislash » \n \a ……
Ensa de Tanger 13
Les types de variables de base
Le type caractère: char
Toute variable de type char peut contenir un (seul) caractère.
Une valeur de type caractère peut être considérée de deux façons:
comme le caractère concerné: a, A, Z, ?, fin de ligne (\n) ...
comme le code de ce caractère, c'est-à-dire un motif de 8 bits; or
à ce dernier on peut toujours faire correspondre un nombre
entier (le nombre qui, codé en binaire, fournit le motif en
question);
par exemple: dans le code ASCII, le caractère A est représenté
par le motif binaire 01000001, auquel on peut faire correspondre
le nombre 65. Ce nombre peut être intégré dans toute sorte
d'opérations algébriques ou logiques ...
14
Les types de variables de base
Le type booléen
Il n’existe pas de booléen dans C
15
Les types de variables de base
Les Codes de Format pour l’affichage des types
int %d
long %ld
float/double %f / %lf
char %c
string (char*) %s
Ensa de Tanger 16
Les types de variables de base
Exercice: Traduisez les déclarations suivantes en C, sachant
Exercice:
que vous travaillerez dans les ensembles de nombres indiqués.
Choisissez les types les plus économiques, sans perdre en
précision.
(1) int COMPTEUR; COMPTEUR
entier {0 ,..., 300} {0 ,..., 300}
(2) char
entierX,Y; X,Y {-120 ,..., 100} {-120 ,..., 100}
(3) int MESURE;
entier {-10 ,..., 104}
MESURE {-10 ,..., 104}
(4) réel SURFACE1; SURFACE1
float 150075}} : {0.5
{0.5 ,..., 150075 6 positions significatives
,..., 150075}
(5) double
réel SURFACE22SURFACE2
SURFACE ; {-12 ,..., 1500750.5}:
1500750.5}{:-812positions significatives
,..., 1500750.5}
(6) int N1;
entier N1 {0 ,..., 210} = {0 ,..., 1024}
{0 ,..., 210}
(7) int N2 ;
entier N2 {-47 ,..., 47} = {-
{-16384 7 ,...,
{-4,..., 47}
16384}
(8) entierN3;
long N3 {0 ,..., 326} = {0 ,..., 1{0073 326}824}
,..., 741
(9) double
entier N4; N4 {-1280 ,..., 1285} = {- ,..., 03.4*10
{-{1-128 10}5}
,..., 128
boolé
bool
10)) int
(10 éen
TROUVE; TROUVE
par convention {vrai
vrai,, faux
faux}} 17
initialisation des variables
Il est préférable d’initialiser une variable lors de sa définition
en lui attribuant une valeur à sa déclaration.
exemple:
int i =3;
double PI = 3.14 ;
int k = 1, j = 2 ;
int n ;
int p ;
p = n+5;
Le contenu de n n’étant pas défini, la valeur de p après
ces instructions n’est pas prévisible
Les constantes
Il est possible de déclarer que la valeur d’une variable ne
#include
doit pas changer lors <stdio.h>
de l’exécution du programme..
exemple: main()
{const int i=3;
const int n = 3 ;
i= i+4;
printf ("%d",
les instructions modifiant i); de n seront rejetées par le
la valeur
compilateur. getch();
}
19
Les définitions de types (typedef
(typedef))
Il est possible en C de définir ses propres types de données qui
viendront s’ajouter aux types prédéfinis.
Syntaxe :
20
Les définitions de types (typedef
(typedef))
Exemple
Exemple1
1:
<type_à_renommer>
typedef int naturel ;
<nouveau_nom>
/* alors : */
int t ; naturel t ;
Exemple 2 :
typedef float reel ;
/* alors : */
float x ; reel x ;
21
ENSA de Tanger
Ensa de Tanger 22
L’originalité des notions d’opérateur et d’expression en C
Ensa de Tanger 23
L’originalité des notions d’opérateur et d’expression en C
- soustraction
* multiplication
25
Les opérateurs arithmétiques
Présentation des opérateurs
Exemple
int a, b ;
float Y;
Y= a+b;
Y= a-b;
Y= -a*b;
Y= a/b;
Y= a%b; // exemple :13%2 = 1
26
Les opérateurs arithmétiques
Les priorités relatives des opérateurs
27
Les opérateurs arithmétiques
Les priorités relatives des opérateurs
Remarque :
En cas de priorités identiques, les calculs s’effectuent
de gauche à droite.
28
Les opérateurs arithmétiques
Les priorités relatives des opérateurs
Exemple
Appliquer les règles de priorité en
utilisant des parenthèses.
a+b*c
a*b+c%d
-c%d
-a+c%d
-a/-b+c
-a/-(b+c)
29
Les opérateurs arithmétiques
Les priorités relatives des opérateurs
30
Les opérateurs arithmétiques
Les priorités relatives des opérateurs
31
Les opérateurs arithmétiques
Les conversions implicites
les opérateurs arithmétiques ne sont définis que lorsque leurs
Deux opérandes sont de même type..
Exemple
float x;
int n, p ;
n * x + p;
32
Les opérateurs arithmétiques
Les conversions implicites Exemple
float x;
int n, p ;
n * x + p;
il faut commencer par effectuer le produit n*x.
la conversion de la valeur de n dans le type float
la multiplication portera sur deux opérandes de type float et
elle fournira un résultat de type float.
Pour l’addition: (float et int), Le même mécanisme sera mis
en place, et le résultat final sera de type float.
33
Les opérateurs arithmétiques
Les conversions d’ajustement de type
Une conversion telle que int -> float se nomme une
« conversion d’ajustement de type».
34
Les opérateurs arithmétiques
Les conversions d’ajustement de type
si n est de type int, p de type long et x de type float, l’expression
n * p + x sera évaluée suivant ce schéma :
35
Les opérateurs arithmétiques
Les promotions numériques
les opérateurs numériques ne sont pas définis pour les types
char et short.
36
Les opérateurs arithmétiques
Les promotions numériques
Exemple
Donner le schéma de la conversion pour
l’expression suivante:
p1 * p2 + p3 * x
37
Les opérateurs arithmétiques
Les promotions numériques
Exemple
le schéma de la conversion de :
p1 * p2 + p3 * x
38
Les opérateurs arithmétiques
Le cas du type char
une valeur de type caractère peut être considérée comme :
39
Les opérateurs arithmétiques
Le cas du type char
Exemple
c1, c2 sont de type char
40
Les opérateurs arithmétiques
Le cas du type char
Exemple
Donner le résultat du code suivant
41
Les opérateurs arithmétiques
Le cas du type char
Exemple
le résultat du code :
65
B
G
42
Les opérateurs Relationnels
Présentation des opérateurs :
C permet de comparer des expressions à l’aide d’opérateurs
classiques de comparaison:
2*a>b+5
43
Les opérateurs Relationnels
Présentation des opérateurs
opérateurs binaires
> supérieur à
< inférieur à
== égal à
!= différent de
44
Les opérateurs Relationnels
Les priorités relatives des opérateurs
Les opérateurs (<, <=, >, >=) ont la priorité la plus élevée
(même niveau).
Ensuite dans le même niveau, les opérateurs (== et !=).
les opérateurs relationnels sont moins prioritaires
que les opérateurs arithmétiques.
Exemple
46
Les opérateurs Relationnels
Le cas du type char
Exemple
le résultat du code suivant est : 1*(a%b)
47
Les opérateurs Logiques
Présentation des opérateurs :
48
Les opérateurs Logiques
Présentation des opérateurs :
● (a<b) || (c<d)
prend la valeur 1 (vrai) si l’une au moins des deux conditions a<b
et c<d est vraie (de valeur 1), et prend la valeur 0 (faux) dans le
cas contraire.
● ! (a<b)
prend la valeur 1 (vrai) si la condition a<b est fausse (de valeur 0)
et prend la valeur 0 (faux) dans le cas contraire.
Cette expression est équivalente à : a>=b.
Remarque:
Ces opérateurs produisent un résultat numérique (de type int)
(0 ou 1).
49
Les opérateurs Logiques
Présentation des opérateurs
50
Les opérateurs Logiques
Présentation des opérateurs :
les opérandes des opérateurs logiques peuvent être n’importe
quel opérande numérique à condition de considérer que:
● 0 correspond à faux,
51
Les opérateurs Logiques
Les priorités relatives des opérateurs
L’opérateur ! a une priorité supérieure à celle de tous
les opérateurs arithmétiques binaires et aux opérateurs relationnels
52
Les opérateurs Logiques
Les priorités relatives des opérateurs
if (!n) équivaut à if ( n == 0 )
! ( a == b ) est différent de ! a == b
53
Les opérateurs Logiques
Exemple
Donner le résultat du code suivant
54
L’opérateur d’affectation
Présentation des opérateurs :
a = 3; est une expression qui :
● réalise une action : l’affectation de la valeur 3 à a,
Remarque
la priorité de l'opérateur = est inférieure à celle de tous
les opérateurs arithmétiques , logiques et de comparaison.
L’expression suivante est incorrecte : a + 4 = b;
55
L’opérateur d’affectation
Exemple
Donner le résultat du code suivant
56
L’opérateur d’affectation
Exemple
le résultat du code est :25
57
L’opérateur d’affectation
Présentation des opérateurs :
L’opérateur d’affectation possède une associativité
de droite à gauche
58
Les opérateurs d’incrémentation
Les opérateurs d’incrémentation et de décrémentation
En programmation, on utilise souvent des expressions
d’incrémentation et de décrémentation qui augmentent ou
diminuent de 1 la valeur d'une variable.
ex: i = i + 1, n=n–1
59
Les opérateurs d’incrémentation
Les opérateurs d’incrémentation et de décrémentation
i=3;
i ++ ; i=?
i=4:
i -- ;
j=i-3; j=?
j=0;
60
Les opérateurs d’incrémentation
La postincrémentation et la préincrémentation
* Postincrémentation (postdécrémentation):
j = i++ ; j = i-- ;
affecte d’abord la valeur de i à j, et ensuite incrémente i
* Préincrémentation (prédécrémentation):
j = ++i ; j = --i ;
la variable est incrémentée ou décrémentée avant l’affectation.
i=2;
j = (i++) + 3 ;
j contient 5 et i contient 3
i=2;
j = (++i) + 3 ;
i contient 3 et j contient 6
61
Les opérateurs d’affectation élargie
syntaxe générale:
exemples:
a+=b ajouter b à a et mettre le tout dans a
a-=b diminuer b de a et mettre résultat dans a
a*=b multiplier a par b et mettre résultat dans a
a/=b diviser a par b et mettre résultat dans a
a%= b mettre dans a le résultat de a%b
i=i+1 i+=1
a=a-b a-=b
62
Les opérateurs d’affectation élargie
Exemples :
Soient les valeurs: a=20
a=20;; b=
b=55; c=
c=--10
10;; d=
d=22; x=
x=12
12;; y=
y=15
15;;
Quels résultats donnent les instructions suivantes:
1) a += (x+
x+55) ;
a=a+(x+55)
a=a+(x+ a=20
a= 20+(
+(12
12++5)=
)=37
37
2) a != ( c *=(-
*=(-d) )
a=37
a= 37 et c=c*(-
c=c*(-d)=
d)=--10
10**-2=20 a != (c *= (-
(-d)) 1 (vrai)
3) a *= c+(x
c+(x--d) ;
a=a*(c+(x--d))
a=a*(c+(x a=37
a= 37*(
*(20
20+(
+(12
12--2))=
))=37
37*(
*(30
30)=
)=1110
1110
4) a %= d++ ;
a=a%d
a=a%d puis d=d+1
d=d+1 a=00 , d=3
a= d=3
5) a %= ++
++dd;
d=d+1
d=d+ 1 puis a=a%d
a=a%d d=44 , a=0
d= a=0
63
Les conversions forcées par une affectation
Ensa de Tanger 64
L’opérateur conditionnel (?)
if ( a>b )
max = a>b ? a : b est équivalente à:: max = a ;
else
max = b ;
D’une manière générale, l’opérateur évalue la première
expression qui joue le rôle d’une condition. Si sa valeur est
différente de zéro
zéro,, il y a évaluation du second opérande,
opérande ce qui
fournit le résultat ; si sa valeur est nulle,
nulle en revanche, il y a
évaluation du troisième opérande,
opérande ce qui fournit le résultat
3*a+
*a+11 > 0 ? 3*a+
*a+11 : -3*a
*a--1
z = (x=y) ? a : b
z = x = y ? a : b est équivalente à: z = x = ( y ? a : b )
z = ( a>b ? a : b ) ;
a>b ? i++ : i--
i-- ; évaluation sans utiliser la valeur de i
Ensa de Tanger 65
L’opérateur séquentiel (,)
L ’opérateur dit « séquentiel » permet d’exprimer plusieurs calculs
successifs au sein d’une même expression
Exemple : a * b , i + j évalue d’abord a*b
a*b,, puis i+j et qui prend comme
valeur la dernière calculée (i+j)
i++, a + b
i++, j = i + k évaluation de l’expression i++
i++,, évaluation de l’affectation
j=i+k
ces deux formulations sont équivalentes :
i++, j = i+k, j--
j-- ; (avec des virgules)
i++ ; j = i+k ; j--
j-- ; (avec des points virgules)
Dans les boucles
if (i++, k>
k>00) ...... remplace i++ ; if (k>0
(k>0) ......
for (i=1
(i=1, k=
k=00 ; ... ; ... ) ....... remplace i=1
i= 1 ; for (k=0
(k=0 ; ... ; ... ) ......
Ensa de Tanger 66
L’opérateur sizeof
int n ;
double z ;
l’expression sizeof
sizeof(n)
(n) vaudra 4
l’expression sizeof
sizeof(z)
(z) vaudra 8
sizeof(char)
sizeof (char) vaudra toujours 1
Cet opérateur offre un intérêt :
lorsque l’on souhaite écrire des programmes portables dans lesquels il
est nécessaire de connaître la taille exacte de certains objets,
objets,
Ensa de Tanger 67
Exercices d’application
Exercice 1
Soit les déclarations suivantes :
int n = 10 , p = 4 ;
long q = 2 ;
float x = 1.75 ;
Donner le type et la valeur de chacune des expressions suivantes :
a) n + q
b) n + x
c) n % p +q
d) n < p
e) n >= p
f) n > q
g) q + 3 * (n > p)
h) q && n
i) (q-2) && (n-10)
j) x * (q==2)
k) x *(q=5)
Ensa de Tanger 68
Exercices d’application
Exercice 2
écrire plus simplement l’instruction suivante :
z = (a>b ? a : b) + (a <= b ? a : b) ;
Exercice 3
n étant de type int, écrire une expression qui prend la valeur :
-1 si n est négatif,
0 si n est nul,
1 si n est positif.
Ensa de Tanger 69
Exercices d’application
Exercice 4
Quels résultats fournit le programme suivant ?
#include <stdio.h>
main()
{
int n=10, p=5, q=10, r ;
r = n == (p = q) ;
printf ("A : n = %d p = %d q = %d r = %d\n", n, p, q, r) ;
n=p=q=5;
n += p += q ;
printf ("B : n = %d p = %d q = %d\n", n, p, q) ;
q = n < p ? n++ : p++ ;
printf ("C : n = %d p = %d q = %d\n", n, p, q) ;
q = n > p ? n++ : p++ ;
printf ("D : n = %d p = %d q = %d\n", n, p, q) ;
}
Ensa de Tanger 70
Atelier
Compilation des programmes avec DEV C++.
Ensa de Tanger 71