Vous êtes sur la page 1sur 20

Département Génie Informatique

2ème Année «Années


LE LANGAGE C Préparatoires Intégrés»
2023/2024

 Pr. BAHASSINE Said


 Pr. CHERGUI Adil
 Pr. AZMI Mohamed
said.bahassine@ensam-casa.ma
Département Génie Informatique

LA LECTURE ET ÉCRITURE
Partie 2
LES INSTRUCTIONS DE CONTRÔLE
Objectifs de la séance :
• Communiquer avec les fonctions de lecture et d’écritures.
• Exprimer les structures de contrôle en langage C
 Pr. BAHASSINE Said
 Pr. CHERGUI Adil
 Pr. AZMI Mohamed
said.bahassine@ensam-casa.ma
ÉCRITURE FORMATÉE DE DONNÉES
Les possibilités de la fonction printf
La fonction printf est utilisée pour transférer du
Exemple:
texte, des valeurs de variables ou des résultats
d'expressions vers le fichier de sortie standard printf("leur somme est : %d",n1+n2);
stdout (par défaut l'écran).

La fonction printf a comme 1er argument une


chaîne de caractères qui spécifie:

• Des caractères à afficher tels quels;

• Des code de format repérés par %. Un code


de conversion (c, d, f..) précise le type de
l’information à afficher.

Un code de format peut contenir des


informations complémentaires agissant sur le
cadrage, le gabarit ou la précision.
PROGRAMMATION 3
EN LANGAGEC
ÉCRITURE FORMATÉE DE DONNÉES
Les principaux codes de conversion

• c : char: caractère affiché ''en clair" • f : double ou float écrit en notation "décimale"
(convient aussi à short ou à int compte avec six chiffres après le point
tenu des conversions systématiques)
• e : double ou float écrit en notation
• d : int (convient aussi à char, compte tenu ‘'exponentielle'' (mantisse entre 1 et 9) avec six
des conversions systématiques) chiffres après le point décimal, sous la forme
• u : unsigned int (convient aussi à unsigned x.xxxxxxe+yyy ou x.xxxxxxe-yyy pour les nombres
char ou à unsigned short, compte tenu positifs et -x.xxxxxxe+yyy ou -x.xxxxxxe-yyy pour
des conversions systématiques) les nombres négatifs

• ld : long • s : chaîne de caractères dont on fournit l'adresse


(notion qui sera étudiée ultérieurement)
• lu : unsigned long

PROGRAMMATION 4
EN LANGAGEC
ÉCRITURE FORMATÉE DE DONNÉES
Action sur le gabarit d’affichage
Les entiers sont affichés par défaut sans printf("%f" , x );
espaces avant ou après. Les flottants avec six x = 1.2345 1.234500
chiffres après le point. x = 12.3456789 12.345678
Pour agir sur l’affichage  un nombre est printf("%10f" , x );
placé après % et précise le nombre de x = 1.2345 ^^1.234500
caractère minimum à utiliser.
x = 1.2345E5 123450.000000
Exemples
printf("%e" , x );
printf("%3d" , n );
x = 1.2345 1.234500e+000
n = 20 ^20
x = 123.45 1.234500e+002
n=3 ^^3
n = 2358 2358
n = -5200 -5200
PROGRAMMATION 5
EN LANGAGEC
ÉCRITURE FORMATÉE DE DONNÉES
Actions sur la précision
Pour les flottants, on peut préciser un - Le caractère * figurants à la place d’un gabarit ou
nombre de chiffres après le point décimal une précision signifie que la valeur effective est fournie
Exemples: dans la liste des arguments de printf:

printf("%10.3f" , x ); printf("%8.*f" , n, x );

x = 1.2345 ^^^^^1.235 n=1; x=1.2345  ^^^^^1.2

x = 1.2345E3 ^^1234.500 - La fonction printf fournit une valeur de retour


(nombre de caractère affichés)
x = 1.2345E7 12345000.000

Remarques:
Cadrage de l’affichage à gauche 
printf("%-10.3f" , x );
x = 1.2345  1.235^^^^^ PROGRAMMATION 6
EN LANGAGEC
ÉCRITURE FORMATÉE DE DONNÉES
Les erreurs d’affichage
Erreur 1 : Code de format en désaccord avec Conséquence 2 : s’il y a trop de code de format,
le type de l’expression à afficher: printf cherchera à afficher n’importe quoi :
Conséquence : mauvaise interprétation si
printf("%d %d" , n );
même taille (int en %u), sinon, conséquences
plus désastreuses. n=8  8 2
Erreur 2: Nombre de code de format différents
du nombre d’expressions de la liste

Conséquence 1 : si des expressions de la liste


n’ont pas de format, elles ne seront pas
affichées :

printf("%d" , n, p );

// valeur de p ne sera pas affiché


PROGRAMMATION 7
EN LANGAGEC
LECTURE FORMATÉE DE DONNÉES
Les principaux codes de conversion Premières notion de tampon et de
séparateurs
• c : char Lorsque scanf attend des données, l’information
• d : int frappée au clavier est rangée temporairement dans
• u : unsigned int l’emplacement mémoire nommé « tampon ». Ce
• hd : short int dernier est exploré caractère par caractère au fur et
• hu : unsigned short à mesure des besoins. Certains caractères jouent un
• ld : long
rôle particulier: les séparateurs (l’espace et la fin de
• lu : unsigned long
ligne \n)
• f ou e : float écrit en notation "décimale"
ou ‘'exponentielle''
• Lf ou le : double écrit en notation
"décimale" ou ‘'exponentielle''
• s : chaîne de caractères dont on fournit
l'adresse (notion qui sera étudiée
ultérieurement) PROGRAMMATION 8
EN LANGAGEC
LECTURE FORMATÉE DE DONNÉES
Les premières règles utilisées Premières notion de tampon et de
par scanf séparateurs
• Les codes de format correspondant à un Exemples : (n et p sont de type int, c char, @
nombre entraînent l’avancement du désigne une fin de ligne)
pointeur jusqu’au 1er caractère différent
scanf("%d%d" , &n, &p );
d’un séparateur, puis scanf prend en
compte tous les caractères suivants jusqu’à 12^25@ n = 12 p=25
la rencontre d’un séparateur. ^12^^25^^@ n = 12 p=25
• Quand au code de format %c, il entraîne la 123@
prise en compte du caractère désigné par le
pointeur (même un séparateur) et il est @
avancé sur le caractère suivant. ^25 n = 12 p=25

scanf("%d%c" , &n, &c );

12^a@ n = 12 c=‘ ‘
PROGRAMMATION 9
EN LANGAGEC
LECTURE FORMATÉE DE DONNÉES
On peut imposer un gabarit
Rôle d’un espace dans le format
maximal
Le traitement d’un code de format Un espace entre deux codes de format demande à
s’interrompe soit à la rencontre d’un scanf de faire avancer le pointeur au prochain
séparateur, soit lorsque le nombre de caractère caractère différent d’un séparateur !!
indiqué a été atteint !!
Exemples : (n et p sont de type int, c char, @
Exemples : (n et p sont de type int, @ désigne désigne une fin de ligne)
une fin de ligne)
scanf("%d %c" , &n, &c );
12^a@ n = 12 c=‘a‘
scanf("%3d%3d" , &n, &p );
12^^^@
12^25@ n = 12 p=25
a@ n = 12 c=‘a‘
^^^^^12345@ n = 123 p=45

12@

25@ n = 12 p=25 PROGRAMMATION 10


EN LANGAGEC
LECTURE FORMATÉE DE DONNÉES
Arrêt prématuré de scanf
Compte = scanf("%d %d %c" , &n, &p, &c );
12^25^b@ n = 12 p = 25 c=‘b‘ compte = 3
12b@ n = 12 p inchangé c inchangé compte = 1
b@ n indéfini p inchangé c inchangé compte = 0
Un arrêt prématuré de scanf a lieu dans le cas où scanf n’est pas en mesure de fabriquer une valeur adéquate !!

Erreurs de programmation
1- Code de format en désaccord avec le type de l’expression:
Si même taille  introduction d’une mauvaise valeur
Si la variable a une taille inférieur  écrasement d’un emplacement mémoire consécutif à cette variable
2- Nombre de codes de format différent du nombre d’éléments de la liste:
Scanf("%d",&n, &p);  seule la valeur de n est lue
Scanf("%d%d",&n);  on affecte une valeur à un emplacement aléatoire de la mémoire
PROGRAMMATION 11
EN LANGAGEC
LES INSTRUCTIONS DE CONTRÔLE
Structures conditionnelles (if)
Il n’y a que deux formes possibles pour un test ;
 if ([condition])
{ Les instructions qui sont dans ce
[bloc d’instructions] bloc ne seront exécutées que si
} la condition est Vrai
 if ([condition])
{
[bloc d’instructions 1] Si la condition est vrai
} Le bloc 1 d’instructions est exécuté
else Si la condition est fausse
Le bloc 2 est exécuté
{
[bloc d’instructions 2]
}

PROGRAMMATION 12
EN LANGAGEC
LES INSTRUCTIONS DE CONTRÔLE
Structures conditionnelles (if)

Exemple

char Let;
printf("donner une lettre en Minuscule\n"); Les lettres minuscules ont une valeur
scanf("%c", &Let); comprise entre 97 (a) et 122 (z).
if (Let <96) Regarder la table des codes ASCII
{
Let=Let+32;
printf("vous avez tapez une lettre en Majuscule\n");
Ces instructions (entre
accolades) s’exécutent si la
printf("Mais ne vous inquiete pas \n");
condition est vrai
printf("nous l’avons rendu Minuscule\n");
}
printf("ce message s’affiche a l’exterieur de la structure
Le programme continue
de test");
son exécution

PROGRAMMATION 13
EN LANGAGEC
LES INSTRUCTIONS DE CONTRÔLE
Structures conditionnelles (if)

Exemple

int n,m;
printf("donner un nombre entier\n");
scanf("%d", &n);
if (n % 2 == 0) Si la condition n’agit que sur une seul
printf("le nombre %d est paire\n", n); instruction, il n’est pas nécessaire de
else mettre les accolades
printf("le nombre %d est impaire\n",n);
m = n + 6;
printf("le nombre m =%d\n", m);
Ces instructions n’appartiennent pas ni au
… bloc de if ni celui de else
Ici le programme continu ces instructions

PROGRAMMATION 14
EN LANGAGEC
LES INSTRUCTIONS DE CONTRÔLE
L’instruction de choix multiple (switch) Exemple :
#include <stdio.h>
int main()
Syntaxe : {
switch(choix) int i,j,k;
printf("entrez deux nombres entiers \n");
{
scanf("%d %d",&i,&j);
case [valeur1] : printf("entrez 0 pour avoir un quotient entier\n");
[bloc d’instructions 1] printf("ou 1 pour avoir un quotient
break; fractionnaire\n");
case [valeur2] : scanf("%d",&k);
[bloc d’instructions 2] switch(k)
break; {
case 0 :
….
printf("%d\n",i/j);
case [valeur n] : break;
[bloc d’instructions n] case 1 :
break; printf("%f\n",(float)i/j);
default : break;
[bloc d’instructions a exécuté lorsque la default :
valeur de choix ne correspond a aucun cas ] printf("il faut entrer 0 ou 1\n");
printf("relancez l'execution\n");
break;
}
} return 0;
} PROGRAMMATION 15
EN LANGAGEC
LES INSTRUCTIONS DE CONTRÔLE
L’instruction de répétition (la boucle for) Syntaxe :

L'instruction for permet d'exécuter plusieurs fois la


for ([initialisation du compteur];
même série d'instructions (Bloc d’instructions): [condition]; [modification du compteur])
c'est une boucle ! {

Dans sa syntaxe, il suffit de préciser le nom de la [Bloc d’instructions];


}
variable qui sert de compteur (et éventuellement sa
valeur de départ, la condition sur la variable pour
Exemple :
laquelle la boucle s'arrête (basiquement une
for (i=1; i<6; i++)
condition qui teste si la valeur du compteur dépasse
{
une limite) et enfin une instruction qui incrémente
printf("%d", i);
(ou décrémente) le compteur. }

PROGRAMMATION 16
EN LANGAGEC
LES INSTRUCTIONS DE CONTRÔLE
L’instruction de répétition (while) Syntaxe :

L'instruction while représente un autre moyen while ([condition])


d'exécuter plusieurs fois la même série {
[Bloc d’instructions];
d'instructions. }
Avec cette structure de contrôle, tant qu'une
condition est vraie, les instructions lui Exemple :
correspondant sont exécutées. x=1;
while (x<=10)
{
a = 1/(x-20);
printf("%f", a);
x=x+1;
}

PROGRAMMATION 17
EN LANGAGEC
LES INSTRUCTIONS DE CONTRÔLE
L’instruction de répétition (do…while) Syntaxe :

C’est une seconde version de la boucle while que do


l’on appelle do…while. La différence réside dans {
[Bloc d’instructions];
l’ordre d’évaluation de la condition, ici le bloc } while ([condition]);
d’instructions est exécuté premièrement puis la
condition est évaluée. Exemple :

x=1;
do
{
a = 1/(x-20);
printf("%f", a);
x=x+1;
} while (x<=10);

PROGRAMMATION 18
EN LANGAGEC
LES INSTRUCTIONS DE CONTRÔLE
Exemple break :
Les instructions de branchement int main()
{
inconditionnel : break, continue int i;
for ( i=1 ; i<=5 ; i++ )
{ printf ("iteration %d\n", i);
printf ("bonjour\n");
Les instructions break et continue fournissent if ( i==3 )
une plus grande maîtrise de l’exécution d’une break;
printf ("fin tour %d\n", i);
boucle dans un code en C. Chaque fois que }
l’instruction break est rencontrée, le contrôle printf ("après la boucle");
return 0;
d’exécution saute immédiatement à la première }
instruction après la boucle. Pour passer le contrôle
à l’itération suivante sans sortir de la boucle, nous
utilisons l’instruction continue. Les deux
instructions continue et break peuvent être
utilisées dans les boucles tant que et pour.
PROGRAMMATION 19
EN LANGAGEC
LES INSTRUCTIONS DE CONTRÔLE
Exemple continue:
Les instructions de branchement int main()
inconditionnel : break, continue {
int i ;
for ( i=1 ; i<=5 ; i++ )
{
Les instructions break et continue fournissent printf ("début tour %d\n", i) ;
if (i<4) continue ;
une plus grande maîtrise de l’exécution d’une printf ("bonjour\n") ;
boucle dans un code en C. Chaque fois que }
l’instruction break est rencontrée, le contrôle return 0;
}
d’exécution saute immédiatement à la première
instruction après la boucle. Pour passer le contrôle
à l’itération suivante sans sortir de la boucle, nous
utilisons l’instruction continue. Les deux
instructions continue et break peuvent être
utilisées dans les boucles tant que et pour.

PROGRAMMATION 20
EN LANGAGEC

Vous aimerez peut-être aussi