Académique Documents
Professionnel Documents
Culture Documents
Programmation Langage C - Partie 2
Programmation Langage C - Partie 2
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).
• 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
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 );
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
printf("%d" , n, p );
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@
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 :
PROGRAMMATION 16
EN LANGAGEC
LES INSTRUCTIONS DE CONTRÔLE
L’instruction de répétition (while) Syntaxe :
PROGRAMMATION 17
EN LANGAGEC
LES INSTRUCTIONS DE CONTRÔLE
L’instruction de répétition (do…while) Syntaxe :
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