Académique Documents
Professionnel Documents
Culture Documents
Mathématiques et
Informatique
ASMAE OUHMIDA
UNIVERSITÉ HASSAN II
ECOLE NORMALE SUPÉRIEURE
D’ENSEIGNEMENT TECHNIQUE
PLAN
GENERALITES
LES ENTRÉES ET LES SORTIES
LES OPÉRATEURS
GENERALITES
scanf( )
Cette valeur sera placée dans une variable (type simple ou dans un composant
d’une variable de type structuré)
Le format précise le type de valeur qui doit être saisi et affecté dans la variable
scanf( )
Le tableau ci-dessous présente les formats associés aux différents types étudiés précédemment.
Type Format
int ou short %d
long %D
float ou double %f
char %c
LES ENTRÉES ET LES SORTIES
scanf( )
C’est le contenu de cette adresse qui sera valorisée par la fonction scanf( )
LES ENTRÉES ET LES SORTIES
printf( )
Il peut prendre de nombreuses valeurs mais on se limitera aux mêmes valeurs que
pour l’instruction scanf()
printf( )
Par exemple : printf( “ le double de %d est %d\n ”, I, I*2)
message
LES ENTRÉES ET LES SORTIES
Exercice : Ecrire le programme C qui calcule et affiche la surface et le périmètre d’un
rectangle dont on saisi la longueur et la largeur. On suppose que ces valeurs sont des entiers
#include <stdio.h>
int main(void)
{
int surface, perimetre, longueur, largeur;
printf ("Saisir la longueur: ");
scanf ("%d",&longueur);
printf ("\n Saisir la largeur : ");
scanf ("%d",&largeur);
perimetre=2*(longueur+largeur);
surface=longueur*largeur;
printf("\n\n le périmétre est %d et la surface est
%d",perimetre,surface) ;
return 0 ;
}
LES OPÉRATEURS
Les opérateurs sont des symboles qui permettent de manipuler des variables, c'est-à-dire
effectuer des opérations, les évaluer,...
On distingue plusieurs types d'opérateurs:
les opérateurs de calcul (arithmétique)
les opérateurs d'assignation (affectation)
les opérateurs d'incrémentation
les opérateurs de comparaison
les opérateurs logiques (booléens)
les opérateurs bit-à-bit
les opérateurs de rotation de bit
LES OPÉRATEURS
printf("%d\n", -3 % 2 ); /* affichage de -1 */
printf("%d\n", 3 % 2 ); /* affichage de 1 */
printf("%d\n", 3 % -2 ); /* affichage de -1 */
LES OPÉRATEURS
Syntaxe : Variable+=Expression;
Elles permettent de simplifier des opérations telles que ajouter une valeur dans
une variable et stocker le résultat dans la variable
Avec les opérateurs d'assignation il est possible d'écrire cette opération sous
la forme suivante : x+=2
Ce type d'opérateur permet de facilement augmenter ou diminuer d'une unité une variable
Un opérateur de type x++ permet de remplacer des notations lourdes telles que x=x+1 ou bien
x+=1
Ces opérateurs sont très utiles pour des structures telles que des boucles, qui ont besoin d'un
compteur
LES OPÉRATEURS
les opérateurs d'incrémentation/décrémentation
#include <stdio.h>
int main(void)
{
int i =2;
int j;
j=i++ ;
printf( " la valeur de j = %d et la valeur de i = %d \n", j,i);
i =2 ;
j=++i ;
printf( " la valeur de j = %d et la valeur de i = %d \n", j,i);
return 0
}
LES OPÉRATEURS
les opérateurs d'incrémentation/décrémentation
#include <stdio.h>
int main(void)
{
int i =2; Je dois faire l’affectation et puis j’incrémentes le i
int j ; la valeur de j = 2 et la valeur de i = 3
j=i++ ;
printf( " la valeur de j = %d et la valeur de i = %d \n", j,i);
i =2 ;
j=++i ;
printf( " la valeur de j = %d et la valeur de i = %d \n", j,i);
return 0 J‘incrémentes le i et puis je dois faire l’affectation
} la valeur de j = 3 et la valeur de i = 3
LES OPÉRATEURS
les opérateurs de comparaison (relationnels)
Le résultat de la comparaison entre 2 expressions vaut :
0 si le résultat de la comparaison est faux
1 si le résultat de la comparaison est vrai
Opérateur signification
== test si égalité
! = test si différent
Exemples :
rep = (c > 5);
rep est égal à 1 si c est supérieur à 5, sinon rep est égal à 0
d = ( a == b )
d est égal à 1 si a est égal à b, sinon d est égal à 0
q = (c != 20);
q est égal à 1 si c est différent de 20 , sinon q est égal à 0
LES OPÉRATEURS
0 0 0 0
0 non nul 0 1
non nul 0 0 1
non nul non nul 1 1
op1 ! op1
0 1
non nul 0
LES OPÉRATEURS
Exemples :
a >= 5 && a <= 10 ;
retourne 1 si a est compris entre 5 et 10 (du fait de la priorité plus forte des opérateurs >= et <=
par rapport à &&)
Cette expression est équivalente à : (a >= 5) && (a <= 10)
a > 5 || b == 0
retourne 1 si a est supérieur à 5 ou si b est égal à 0
l'expression b == 0 ne sera pas évaluée si a est supérieur à 5 (évaluation courte)
Remarques : L ’évaluation des expressions booléennes s'effectue de gauche à droite (sauf pour
l'opérateur !) et elle est stoppée dès que le résultat de l'expression devient définitif (short evaluation)
LES OPÉRATEURS
Ce type d'opérateur traite ses opérandes comme des données binaires, plutôt
que des données décimales, hexadécimales ou octales
Ces opérateurs traitent ces données selon leur représentation binaire mais
retournent des valeurs numériques standards dans leur format d'origine
Les opérateurs suivants effectuent des opérations bit-à-bit, c'est-à-dire avec des
bits de même poids
LES OPÉRATEURS
les opérateurs bit à bit
Opérateur Dénomi- Effet Syntaxe Résultat
nation
& ET Retourne 1 si les deux 9 & 12 8
bit-à-bit bits de même poids sont (1001 & (1000)
à1 1100)
| OU Retourne 1 si l'un ou 9 | 12 13
bit-à-bit l'autre des deux bits de (1001 | (1101)
même poids est à 1 (ou 1100)
les deux)
^ OU Retourne 1 si l'un des 9 ^ 12 5
exclusif deux bits de même poids (1001 ^ (0101)
bit-à-bit est à 1 (mais pas les 1100)
deux)
LES OPÉRATEURS
Ce type d'opérateur traite ses opérandes comme des données binaires d'une longueur de
32 bits, plutôt que des données décimales, hexadécimales ou octales
Ces opérateurs traitent ces données selon leur représentation binaire mais retournent des
valeurs numériques standards dans leur format d'origine
Les opérateurs suivants effectuent des rotations sur les bits: décaler chacun des bits d'un
nombre de bits vers la gauche ou vers la droite
La première opérande désigne la donnée sur laquelle on va faire le décalage, la seconde
désigne le nombre de bits duquel elle va être décalée
LES OPÉRATEURS
les opérateurs de rotation de bit
Opérateur Dénomi- Effet Syntaxe Résultat
nation
<< Rotation à Décale les bits vers la gauche 6 << 1 12
gauche (multiplie par 2 à chaque
(110 << (1100)
décalage). Les zéros qui
sortent à gauche sont perdus, 1)
tandis que des zéros sont
insérés à droite
>> Rotation à Décale les bits vers la droite 6 >> 1 3
droite avec (divise par 2 à chaque
(0110 >> (0011)
conservatio décalage). Les zéros qui
n du signe sortent à droite sont perdus, 1)
tandis que le bit non-nul de
poids plus fort est recopié à
gauche
>>> Rotation à Décale les bits vers la droite 6 >>> 1 3
droite avec (divise par 2 à chaque
(0110 (0011)
remplissage décalage). Les zéros qui
de zéros sortent à droite sont perdus, >>> 1)
tandis que des zéros sont
insérés à gauche
LES OPÉRATEURS
les priorités
Lorsqu'on a plusieurs opérateurs dans une expression, il faut que le compilateur sache dans
quel ordre les traiter
voici donc dans l'ordre décroissant les priorités de tous les opérateurs :
( ) [ ]
-- ++ ! ~ -
* / %
+ -
< <= >= >
== !=
^
|
&& ||
? :
= += -= *= /= %= <<= >>= >>>= &= ^= |=
,
LES OPÉRATEURS
► Dans chaque classe de priorité, les opérateurs ont la même priorité. Si nous avons
une suite d'opérateurs binaires de la même classe, l'évaluation se fait en
passant de la gauche vers la droite dans l'expression.
► Pour les opérateurs unaires (!,++,--) et pour les opérateurs d'affectation (=,+=,-
=,*=,/=,%=), l'évaluation se fait de droite à gauche dans l'expression.
:
LES OPÉRATEURS
Exemples
► Nous allons utiliser certains caractères de la table des codes ASCII qui permettent de
réaliser des affichages particuliers. Pour pouvoir les manipuler, le langage C utilise ce
que l'on appelle une « séquence d'échappement ». Cela veut simplement dire qu'ils
sont précédés d'une contre barre \.
► Cette dernière permet d'avertir le compilateur que le caractère qui suit la \ doit être
considéré de façon spéciale.
► Nous en avons déjà rencontré un : le ‘\n' qui effectue un saut de ligne puis un
positionnement au début de la ligne suivante.
► Les séquences sont utilisables avec la fonction printf() mais aussi dans d'autres
circonstances.
Caractères spéciaux
Voici la liste des séquences d'échappements
Exp exponentielle
Cosh cosinus hyperbolique
Sinh sinus hyperbolique
Tanh tangente hyperbolique
Log logarithme népérien
Log10 logarithme en base 10
Pow puissance
Sqrt racine carrée
Frexp décomposition en fraction normalisée en base 2
ldexp produit par une puissance de 2
Exercice:
a) long 12
b) float 11,75
c) long 4
d) int 0
e) int 1
f) int 1
g) long 5
h) int 1
i) int 0
j) float 1,75
k) float 8,75
2) Quels seront les résultats fournis par ce programme ?
#include <stdio.h>
main ()
{ int n = 543 ;
int p = 5 ;
float x = 34.5678;
printf ("A : %d %f\n", n, x) ;
printf ("B : %4d %10f\n", n, x) ;
printf ("C : %2d %3f\n", n, x) ;
printf ("D : %10.3f %10.3e\n", x, x) ;
printf ("E : %*d\n", p, n) ;
printf ("F : %*.*f\n", 12, 5, x) ;
}
Correction
A : 543 34.567799
B : 543 34.567799
C : 543 34.567799
D : 34.568 3.457e+01
E : 543
F : 34.56780
2) Quelles seront les valeurs lues dans les variables n et p
(de type int), par l’instruction suivante ?
scanf ("%4d %2d", &n, &p) ;
lorsqu’on lui fournit les données suivantes (le symbole ^
représente un espace et le symbole @
représente une fin de ligne, c’est-à-dire une validation) ?
a) 12^45@
b) 123456@
c) 123456^7@
d) 1^458@
e) ^^^4567^^8912@
Correction:
a) n=12, p=45
b) n=1234, p=56
c) n=1234, p=56
d) n=1, p=45
e) n=4567, p=89