Programmation Lancage C - Seance 1
Programmation Lancage C - Seance 1
Programmation Lancage C - Seance 1
• c : char: caractère affiché ''en clair" • f : double ou float écrit en notation "décimale" avec six
(convient aussi à short ou à int compte chiffres après le point
tenu des conversions systématiques)
• e : double ou float écrit en notation ‘'exponentielle''
• d : int (convient aussi à char, compte tenu (mantisse entre 1 et 9) avec six chiffres après le point
des conversions systématiques) décimal, sous la forme x.xxxxxxe+yyy ou x.xxxxxxe-yyy
• u : unsigned int (convient aussi à unsigned pour les nombres positifs et -x.xxxxxxe+yyy ou -
char ou à unsigned short, compte tenu x.xxxxxxe-yyy pour les nombres négatifs
des conversions systématiques) • s : chaîne de caractères dont on fournit l'adresse (notion
• ld : long qui sera étudiée ultérieurement)
• lu : unsigned long
PROGRAMMATION 4
EN LANGAGE C
É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
caractère minimum à utiliser. x = 1.2345 ^^1.234500
Remarques:
Cadrage de l’affichage à gauche ➔
printf("%-10.3f" , x );
x = 1.2345 ➔ 1.235^^^^^
PROGRAMMATION 6
EN LANGAGE C
ÉCRITURE FORMATÉE DE DONNÉES
Les erreurs d’affichage
Erreur 1 : Code de format en désaccord avec le Conséquence 2 : s’il y a trop de code de format, printf
type de l’expression à afficher: cherchera à afficher n’importe quoi :
Conséquence : mauvaise interprétation si printf("%d %d" , n );
même taille (int en %u), sinon, conséquences n=8 ➔ 8 2
plus désastreuses.
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 LANGAGE C
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
frappée au clavier est rangée temporairement dans
• d : int l’emplacement mémoire nommé « tampon ». Ce
• u : unsigned int dernier est exploré caractère par caractère au fur et
à mesure des besoins. Certains caractères jouent un
• hd : short int
rôle particulier: les séparateurs (l’espace et la fin de
• hu : unsigned short ligne \n)
• ld : long
• lu : unsigned long
• 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 LANGAGE C
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 LANGAGE C
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, @ désigne Exemples : (n et p sont de type int, c char, @
une fin de ligne) désigne une fin de ligne)
PROGRAMMATION 10
EN LANGAGE C
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 LANGAGE C
LES INSTRUCTIONS DE CONTRÔLE
Structures conditionnelles (if)
PROGRAMMATION 12
EN LANGAGE C
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
printf("Mais ne vous inquiete pas \n"); accolades) s’exécutent si la
printf("nous l’avons rendu Minuscule\n"); condition et vrai
}
printf("ce message s’affiche a l’exterieur de la structure de
test"); Le programme
continue son exécution
PROGRAMMATION 13
EN LANGAGE C
LES INSTRUCTIONS DE CONTRÔLE
Structures conditionnelles (if)
Exemple
…
int n,m; Si la condition n’agit que sur une seul
printf("donner un nombre entier\n"); instruction, il n’est pas nécessaire de
scanf("%d", &n); mettre les accolades
if (n % 2 == 0)
printf("le nombre %d est paire\n", n);
else
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 LANGAGE C
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 LANGAGE C
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]; [condition];
même série d'instructions (Bloc d’instructions): [modification du compteur])
{
c'est une boucle !
[Bloc d’instructions];
Dans sa syntaxe, il suffit de préciser le nom de la }
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 {
printf("%d", i);
une limite) et enfin une instruction qui incrémente }
(ou décrémente) le compteur.
PROGRAMMATION 16
EN LANGAGE C
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
d'instructions. {
[Bloc d’instructions];
Avec cette structure de contrôle, tant qu'une
}
condition est vraie, les instructions lui
correspondant sont exécutées.
Exemple :
x=1;
while (x<=10)
{
a = 1/(x-20);
printf("%f", a);
x=x+1;
}
PROGRAMMATION 17
EN LANGAGE C
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
l’ordre d’évaluation de la condition, ici le bloc {
d’instructions est exécuté premièrement puis la [Bloc d’instructions];
condition est évaluée. } while ([condition]);
Exemple :
x=1;
do
{
a = 1/(x-20);
printf("%f", a);
x=x+1;
} while (x<=10);
PROGRAMMATION 18
EN LANGAGE C
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;
boucle dans un code en C. Chaque fois que printf ("fin tour %d\n", i);
}
l’instruction break est rencontrée, le contrôle printf ("après la boucle");
d’exécution saute immédiatement à la première return 0;
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 breakpeuvent être
utilisées dans les boucles tant que et pour.
PROGRAMMATION 19
EN LANGAGE C
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) ;
une plus grande maîtrise de l’exécution d’une if (i<4) continue ;
boucle dans un code en C. Chaque fois que printf ("bonjour\n") ;
}
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 breakpeuvent être
utilisées dans les boucles tant que et pour.
PROGRAMMATION 20
EN LANGAGE C