You are on page 1of 41

CHAPITRE 3 : Les boucles de rptition CHAPITRE 3 : Les boucles de rptition

Une boucle permet de rpter un mme traitement, une ou plusieurs fois. Le


langage C offre trois sortes de boucles :
do ... while (Rpter ...),
while ... (Tant que ...) et
for ... (Pour ...)
A)Boucle do ... while ... (Rpter .... Tant que)
1) Syntaxe
do
instruction
while (condition);
L'instruction rpter peut tre simple (une seule action), structure (une
autre instruction de contrle) ou compose (c'est le cas le plus fruent).
!"emples pour illustrer la s#nta"e :
int somme = 0;
int n = 1;
/ instru!tion " rpter est !ompose /
do #
somme $= n;
n$$;
% while (n &= 10);
int indi!e = 0;
/ instru!tion " rpter est simple /
do
indi!e$$;
while (indi!e & ');
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
'(
condition
instruction
faux vrai
int a)e;
/ instru!tion " rpter est stru!ture /
do #
if (a)e *= 1+)
printf(,-.est un adulte,);
else
a)e $= ';
% while (a)e & 1+);
int a)e;
/ instru!tion " rpter est !ompose /
do #
printf(,a)e = /d0n,, a)e);
if (a)e *= 1+)
printf(,-.est un adulte,);
else
a)e $= ';
% while (a)e & 1+);
2) Fonctionnement
$tape % : !ffectuer (d'abord) l'instruction rpter.
$tape & : 'rifier (apr(s) la condition:
a) si la condition est vrai, on re)ient l'tape %*
b) si non (la condition est fau"), on uitte la boucle.
Conclusion :
+)ec la boucle do ... ,-ile, on effectue au moins une fois l'instruction
rpter.
3) Domaines d'utilisation
.n utilise la boucle do ... ,-ile quand on ne sait pas l'avance le nombre
de fois ue l'on doit rpter le mme traitement. Les e"emples sui)ants
permettent de )oir uelues applications possibles a)ec cette boucle.
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
''
1.1 Rpter le mme traitement en mode conversationnel
C'est le cas le plus fruent pour le premier tra)ail pratiue en /01
%2%3.
!"emple :
$crire un bloc d'instructions permettant de saisir l'4ge et le se"e d'une
personne. !nsuite, on affic-e un message du genre :
C'est un enfant de se"e masculin.
.n rp(te le mme traitement tant ue l'usager dcide de continuer.
Solution !
int a)e;
!har se1e,
reponse; / 2ui ou 3on l.usa)er 4eut !ontinuer /
do #
printf(,0n5ntre6 le se1e et l.a)e ,);
fflush(stdin); / 4ider la memoire temporaire /
s!anf(,/!/d,, 7se1e, 7a)e);
printf(,-.est un ,);
if (a)e &= 11)
printf(,enfant ,);
else if (a)e & 1+)
printf(,adoles!ent ,);
else
printf(,adulte ,);
if (toupper(se1e) == .8.) / to upper 9 en ma:us!ule /
printf(,de se1e feminin0n,);
else
printf(,de se1e mas!ulin0n,);
printf(,0n;oule6<4ous !ontinuer = (2/3) ,);
fflush(stdin); / 4ider la memoire temporaire /
reponse = toupper()et!har());
% while (reponse == .2.);
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
'>
"xercice !
$crire un bloc d'instructions permettant de saisir le pri" d'un article (un
rel). !nsuite, on calcule les ta"es 156 et 1'7 et on affic-e l'cran
les informations du genre :
Pri1 de l.arti!le 9 ....
Ta1e TP? 9 ....
Ta1e T;@ 9 ....
Pri1 total " paAer 9 ....
.n rp(te le mme traitement tant ue l'usager dcide de continuer.
1.2 #alidation de donnes
La boucle do ... ,-ile permet de )alider la )aleur ue l'usager entre au
cla)ier.
"xemple !
$crire un bloc d'instructions permettant de saisir et de )alider :
le se"e d'une personne ('f', '0', 'm' ou '8')*
l'4ge d'une personne (entre % et %9:).
Une solution possible :
!onst int BCDEFCG5 = 1H(;
int a)e;
!har se1e;
/ saisir et 4alider le se1e /
do #
printf(,5ntre6 un !ara!tere parmi f, 8, m ou B 9,);
fflush(stdin); / 4ider la memoire temporaire /
s!anf(,/!,, 7se1e);
if (se1e I= .f. 77 se1e I= .8. 77
se1e I= .m. 77 se1e I= .B.)
printf(,5rreurI Retape6 ?.;.P. 0n,);
% while (se1e I= .f. 77 se1e I= .8. 77
se1e I= .m. 77 se1e I= .B.);
/ saisir et 4alider l.J)e /
do #
printf(,5ntre6 l.a)e entre 1 et /d 9 ,, BCDEFCG5);
s!anf(,/d,, 7a)e);
if (a)e & 1 KK a)e * BCDEFCG5)
printf(,5rreurI Retape6 ?.;.P. 0n,);
% while (a)e & 1 KK a)e * BCDEFCG5);
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
'L
Une solution plus lgante :
!onst int BCDEFCG5 = 1H(;
int a)e, 4alide; / 2ui ou 3on la donne est 4alide /
!har se1e;
/ saisir et 4alider le se1e /
do #
printf(,5ntre6 un !ara!tere parmi f, 8, m ou B 9,);
fflush(stdin); / 4ider la memoire temporaire /
/ saisie et !on4ertie un !ara!tMre en ma:us!ule /
se1e = toupper()et!har());
4alide = (se1e == .8. KK se1e == .B.);
if (I4alide) / ?i Pas 4alide /
printf(,5rreurI Retape6 ?.;.P. 0n,);
% while (I4alide); / tant que Pas 4alide /
/ saisir et 4alider l.J)e /
do #
printf(,5ntre6 l.J)e entre 1 et /d 9 ,, BCDEFCG5);
s!anf(,/d,, 7a)e);
4alide = (a)e *= 1 77 a)e &= BCDEFCG5);
if (I4alide)
printf(,5rreurI Retape6 ?.;.P. 0n,);
% while (I4alide);
$alcul scienti%ique
"xemple 1
$crire un bloc d'instructions permettant de calculer et d'affic-er la
somme sui)ante :
somme = 10 $ 1' $ N0 $ N' $ ... $ '0
Solution
!onst int O2R351 = 10,
O2R35N = '0,
P5PC? = ';
int terme, somme;
somme = 0;
terme = O2R351;
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
'+
do #
somme $= terme; /qui4alent " 9 somme = somme $ terme ; /
terme $= P5PC?;
% while (terme &= O2R35N);
printf(,Pa somme !al!ulee est 9 /d0n,, somme);
"xemple 2
$crire un programme permettant d'estimer la )aleur de 5/
(9.%:%;...) selon la formule sui)ante :
9999
1
9
1
7
1
5
1
3
1
4
PI
1 + + + =
$olution
Qin!lude &stdio.h*
4oid main()
#
!onst int PEBET5 = RRRR,
P5PC? = N;
int denominateur = 1; / premier dnominateur 4aut 1 /
float pi?ur( = 0.0, si)ne = 1.0;
do #
pi?ur( $= si)ne / denominateur;
si)ne = <si)ne; / !han)er de si)ne /
denominateur $= P5PC?;
% while (denominateur &= PEBET5);
printf(,Pa 4aleur estimee de PE est /1N.>f0n,,
( pi?ur();
%
"xcution
Pa 4aleur estimee de PE est H.1(1HRL
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
'R
&) "xercices
"xercice 1
$crire un programme permettant de saisir et de )alider si un entier lu (e"emple
<&9:) est positif ou non. !nsuite, on affic-e l'entier tel ue lu en plus d'affic-er
cet entier lu l'in)erse (ici :9&<).
Solution !
Qin!lude &stdio.h*
int main()
#
int n;
/ ?aisie et 4alidation /
do #
printf(,5ntre6 un entier positif 9 ,);
s!anf(,/d,, 7n);
if (n & 0)
printf(,n = /d est ne)atif0n,, n);
% while (n & 0);
printf(,P.entier lu 9 /d0n,, n);
printf(,C l.en4ers 9 ,);
do #
printf(,/d,, n / 10);
n /= 10;
% while (n * 0);
return 0;
%
"xcution
5ntre6 un entier positif 9 S+L(N
n = <+L(N est ne)atif
5ntre6 un entier positif 9 'HNR
P.entier lu 9 'HNR
C l.en4ers 9 RNH'
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
>0
"xercice 2
$crire un programme permettant de saisir un entier positif (e"emple =:&;). /l
calcule l'en)ers du nombre lu (ici ;&:=) et affic-e ces deu" )aleurs.
Solution !
Qin!lude &stdio.h*
int main()
#
int n, en4ers;
printf(,5ntre6 un entier positif 9 ,);
s!anf(,/d,, 7n);
printf(,P.entier lu 9 /d0n,, n);
/ -al!ul de l.en4ers /
en4ers = 0;
do #
en4ers = 10 en4ers $ n / 10;
n /= 10;
/ Cttention au !riture ra!!our!ie,
i!i on peut !rire
en4ers = 10;
en4ers $= nomTre / 10;
mais on ne doit pas !rire
en4ers = 10 $ nomTre / 10;
qui nous donne pas le mUme rsultat
/
% while (n * 0);
printf(,C l.en4ers 9 /d,, en4ers);
return 0 ;
%
"xcution
5ntre6 un entier positif 91NH(
P.entier lu 9 1NH(
C l.en4ers 9 (HN1
"xercice 3
$crire un programme permettant de saisir les informations d'un placement :
le !apital (un rel)
le tau1 d.intrUt (!ompos) annuel en /
Le programme calcule et affic-e l')olution du placement, anne apr(s anne.
Lorsue notre pargne )aut un million ou plus, l'e"cution du programme
s'arrte. Ce programme permet donc d')aluer combien d'annes cela prendra
pour de)enir millionnaire si l'on adopte un tel plan d'pargne.
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
>1
/ Vans !omTien d.annes, de4iendra<t.on millionnaire =
BatiMre 9 Tou!le do ... while (entre autres) /
Qin!lude &stdio.h*
int main()
#
!onst float ?5WEPFRE-X5??5F;2WPW = 1000000.00;
float depotCnnuel, / montant fi1e de dpYt annuel /
tau1, / tau1 d.intrUt annuel espr /
interetCnnuel, / intrUt annuel " la fin de l.anne qui
sZa:oute au !apital " la fin de l.anne
(intrUt !ompos) /
!apital; / !apital a!!umul, anne aprMs anne /
int nTCnnee; / !ompteur du nomTre d.annes /
/ ?aisie les donnes 9 montant de dpYt et le tau1 d.intrUt /
printf(,@uel est le montant de depot annuel (e1emple 1000.00) = ,);
s!anf(,/f,, 7depotCnnuel);
printf(,@uel est le tau1 annuel fi1e espere (e1. L.') = ,);
s!anf(,/f,, 7tau1);
/ traitement 9 /
if (depotCnnuel *= ?5WEPFRE-X5??5F;2WPW)
printf(,;ous a4e6 atteint ou depasse le seuil /10.Nf
[0n,,?5WEPFRE-X5??5F;2WPW);
else #
/ affi!ha)e de l.en<tUte pour rsumer l.4olution du pla!ement /
printf(,0n0n823V? D\] in!.0n,);
printf(,Bontant de depot annuel 9 />.Nf [0n,, depotCnnuel);
printf(,Tau1 d.interet annuel (suppose fi1e) 9 /(.Nf0n,, tau1);
printf(,0n0n54olution du pla!ement 90n0n,);
printf(,Cnnee -apital (au deTut) Enteret annuel,,
, -apital (a la fin de l.annee)0n,);
nTCnnee = 0;
!apital = 0;
do #
/ dTut d.une anne de pla!ement /
nTCnnee$$;
/ !apital a!!umul au dTut de l.anne de pla!ement /
!apital $= depotCnnuel;
printf(,/Hd /1N.Nf,, nTCnnee, !apital);
/ " la fin de l.anne de pla!ement 9 /
interetCnnuel = tau1 / 100.0 !apital;
/ a:outer l.intrUt au !apital pour une autre anne /
!apital $= interetCnnuel;
printf(,/N'.Nf /1+.Nf0n,, interetCnnuel, !apital);
% while (!apital & ?5WEPFRE-X5??5F;2WPW);
printf(,0nCpres /d annee(s), 4otre !apital sera 9 /1N.Nf [0n,,
nTCnnee, !apital);
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
>N
%
return 0 ;
%
"xcution
@uel est le montant de depot annuel (e1emple 1000.00) = 1NH('>L
@uel est le tau1 annuel fi1e espere (e1. L.') = '.00
;ous a4e6 atteint ou depasse le seuil 1000000.00 [
Press anA ^eA to !ontinue
@uel est le montant de depot annuel (e1emple 1000.00) = H000
@uel est le tau1 annuel fi1e espere (e1. L.') = 10.0
823V? D\] in!.
Bontant de depot annuel 9 H000.00 [
Tau1 d.interet annuel (suppose fi1e) 9 10.00
54olution du pla!ement 9
Cnnee -apital (au deTut) Enteret annuel -apital (a la fin de
l.annee)
1 H000.00 H00.00 HH00.00
N >H00.00 >H0.00 >RH0.00
H RRH0.00 RRH.00 10RNH.00
et!.
. . . . . . . .
H' +1H0LH.00 +1H0L.H0 +R(H+0.H0
H> +RLH+0.H1 +RLH+.0H R+L11+.H(
HL RR011+.H+ RR011.+( 10+R1H0.N1
Cpres HL annee(s), 4otre !apital sera 9 10+R1H0.N' [
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
>H
'utres exemples
"xemple 1
/ Oou!le do ... while
Cppli!ation 1 9
,Rpter le mUme traitement TC3T @W5 l.usa)er d!ide de !ontinuer ,
-e pro)ramme permet 9
de saisir la taille d.une personne en nomTre de pieds et de
pou!es
de !on4ertir !ette taille en mMtre
d.affi!her la taille dans les deu1 sAstMmes
Pe pro)ramme fon!tionne pour plusieurs personnes
tant que l.usa)er d!ide de !ontinuer.
/
Qin!lude &stdio.h*
int main()
#
!onst float 8C-T5WR = 0.H0(+; / 1 pied = 0.H0(+ mMtre /
!har reponse; / 2ui ou 3on si l.usa)er 4eut !ontinuer /
int nTPieds, nTPou!es;
float taille;
do # / Rpter /
/ ?aisie la taille en nomTre de pieds et de pou!es /
printf(,5ntre6 la taille en nomTre de pieds et de pou!es 9 ,);
s!anf(,/d/d,, 7nTPieds, 7nTPou!es);
/ -on4ersion en mMtre 9 /
taille = (nTPieds $ nTPou!es / 1N.0) 8C-T5WR;
/ Cffi!ha)e 9 /
printf(,Pa taille de la personne 90n,);
printf(, /d pied(s) et /d pou!e(s)0n,, nTPieds, nTPou!es);
printf(, /(.Nf metre0n,, taille);
/ Vemander si l.usa)er 4eut !ontinuer /
printf(,0n;oule6<4ous !ontinuer = (o/n) ,);
s!anf(, /!,, 7reponse);
/ Wne maniMre pour saisir un !ara!tMre tap
3ote6 l.espa!e a4ant /!, !e!i permet d.i)norer
le !ara!tMre retour de !hariot tap aprMs a4oir
entr le nomTre de pieds et de pou!esI
_ e1pliquer en !lasse.
Wne autre mthode sera 4ue dans des pro!hains e1emples
/
% while (reponse == .o. KK reponse == .2.);
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
>(
return 0;
%
"xcution
5ntre6 la taille en nomTre de pieds et de pou!es 9 ' >
Pa taille de la personne 9
' pied(s) et > pou!e(s)
1.>+ metre
;oule6<4ous !ontinuer = (o/n) o
5ntre6 la taille en nomTre de pieds et de pou!es 9 > N
Pa taille de la personne 9
> pied(s) et N pou!e(s)
1.++ metre
;oule6<4ous !ontinuer = (o/n) o
5ntre6 la taille en nomTre de pieds et de pou!es 9 ( R
Pa taille de la personne 9
( pied(s) et R pou!e(s)
1.(' metre
;oule6<4ous !ontinuer = (o/n) n
"xemple 2
/ 8i!hier dowhileN.!
Veu1iMme appli!ation de la Tou!le do ... while
Rpter
saisir une donne
?i la donne est in4alide
affi!her un messa)e pertinent
Tant que (la donne est in4alide)

-e pro)ramme permet 9
1. de saisir et ;CPEV5R un poste de tra4ail parmi les ( postes
N. de saisir et ;CPEV5R l.an!iennet entre N Tornes
H. d.affi!her un messa)e appropri
/
Qin!lude &stdio.h*
Qin!lude &!tApe.h*
int main()
#
!onst int BE3FC3- = 1,
BCDFC3- = N';
!har poste; / parmi 9 C, P, 2 et ? analAste, pro)rammeur,
oprateur, se!rtaire /
int an!iennete; / nT. d.annes d.an!iennet /
int 4alide; / 2ui ou 3on l.an!iennet est 4alide /
/ ?aisir et 4alider le poste de tra4ail 9 /
do #
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
>'
printf(,5ntre6 un !ara!tere representant le poste de tra4ail 9 ,);
fflush(stdin);
/ lire et !on4ertir le !ara!tMre lu en BC`W?-WP5 /
poste = toupper()et!har());
if (poste I= .C. 77 poste I= .P. 77 poste I= .2. 77 poste I= .?.)
printf(,Poste in4alide, retape6 ?.;.P.0n0n,);
% while (poste I= .C. 77 poste I= .P. 77 poste I= .2. 77 poste I=
.?.);
/ ?aisir et 4alider l.an!iennet, entre 1 et N' ans /
do #
printf(,5ntre6 l.an!iennete entre /d et /d 9 ,, BE3FC3-, BCDFC3-);
s!anf(,/d,, 7an!iennete);
/ un Ton stAle de 4alidation 9 " !omprendre /
4alide = an!iennete *= BE3FC3- 77 an!iennete &= BCDFC3-;
if (I4alide)
printf(,P.an!iennete est en dehors de l.inter4alle0n0n,);
% while (I4alide);
printf(,0nPe poste saisi 9 /!, l.an!iennete lue 9 /d0n,,
poste, an!iennete);
/ affi!ha)e utilisant le if imTriqu 9
" titre d.e1er!i!e 9 faire une solution a4e! swit!h /
printf(,-et emploAe o!!upe le poste ,);
if (poste == .C.)
printf(,d.analAste,);
else if (poste == .P.)
printf(,de pro)rammeur,);
else if (poste == .2.)
printf(,d.operateur,);
else
printf(,de se!retaire,);
printf(,0n0nP.emploAe a /d annee(s) d.an!iennetee0n0n,, an!iennete);
return 0 ;
%
"xcution
5ntre6 un !ara!tere representant le poste de tra4ail 9 4
Poste in4alide, retape6 ?.;.P.
5ntre6 un !ara!tere representant le poste de tra4ail 9 a
5ntre6 l.an!iennete entre 1 et N'9 +R
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
>>
P.an!iennete est en dehors de l.inter4alle
5ntre6 l.an!iennete entre 1 et N'9 <'
P.an!iennete est en dehors de l.inter4alle
5ntre6 l.an!iennete entre 1 et N'9 1N
Pe poste saisi 9 C, l.an!iennete lue 9 1N
-et emploAe o!!upe le poste d.analAste
P.emploAe a 1N annee(s) d.an!iennete
"xemple 3
/ 8i!hier dowhileH.!
TroisiMme appli!ation de la Tou!le do ... while
8aire !ertains !al!uls
-e pro)ramme permet 9
1. de !al!uler et d.affi!her la somme = 1 $ N $ ... $ 100
N. de !omparer a4e! la formule 9 1 $ N $ ... $ n = n 1 (n$1) / N
H. d.utiliser !ertaines !ritures ra!!our!ies pour oTtenir la mUme
somme
/
Qin!lude &stdio.h*
int main()
#
!onst int PEBET5 = 100; / !al!ul de 1 $ N $ H $ ... $ 100 /
int somme = 0, / on initialise sou4ent une somme par 0 /
4aleur = 1; / premiMre 4aleur " a:outer dans la somme
/
/ a4e! do ... while /
do #
somme = somme $ 4aleur;
4aleur = 4aleur $ 1;
% while (4aleur &= PEBET5);
printf(,Pa somme 1 $ N $ ... $ /d = /d (a4e! do ... while)0n,, PEBET5,
somme);
printf(,0nPa meme somme a4e! la formule 90n,);
printf(, 1 $ N $ ... $ n = n 1 (n$1) / N 9 ,);
printf(,/d0n,, PEBET5 (PEBET5$1) / N );
printf(,0nPa meme somme a4e! l.e!riture ra!!our!ie 9 ,);
somme = 0;
4aleur = 1;
do #
somme $= 4aleur; / &==* somme = somme $ 4aleur ; /
4aleur$$; / dans !e !onte1te 9
4aleur = 4aleur $ 1;
ou 4aleur $= 1;
ou 4aleur$$; /
% while (4aleur &= PEBET5);
printf(,/d (meme 4aleur)0n,, somme);
return 0 ;
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
>L
%
"xcution
Pa somme 1 $ N $ ... $ 100 = '0'0 (a4e! do ... while)
Pa meme somme a4e! la formule 9
1 $ N $ ... $ n = n 1 (n$1) / N 9 '0'0
Pa meme somme a4e! l.e!riture ra!!our!ie 9 '0'0 (meme 4aleur)
!"emple :
/ Wn autre e1emple de do ... while
`eu de ,de4in, 9
P.ordinateur fournit un nomTre alatoire entre 1 et 1000.
P.usa)er du :eu a le droit " un ma1imum de 10 essais pour de4iner
!e nomTre !a!h.
2n le )uide dans le pro!essus de la de4inette en lui donnant des
messa)es pertinents.
/
Qin!lude &stdio.h*
Qin!lude &stdliT.h* / pour la fon!tion srand 9 rendre les 4aleurs plus
alatoirement possiTle si le paramMtre n.est pas
une !onstante. Vans l.e1emple, on prend le temps
!ourant !omme paramMtre /
Qin!lude &time.h* / pour le temps !ourant /
Qin!lude &!tApe.h* / pour la fon!tion de !on4ersion en ma:us!ule /
int main()
#
!onst int O2R35 = 1000, / 4aleur !a!he (" de4iner) entre 1 et
O2R35 /
BCDF5??CE? = 10; / nomTre ma1imum d.essais /
int aVe4iner, / le nomTre !a!h fourni par l.ordinateur " de4iner
/
nomTre, / le nomTre fourni par l.usa)er du :eu /
nT5ssai, / !ompteur du nomTre d.essais /
trou4e; / 2ui ou 3on on trou4e le nomTre !a!h /
!har reponse; / 2ui ou 3on l.usa)er 4eut !ontinuer /
srand(time(3WPP));
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
>+
do #
/ rand() retourne un nomTre alatoire *= 0
rand() / O2R35 donne un nomTre alatoire entre 0 et RRR
rand / O2R35 $ 1 donne un nomTre alatoire entre 1 et 1000 /

aVe4iner = rand() / O2R35 $ 1 ;
printf(,2n a un nomTre !a!he entre 1 et /d, 4ous a4e6 ,
,le droit " un ma1imum /d essais0n,, O2R35, BCDF5??CE?);
printf(,2n A 4aI0n,);
nT5ssai = 0;
do #
/ saisir le nomTre de4in par l.usa)er /
nT5ssai$$;
printf(,5ssai Q /Nd 9 quel est le nomTre = ,, nT5ssai);
s!anf(,/d,, 7nomTre);
/ quand le nomTre de4in est )al au nomTre !a!h, on a
trou4 /
trou4e = nomTre == aVe4iner;
if (trou4e)
printf(,Ora4o, 4ous a4e6 trou4e le nomTre !a!he /d apres /d
essai(s)0n,,
aVe4iner, nT5ssai);
else if (nomTre & aVe4iner)
printf(,/d est inferieur au nomTre !a!he0n,, nomTre);
else
printf(,/d est superieur au nomTre !a!he0n,, nomTre);
% while (Itrou4e 77 nT5ssai & BCDF5??CE?);
/ aprMs a4oir fait 10 essais et non trou4 /
if (Itrou4e)#
printf(,0nPe nomTre !a!he est 9 /d0n,, aVe4iner);
printf(,Oonne !han!e a la pro!haine fois0n,);
%
printf(,0n0n;oule6<4ous :ouer en!ore = (o/n) ,);
s!anf(, /!,, 7reponse);
% while (toupper(reponse) == .2.);
return 0 ;
%
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
>R
"xcution
2n a un nomTre !a!he entre 1 et 1000, 4ous a4e6 le droit " un ma1imum
de 10 essais
2n A 4aI
5ssai Q 1 9 quel est le nomTre = >00
>00 est superieur au nomTre !a!he
5ssai Q N 9 quel est le nomTre = '00
'00 est superieur au nomTre !a!he
5ssai Q H 9 quel est le nomTre = (00
(00 est superieur au nomTre !a!he
5ssai Q ( 9 quel est le nomTre = H00
H00 est superieur au nomTre !a!he
5ssai Q ' 9 quel est le nomTre = N00
N00 est inferieur au nomTre !a!he
5ssai Q > 9 quel est le nomTre = N10
N10 est inferieur au nomTre !a!he
5ssai Q L 9 quel est le nomTre = NN0
NN0 est inferieur au nomTre !a!he
5ssai Q + 9 quel est le nomTre = N(0
N(0 est inferieur au nomTre !a!he
5ssai Q R 9 quel est le nomTre = N>0
N>0 est superieur au nomTre !a!he
5ssai Q 10 9 quel est le nomTre = N'0
N'0 est superieur au nomTre !a!he
Pe nomTre !a!he est 9 N(1
Oonne !han!e a la pro!haine fois
;oule6<4ous :ouer en!ore = (o/n) o
2n a un nomTre !a!he entre 1 et 1000, 4ous a4e6 le droit " un ma1imum
10 essais
2n A 4aI
5ssai Q 1 9 quel est le nomTre = '00
'00 est superieur au nomTre !a!he
5ssai Q N 9 quel est le nomTre = N'0
N'0 est inferieur au nomTre !a!he
5ssai Q H 9 quel est le nomTre = H'0
H'0 est inferieur au nomTre !a!he
5ssai Q ( 9 quel est le nomTre = (N'
(N' est superieur au nomTre !a!he
5ssai Q ' 9 quel est le nomTre = HL0
HL0 est inferieur au nomTre !a!he
5ssai Q > 9 quel est le nomTre = (00
(00 est superieur au nomTre !a!he
5ssai Q L 9 quel est le nomTre = H+'
H+' est inferieur au nomTre !a!he
5ssai Q + 9 quel est le nomTre = HR0
HR0 est superieur au nomTre !a!he
5ssai Q R 9 quel est le nomTre = H+L
Ora4o, 4ous a4e6 trou4e le nomTre !a!he H+L apres R essai(s)
;oule6<4ous :ouer en!ore = (o/n) n
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
L0
() Simulation
"xemple 1
6oient > et ?, deu" )ariables dclares de t#pe int. 7uelle est la )aleur
affic-e l'cran par le segment de programme sui)ant@
int ^ = 1, : = 10;
do #
if (^ *= H)
:$$;
else
:<<;
^$$;
printf(,/Hd/Hd0n,, :, ^);
% while (: &10);
printf(,/'d0n,, : ^);
printf(,8E3,);
Solution !
(.n utilise le s#mbole A pour reprsenter une espace)
: K ^ K Cffi!ha)e " l.!ran
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
10 K 1 K
R K N K aaRaaN
+ K H K aa+aaH
R K ( K aaRaa(
10 K ' K a10aa'
K K aaa'0
K K 8E3
"xercice
6oient n et s, deu" )ariables dclares de t#pe int. 7uelle est la )aleur
affic-e l'cran par la section de programme sui)ant@
int s = 0, n = 'LN;
do #
s = s $ n / 10;
printf(,/Hd /Hd0n,, s, n);
n /= 10;
% while (n * 0);
printf(,8in,);
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
L1
B)Boucle while (condition) ... (Tant que ...)
1) Syntaxe
while (condition)
instruction;
L'instruction rpter peut tre simple (une seule action), structure (une
autre instruction de contrle) ou compose (c'est le cas le plus fruent).
"xemples pour illustrer la syntaxe !
int somme = 0, int n = 1;
/ instru!tion " rpter est !ompose /
while ( n &= 10 ) #
somme $= n;
n$$;
%
printf(,somme = 1 $ N $ H $ ... $ 10 = /d0n,, somme);
int n = ';
/ instru!tion " rpter est stru!ture /
while (n &= 10)
if (n == 10)
printf(,8in,);
else
n$$;
int n = ';
/ instru!tion " rpter est simple /
while (n &= 10)
n$$;
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
LN
condition
instruction
faux
vrai
2) Fonctionnement
$tape % : )rifier d'abord la condition
$tape & : si la condition est vrai alors
on effectue l'instruction rpter on re)ient l'tape %
sinon (la condition est fau"),
on uitte la boucle
Conclusion :
+)ec la boucle while B, il est possible, si la premi(re )aluation est fausse,
de ne >amais e"cuter lCinstruction rpter.
3) Domaines d'utilisation
.n utilise la boucle ,-ile ... uand on ne sait pas l'a)ance le nombre de fois
ue l'on doit rpter le mme traitement. .n l'utilise surtout pour la lecture
d'un fic-ier, la rec-erc-e d'un lment dans un tableau, les calculs
scientifiues.
)a lecture d'un %ic*ier
6upposons u'on dispose du fic-ier nomm Dentiers.dtaD ui contient un
entier par ligne, par e"emple :
>'
<1N
N+
HL
et! .
$crire un programme permettant de lire le fic-ier, d'affic-er son contenu, de
compter et d'affic-er le nombre d'entiers lus dont la )aleur est suprieure
%3.
Notes sur la lecture d%un &ichier te'te
V!laration 8EP5 aPire;
2u4erture du fi!hier en mode de le!ture aPire = fopen(,entiers.dta,,,r,);
Test pas fin de fi!hier while (Ifeof(aPire))
Pe!ture fs!anf(aPire,...);
8ermeture f!lose(aPire);
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
LH
Solution
Qin!lude &stdio.h*
4oid main()
#
!onst int O2R35 = 10;
int n, nT8ois = 0;
8EP5 aPire; / d!laration du fi!hier /
/ 2u4rir le fi!hier en mode de le!ture9 ,r, (de ,readin),) pour
lire /
aPire = fopen(,entiers.dta,, ,r,);
printf(,Pes entiers lus dans le fi!hier 90n0n,);
/ Pa le!ture, li)ne par li)ne /
while (Ifeof(aPire))# / Tant que pas fin du fi!hier /
fs!anf(aPire, ,/d0n,, 7n);
printf(,/Hd0n,, n);
if (n * O2R35)
nT8ois$$;
%
/ 8ermeture du fi!hier (f!lose) /
f!lose(aPire);
printf(,Pe nomTre d.entiers suprieurs " /d est 9 /d0n,, O2R35,
nT8ois);
%
"xcution
Pes entiers lus dans le fi!hier 9
N0
<1N
1'
<H0
NR
<'0
(0
Pe nomTre d.entiers suprieurs " 10 est 9 (
+uelques exercices de calcul !
"xercice 1
$crire un programme permettant de saisir et de )alider un entier positif
(e"emple ;&:). Le programme calcule et affic-e l'cran la somme des c-iffres
ui forment l'entier lu (ici, la somme des c-iffres est %& soit le rsultat de
l'addition de ; E & E :).
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
L(
Solution
Qin!lude &stdio.h*
4oid main()
#
int n, 4alide, som-hiffre;
/ saisir et 4alider n /
4alide = 0; / !e n.est pas 4alide /
while (I4alide)#
printf(,5ntre6 un entier superieur a 6ero 9 ,);
s!anf(,/d,, 7n);
4alide = n * 0;
if (I4alide)
printf(,;aleur ne)ati4e, retape6, ?.;.P.0n0n,);
%
printf(,P.entier lu est /d0n,, n);
printf(,Pa somme des !hiffres de /d est ,, n);
/ -al!ul de la somme des !hiffres /
som-hiffre = 0;
while (n)# / !.est<"<dire while (n I= 0), i!i while (n * 0) /
som-hiffre $= n / 10; / on a:oute le dernier !hiffre n /= 10;
/
%
printf(,/Hd0n,, som-hiffre);
%
"xcution
5ntre6 un entier superieur a 6ero 9 S'>L+
;aleur ne)ati4e, retape6, ?.;.P.
5ntre6 un entier superieur a 6ero 9 +LH>
P.entier lu est +LH>
Pa somme des !hiffres de +LH> est N(
"xercice 2
$crire un bloc d'instructions permettant de calculer et d'affic-er la somme
sui)ante :
999
1
7
1
5
1
3
1
1 somme + + + + + =
Solution
!onst int O2R351 = 1, O2R35N = RRR;
float denominateur = O2R351, somme = 0;
while (denominateur &= O2R35N)#
somme $= 1 / denominateur;
denominateur $= N;
%
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
L'
printf(,Pa somme demandee 9 /10.>f0n,, somme);
"xercice 3
$crire un bloc d'instructions utilisant la boucle ,-ile ui permet d'estimer la
)aleur de 5/ selon la formule sui)ante :
9999
1
9
1
7
1
5
1
3
1
4
PI
1 + + + =
+u proc-ain c-apitre, on re)ient sur la boucle ,-ile.
'utres exemples
"xemple 1
/ while1.!
-e pro)ramme permet de !al!uler et d.affi!her
la somme 1 $ 1/H $ 1/' $ 1/L $ . . . $ 1/(R
en utilisant la Tou!le while
51er!i!es 9
< refaire a4e! la Tou!le do ... while
< 4entuellement, quand 4ous aure6 4u la Tou!le for (4oir plus
loin),
re4ene6 i!i " !et e1emple pour le r!rire mais a4e! la Tou!le for
/
Qin!lude &stdio.h*
4oid main()
#
/ d!larer les deu1 Tornes et le pas entre les deu1 dnominateurs /
!onst int O2R351 = 1,
O2R35N = (R,
P5FPC? = N;
float somme, denominateur;
/ !al!ul de la somme 9 1 $ 1/H $ 1/' $ 1/L $ ... $ 1/(R /
somme = 0.0;
denominateur = O2R351;
while (denominateur &= O2R35N)#
somme $= 1 / denominateur;
denominateur $= P5FPC?;
%
printf(,Pa somme de 1 $ 1/N $ ... $ 1//d = /L.Hf0n,, O2R35N, somme);
%
"xcution
Pa somme de 1 $ 1/N $ ... $ 1/(R = N.'R1
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
L>
"xemple 2
/ whileN.!
-e pro)ramme permet de 9
< !al!uler la somme des !hiffres d.un nomTre
< !al!uler l.en4ers d.un nomTre
2n affi!he les informations n!essaires
51er!i!e 9 ?EBWP5] les instru!tions pour !omprendre
le fon!tionnement de la Tou!le while
/
Qin!lude &stdio.h*
4oid main()
#
int nomTre = 'LH,
som-hif,
en4ers;
printf(,Pa somme des !hiffres de /d ,, nomTre);
som-hif = 0;
while (nomTre * 0)#
som-hif $= nomTre / 10;
nomTre /= 10;
%
printf(,est /d0n0n,, som-hif);
nomTre = >NL;
printf(,Pe nomTre /d a l.en4ers ,, nomTre);
en4ers = 0;
while (nomTre * 0)#
en4ers = en4ers 10 $ nomTre / 10;
nomTre /= 10;
%
printf(,est /d0n0n,, en4ers);
%
"xcution
Pa somme des !hiffres de 'LH est 1'
Pe nomTre >NL a l.en4ers est LN>
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
LL
"xemple 3 ,exercice de simulation pour prparer l'intra)
/ 8i!hier whileH.!
51er!i!e de ?EBWPCTE23 9
?imule6 sur papier !e pro)ramme.

51!ute6 le pro)ramme pour !omparer a4e! 4os simulations
/
Qin!lude &stdio.h*
4oid main()
#
int a = 10, T = 10;
while (a == T)#
printf(,/Hd/Hd,, a, T);
if (T / N == 0)#
T = a H / R;
a = a < L;
% else
T = T ( a $ N);
%
printf(,0n/Hd/Hd0n,, a, T);
a = 10;
T = 10;
while (a = T)#
printf(,/Hd/Hd,, a, T);
if (T / N == 0)
T = T < 10;
else
T = T < ';
%
printf(,0n/Hd/Hd0n,, a, T);
%
"xcution
Rsultat de simulation " !omparer a4e! le 4Ytre
10 10 H H
H 1'
10 10
0 0
C) Boucle for ... :
1) Syntaxe
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
L+
&or ((e'pr. ! initialisation); (e'pr. condition de *oucle); (e'pr. de *oucle))
instruction
l'instruction rpter peut tre
simple, compose ou structure.
l'e"pr. % initialisation est une
e"pression d'initialisation*
l'e"pr. & condition de boucle est
une e"pression logiue, une
condition pour continuer la
rptition et celleFci est )alue
a)ant c-aue itration de la
boucle*
l'e"pr. 9 de boucle est une
e"pression d'incrmentation ou de
dcrmentation ui s'e"cute
c-aue itration de la boucle.
-llustration de la syntaxe !
for (i = 1; i &= 10; i$$)
printf(,OonsoirI0n,);
Cette boucle fait affic-er %3 lignes ui contient le message GonsoirH
2) Fonctionnement
/nitialiser la )ariable de contrle de la boucle.
1ant ue la condition pour continuer )aut )rai, faire :
e"cuter l'instruction rpter*
a>uster la )aleur de la )ariable de contrle (incrmenter ou
dcrmenter).
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
LR
3) Domaines d'utilisation
.n utilise la boucle for uand on sait l'a)ance le nombre de fois ue l'on
rp(te le mme traitement. C'est le cas des )aleurs conscuti)es entre deu"
bornes donnes. .n l'utilise aussi fruemment pour parcourir les indices
d'un tableau (les tableau" seront )us plus tard dans le cours).
"xemple 1
$crire des blocs d'instructions ui permettent d'affic-er :
> L + R 10 11 ... 1R N0
1R 1L 1' 1H 11 ... H 1
CO-V58GX....\]
6A.... Ta
Solution
Qin!lude &stdio.h*
4oid main()
#
int i;
!har lettre;
/ affi!her la premiMre li)ne 9 /
for (i = '; i &= N0; i$$)
printf(,/Hd,, i);
printf(,0n,);
/ affi!her la deu1iMme li)ne 9 /
for (i = 1R; i *= 1; i <= N)
printf(,/Hd,, i);
printf(,0n,);
/ affi!her la troisiMme li)ne 9 /
for (lettre = .C.; lettre &= .].; lettre$$)
printf(,/!,, lettre);
printf(,0n,);
/ affi!her la quatriMme li)ne 9 /
for (lettre = .6.; lettre *= .a.; lettre<<)
printf(,/!,, lettre);
printf(,0n,);
%
"xcution
> L + R 10 11 1N 1H 1( 1' 1> 1L 1+ 1R N0
1R 1L 1' 1H 11 R L ' H 1
CO-V58GXE`bPB32P@R?TW;cD\]
6A1w4utsrqponml^:ih)fed!Ta
"xemple 2
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
+0
$crire des blocs d'instructions ui permettent d'affic-er :
1NH('
NH('
H('
('
'
1NH('
N N
H H
( (
'(HN1
Solution
Qin!lude &stdio.h*
4oid main()
#
int li)ne, !olonne;
for (li)ne = 1; li)ne &= '; li)ne$$)#
for (!olonne = li)ne; !olonne &= '; !olonne$$)
printf(,/d,, !olonne);
printf(,0n,);
%
printf(,0n,);
for (!olonne = 1; !olonne &= '; !olonne$$)
printf(,/d,, !olonne);
printf(,0n,);
for (li)ne = N; li)ne &= (; li)ne$$)
printf(,/d/(d0n,, li)ne, li)ne);
for (!olonne = '; !olonne *= 1; !olonne<<)
printf(,/d,, !olonne);
printf(,0n,);
%
"xcution
1NH('
NH('
H('
('
'
1NH('
N N
H H
( (
'(HN1
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
+1
"xemple 3
$crire des blocs d'instructions ui permettent de :
calculer et affic-er la somme sui)ante :
s = ' $ > $ L $ ... $ (R
d'estimer la )aleur de 5/ sac-ant ue :
29999
1
9
1
7
1
5
1
3
1
4
PI
1 + + + =
Solution
Qin!lude &stdio.h*
4oid main()
#
!onst int O2R351 = ',
O2R35N = (R;
!onst int BCDFV532 = NRRRR, P5FPC? = N;
int somme, terme, denominateur;
float si)ne, pi?ur(;
/ -al!ul de s = ' $ > $ ... $ (R /
somme = 0;
for (terme = O2R351; terme &= O2R35N; terme$$)
somme $= terme;
printf(,0nsomme = /Hd0n,, somme);
/ 5stimation de PE sa!hant que PE/( = 1 < 1/H $ ... < 1/NRRRR /
pi?ur( = 0;
si)ne = $1.0;
for (denominateur = 1; denominateur &= BCDFV532; denominateur $=
P5FPC?)#
pi?ur( $= si)ne / denominateur;
si)ne = <si)ne;
%
printf(,0n;aleur estime de PE = /+.>f0n,, ( pi?ur();
%
"xcution
somme = 1N1'
;aleur estime de PE = H.1(1'HH
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
+N
"xemple &
Le nombre <&3 a 93 di)iseurs (%, &, 9, :, =, ;, 2, I, ..., 9;3, <&3). Un autre
nombre, suprieur <&3 mais infrieur %333, en a encore plus.
$crire un programme ui permet de dcou)rir ce nombre et d'affic-er ses
di)iseurs raison de = di)iseurs par ligne.
Solution
Qin!lude &stdio.h*
4oid main()
#
!onst int BE3E = LN0,
BCDE = 1000,
CFOCTTR5 = H0,
PCRFPEG35 = ';
int nomTre,
nTVi4,
^,
n;
/ e1aminer nomTre par nomTre entre LN1 et RRR /
for (nomTre = BE3E $ 1; nomTre & BCDE; nomTre$$)#
/ !ompter le nomTre de di4iseurs du nomTre e1amin /
nTVi4 = N; / 1 et le nomTre lui<mUme sont N di4iseurs /
for (^ = N; ^ &= nomTre / N; ^$$)
if (nomTre / ^ == 0)
nTVi4$$;
/ 4rifier si !.est un nomTre " d!ou4rir /
if (nTVi4 * CFOCTTR5)#
printf(,Pe nomTre /d a /d di4iseurs0n,, nomTre, nTVi4);
printf(,0n5n 4oi!i la liste90n,);
n = 0;
for (^ = 1; ^ &= nomTre; ^$$)
if (nomTre / ^ == 0)#
n$$;
printf(,/(d) /'d,, n, ^);
if (n / PCRFPEG35 == 0)
printf(,0n,);
%
%
% / fin du for /
% / fin du main /
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
+H
"xcution
Pe nomTre +(0 a HN di4iseurs
5n 4oi!i la liste9
1) 1 N) N H) H () ( ') '
>) > L) L +) + R) 10 10) 1N
11) 1( 1N) 1' 1H) N0 1() N1 1') N(
1>) N+ 1L) H0 1+) H' 1R) (0 N0) (N
N1) '> NN) >0 NH) L0 N() +( N') 10'
N>) 1N0 NL) 1(0 N+) 1>+ NR) N10 H0) N+0
H1) (N0 HN) +(0
"xemple (
$crire un programme ui permet de :
saisir et )alider le nombre total de pattes de poules ( & pattes) et de
)ac-es ( : pattes)*
affic-er toutes les solutions possibles du nombre de poules et de
)ac-es.
Solution
Qin!lude &stdio.h*
4oid main()
#
int nTPattes, nTPoules, nT;a!hes, 4alide;
do#
printf(,0n5ntre6 un nomTre pair pour le nomTre total de pattes
9 ,);
s!anf(,/d,, 7nTPattes);
4alide = nTPattes * 0 77 nTPattes / N == 0;
if (I4alide)
if (nTPattes &= 0)
printf(,Wn nomTre positif ?.;.P.,);
else
printf(,Wn nomTre pair ?.;.P.,);
% while (I4alide);
printf(,0n0n,);
nTPoules = nTPattes / N;
for (nT;a!hes = 0; nT;a!hes &= nTPattes / (; nT;a!hes$$)#
printf(,/Nd 4a!he(s) et /Nd poule(s)0n,, nT;a!hes, nTPoules);
nTPoules <= N;
%
%
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
+(
"xcution
5ntre6 un nomTre pair pour le nomTre total de pattes 9 S'N
Wn nomTre positif ?.;.P.
5ntre6 un nomTre pair pour le nomTre total de pattes 9 N1
Wn nomTre pair ?.;.P.
5ntre6 un nomTre pair pour le nomTre total de pattes 9 NN
0 4a!he(s) et 11 poule(s)
1 4a!he(s) et R poule(s)
N 4a!he(s) et L poule(s)
H 4a!he(s) et ' poule(s)
( 4a!he(s) et H poule(s)
' 4a!he(s) et 1 poule(s)
"xercice 1
$crire un bloc d'instructions permettant d'affic-er les &3 consonnes en
minuscules l'cran.
Solution
!har lettre ;
for (lettre = .a.; lettre &= .6.; lettre$$)
if (lettre I= .a. 77 lettre I= .e. 77 lettre I= .i. 77
lettre I= .o. 77 lettre I= .u. 77 lettre I= .A.)
printf(,/!,, lettre);
printf(,0n,);
"xercice 2
Jaliser une autre solution de l'e"ercice % en remplaKant le if par un s,itc-.
"xercice 3
$crire un bloc d'instructions permettant de calculer et d'affic-er la somme
sui)ante :
1000
1
3
1
2
1
1 somme + + + =
Solution
!onst int O2R351 = 1,
O2R35N = 1000;
int denominateur;
float somme = 0;
for (denominateur = O2R351; denominateur &= O2R35N; denominateur$$)
somme $= 1.0 / denominateur;
printf(,Pa somme demande 9 /10.>f0n,, somme);
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
+'
"xercice &
$crire un bloc d'instructions utilisant la boucle for ui permet d'estimer la )aleur
de 5/ selon la formule sui)ante :
9999
1
9
1
7
1
5
1
3
1
4
PI
1 + + + =
Solution
!onst int PEBET5 = RRRR;
float pi?ur( = 0.0, si)ne = 1.0;
int denominateur;
for ( denominateur = 1; denominateur &= PEBET5 / N; denominateur $= N)#
pi?ur( $= si)ne / denominateur;
si)ne = <si)ne;
%
printf(,Pa 4aleur estime de PE est /1N.>f ,,( pi?ur();
.n re)iendra sur la boucle DforD lorsu'on abordera la notion des tableau" un peu
plus loin dans le cours.
'utres exemples
"xemple 1
/ 8i!hier for1.! (1er e1emple de la Tou!le for)

1) affi!her 10 fois Oonsoir
traitement !ommun 9 affi!her Oonsoir
nomTre de fois !onnu " l.a4an!e 9 10 fois
=* Ton !andidat pour la Tou!le for

N) !al!uler $ affi!her la somme
s = H $ ' $ L $ ... $ '1
on !onnadt 9
< la 4aleur de dpart 9 H
< la 4aleur d.arri4e 9 '1
< le pas entre N 4aleurs est une !onstante
(i!i le pas 4aut N)
=* Ton !andidat pour la Tou!le for

R4ision 9 re!al!uler a4e! do ... while, while ....
/
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
+>
Qin!lude &stdio.h*
4oid main()
#
Qdefine 3OF82E? 10
Qdefine O2R351 H
Qdefine O2R35N '1
Qdefine P5FPC? N
int i, / pour la Tou!le for /
somme, / pour somme = H $ ' $ ... $ '1 /
4aleur; / somme des 4aleurs /
/ affi!her 10 fois Oonsoir /
for (i = 1; i &= 3OF82E?; i$$)
printf(,Oonsoir0n,);
printf(,0n0nPa somme de /d $ /d $ ... $ /d0n, , O2R351,
O2R351 $ P5FPC?,
O2R35N);
/ !al!uler s = H $ ' $ ... $ '1 a4e! for . . ./
somme = 0;
for (4aleur = O2R351; 4aleur &= O2R35N; 4aleur $= P5FPC?)
somme $= 4aleur;
printf(,C4e! la Tou!le for . . . . . . /d0n,, somme);
/ !al!uler s = H $ ' $ ... $ '1 a4e! do ... while . . ./
somme = 0;
4aleur = O2R351;
do#
somme $= 4aleur;
4aleur $= P5FPC?;
%while (4aleur &= O2R35N);
printf(,C4e! la Tou!le do ... while ... /d0n,, somme);
/ !al!uler s = H $ ' $ ... $ '1 a4e! while . . ./
somme = 0;
4aleur = O2R351;
while (4aleur &= O2R35N)#
somme $= 4aleur;
4aleur $= P5FPC?;
%
printf(,C4e! la Tou!le while .......... /d0n,, somme);
%
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
+L
"xcution
Oonsoir
Oonsoir
Oonsoir
Oonsoir
Oonsoir
Oonsoir
Oonsoir
Oonsoir
Oonsoir
Oonsoir
Pa somme de H $ ' $ ... $ '1
C4e! la Tou!le for . . . . . . >L'
C4e! la Tou!le do ... while ... >L'
C4e! la Tou!le while .......... >L'
"xemple 2
Qin!lude &stdio.h*
/ forN.!
Vans !et e1emple, on se !on!entre sur l.essentiel et on 4ous
laisse le soin de d!larer des !onstantes pour les Tornes,
les pas, i!i !e n.est pas l.oT:e!tif de l.e1emple.

Out 9 utiliser la Tou!le for
/
4oid main()
#
int n, ^ ;
!har ! ;
/ affi!her ' L R 11 1H 1' ... N' sur la mUme li)ne /
for (n = '; n &= N'; n$= N)
printf(,/Hd,, n);
printf(,0n,);
/ affi!her 100 R' R0 +' . . . L0 sur la mUme li)ne /
for (n = 100; n *= L0; n <= ')
printf(,/Hd,, n);
printf(,0n,);
/ affi!her les N> lettres BC`W?-WP5? sur la mUme li)ne /
for (! = .C.; ! &= .].; !$$)
printf(,/!,, !);
printf(,0n,);
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
++
/ affi!her les N0 !onsonnes BC`W?-WP5? sur la mUme li)ne /
for (! = .C.; ! &= .].; !$$)
swit!h (!)#
!ase .C.9
!ase .5.9
!ase .E.9
!ase .2.9
!ase .W.9
!ase .\.9 Trea^ ;
default 9 printf(,/!,, !);
%
printf(,0n,);
/ affi!her les di4iseurs de N0 /
printf(,0n0nPes di4iseurs de N0 sont 9 ,);
for (n = 1; n &= N0; n$$)
if (N0 / n == 0)
printf(,/Hd,, n);
printf(,0n,);
/ affi!her la taTle des multipli!ations de 1 " 10 9 /
printf(,0n0nPa taTle des multipli!ations de 1 a 10 90n,);
printf(, ,);
for (n = 1; n &= 10; n$$)
printf(,/(d,, n);
printf(,0n,);
for (n = 1 ; n &= 10 ; n$$)#
printf(,/(d,, n);
for (^ = 1; ^ &= 10; ^$$)
printf(,/(d,, n ^);
printf(,0n,);
%
%
"xcution
' L R 11 1H 1' 1L 1R N1 NH N'
100 R' R0 +' +0 L' L0
CO-V58GXE`bPB32P@R?TW;cD\]
O-V8GX`bPB3P@R?T;cD]
Pes di4iseurs de N0 sont 9 1 N ( ' 10 N0
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
+R
Pa taTle des multipli!ations de 1 a 10 9
1 N H ( ' > L + R 10
1 1 N H ( ' > L + R 10
N N ( > + 10 1N 1( 1> 1+ N0
H H > R 1N 1' 1+ N1 N( NL H0
( ( + 1N 1> N0 N( N+ HN H> (0
' ' 10 1' N0 N' H0 H' (0 (' '0
> > 1N 1+ N( H0 H> (N (+ '( >0
L L 1( N1 N+ H' (N (R '> >H L0
+ + 1> N( HN (0 (+ '> >( LN +0
R R 1+ NL H> (' '( >H LN +1 R0
10 10 N0 H0 (0 '0 >0 L0 +0 R0 100
"xemple 3
/ 8i!hier forH.! (HiMme e1emple de la Tou!le for)

1) dterminer et affi!her les di4iseurs de >

N) dterminer et affi!her les di4iseurs de LN0

51er!i!es de r4ision 9 refaire a4e!
a) do ... while
T) while ....
/
Qin!lude &stdio.h*
4oid main ()
#
!onst int 32BOR51 = >,
32BOR5N = LN0;
int nomTre, / le nomTre est<il un di4iseur de ... /
nTVi4i; / !ompteur du nomTre de di4iseurs /
/ !ompter le nomTre de di4iseurs de > /
nTVi4i = 0; / initialiser le !ompteur /
printf(,Pes di4iseurs de /d sont 90n,, 32BOR51);
/ on e1amine tous les nomTres entre 1 et > /
for (nomTre = 1; nomTre &= 32BOR51; nomTre$$)
if (32BOR51 / nomTre == 0)# / si nomTre est un di4iseur de
32BOR51 /
nTVi4i$$; / on in!rmente le !ompteur /
printf(,/Hd) /'d0n,, nTVi4i, nomTre);
%
/ affi!ha)e 9 /
printf(,Pe nomTre /d a /d di4iseurs0n,, 32BOR51, nTVi4i);
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
R0
/ !ompter le nomTre de di4iseurs de LN0 /
nTVi4i = 0; / initialiser le !ompteur /
printf(,0nPes di4iseurs de /d sont 90n,, 32BOR5N);
/ on e1amine tous les nomTres entre 1 et LN0 /
for (nomTre = 1; nomTre &= 32BOR5N; nomTre$$)
if (32BOR5N / nomTre == 0) / si nomTre est un di4iseur de
32BOR5N /
printf(,/Hd) /'d0n,, $$nTVi4i, nomTre);
/ affi!ha)e 9 /
printf(,Pe nomTre /d a /d di4iseurs0n0n,, 32BOR5N, nTVi4i);
%
"xcution
Pes di4iseurs de > sont 9
1) 1
N) N
H) H
() >
Pe nomTre > a ( di4iseurs
Pes di4iseurs de LN0 sont 9
1) 1
N) N
H) H
() (
') '
>) >
L) +
+) R
R) 10
10) 1N
11) 1'
1N) 1>
1H) 1+
1() N0
1') N(
1>) H0
1L) H>
1+) (0
1R) ('
N0) (+
N1) >0
NN) LN
NH) +0
N() R0
N') 1N0
N>) 1((
NL) 1+0
N+) N(0
NR) H>0
H0) LN0
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
R1
Pe nomTre LN0 a H0 di4iseurs
"xemple &
/ 8i!hier for(.! ((iMme e1emple de la Tou!le for)
,for imTriqu, 9 for dans un autre for
Cffi!her 9
1 N H ( '
N H ( '
H ( '
( '
'
?imule6 un Tlo! a4e! for imTriqu

51er!i!e 9 e!ri4e6 un Tlo! a4e! for imTriqu pour
affi!her 9
1
1 N
1 N H
1 N H (
1 N H ( '
/
Qin!lude &stdio.h*
4oid main ()
#
!onst int O2R35 = ';
int li)ne, !ol; / li)ne, !olonne /
/ simuler !et e1trait de !ode pour mieu1 assimiler /
/ de la li)ne 1 " la li)ne ' /
for (li)ne = 1; li)ne &= O2R35; li)ne$$)#
/ pour !olonne 4arie de numro de li)ne :usqu." ' /
for (!ol = li)ne; !ol &= O2R35; !ol$$)
printf(,/Nd,, !ol); / affi!her la 4aleur de la !olonne /
printf(,0n,);
%
printf(,0n0n,);
/ _ simuler pour !omprendre !et e1trait de !ode 9 /
/ de la li)ne 1 " la li)ne ' /
for (li)ne = 1; li)ne &= O2R35; li)ne$$)#
for (!ol = 1; !ol &= li)ne $ N; !ol$$)
swit!h (!ol)#
!ase 1 9
!ase H 9 printf(,/Hd,, !ol);
Trea^;
!ase > 9 printf(,/Hd,, li)ne$!ol);
Trea^;
default9 printf(,/Hd,, N!ol);
%
printf(,0n,);
%
%
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
RN
"xcution
1 N H ( '
N H ( '
H ( '
( '
'
1 ( H
1 ( H +
1 ( H + 10
1 ( H + 10 10
1 ( H + 10 11 1(
"xemple (
/ Cutre appli!ation de do ... while
4alider les (4aleurs des) donnes
/
Qin!lude &stdio.h*
Qin!lude &!tApe.h*
4oid main()
#
!onst int BE3FC3- = 1,
BCDFC3- = N';
!har poste; / parmi 9 C, P, 2 et ? analAste, pro)rammeur,
oprateur, se!rtaire /
int an!iennete; / nT. d.annes d.an!iennet /
int 4alide; / 2ui ou 3on l.an!iennet est 4alide /
/ ?aisir et 4alider le poste de tra4ail /
do#
printf(,5ntre6 un !ara!tere representant le poste de tra4ail 9 ,);
fflush(stdin);
/ lire et !on4ertir le !ara!tMre lu en BC`W?-WP5 /
poste = toupper()et!har());
if (poste I= .C. 77 poste I= .P. 77 poste I= .2. 77 poste I= .?.)
printf(,poste in4alide, retape6 ?.;.P.0n0n,);
%while (poste I= .C. 77 poste I= .P. 77 poste I= .2. 77 poste I=
.?.);
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
RH
/ ?aisir et 4alider l.an!iennete, entre 1 et N' ans /
do#
printf(,5ntre6 l.an!iennete entre /d et /d 9 ,, BE3FC3-, BCDFC3-);
s!anf(,/d,, 7an!iennete);
4alide = an!iennete *= BE3FC3- 77 an!iennete &= BCDFC3-;
if (I4alide)
printf(,P.an!iennete est en dehors de l.inter4alle0n0n,);
% while (I4alide);
printf(,0nPe poste saisi 9 /!, l.an!iennete lue 9 /d0n,,
poste, an!iennete);
/ affi!ha)e utilisant le if imTriqu 9 /
printf(,P.emploAe o!!upe un poste ,);
if (poste == .C.)
printf(,d.analAste ,);
else if (poste == .P.)
printf(,de pro)rammeur ,);
else if (poste == .2.)
printf(,d.operateur ,);
else
printf(,de se!retaire ,);
printf(,0n0nP.emploAe a /d annee(s) d.an!iennete0n0n,, an!iennete);
%
"xcution
5ntre6 un !ara!tere representant le poste de tra4ail 9 6
poste in4alide, retape6 ?.;.P.
5ntre6 un !ara!tere representant le poste de tra4ail 9 a
5ntre6 l.an!iennete entre 1 et N' 9 '>
P.an!iennete est en dehors de l.inter4alle
5ntre6 l.an!iennete entre 1 et N' 9 <L
P.an!iennete est en dehors de l.inter4alle
5ntre6 l.an!iennete entre 1 et N' 9 1N
Pe poste saisi 9 C, l.an!iennetee lue 9 1N
P.emploAe o!!upe un poste d.analAste
P.emploAe a 1N annee(s) d.an!iennetee
Chapitre 3 : Boucles de rptition
Prpar par Le Van N. pour IF !"!#
R(

You might also like