Sie sind auf Seite 1von 22

Algorithmique et Programmation

Le langage C
Abdellatif HAIR
Universit Sultan Moulay Slimane
Facult des Sciences et Techniques
B.P. 523, Bni-Mellal, MAROC

5. LES INSTRUCTIONS ITERATIVES


-STRUCTURES DE BOUCLESLES STRUCTURES WHILE
LES STRUCTURES FOR

1. LES STRUCTURES WHILE

Il y a deux utilisations possibles du while


La premire utilisation value une condition puis excute
l'instruction (simple ou compose) qui suit si la condition est
vraie
Cette boucle continue tant que la condition reste vraie

while (condition)
instruction ;

utilise une
instruction simple

while (condition)
{
instruction 1 ;

instruction n ;
};
utilise une
instruction compose
3

1. LES STRUCTURES WHILE


Organigramme de la boucle While..
Le bloc dinstructions est excut de faon rptitif
aussi longtemps que la condition est vraie.
La condition est value avant chaque excution de
bloc dinstructions.

Vraie

Condition

Fausse

Bloc dinstructions

La suite du programme
4

1. LES STRUCTURES WHILE

Exemple:

Calculer

la

somme

de

premiers

entiers:

Somme=1+2+3+.+N
L'algorithme s'crit donc :
-----------------------------------------------------entier i, N, Somme
crire "S.V.P. donner la valeur de N : "
lire N
i0
Somme 0
tant que (i < N +1) faire
Somme Somme + i
ii+1
ftant
crire "La somme de N premiers termes est : Somme"
-----------------------------------------------------5

1. LES STRUCTURES WHILE


#include<stdio.h>
int i, N, Somme ;
main()
{
printf("S.V.P. donner lentier N : ") ; scanf("%d", &N);
i=0; Somme=0;
while (i < N+1)
{
Somme=Somme+i ;
i = i+1;
};
printf("la somme de %d premiers entiers= %d \n", N, Somme);
system("PAUSE");
}
6

1. LES STRUCTURES WHILE


Exercice :
i=0;

1
2
fin

while(i<2)
{ i++;
printf("%d\n",i);
}
printf("fin");
---------------------------------------------i=2;
while (i<2)
{ i++;
printf("%d\n",i);
}
printf("fin");

fin

1. LES STRUCTURES WHILE

Il y a deux utilisations possibles de while


La seconde utilisation excute tout d'abord l'instruction
(simple ou compose). Puis la condition est value et, tant
qu'elle reste vraie, l'instruction est excute nouveau.

do
instruction ;
while (condition) ;

utilise une
instruction simple

do {
instruction 1 ;

instruction n ;
};
while (condition) ;

utilise une
instruction compose

1. LES STRUCTURES WHILE


Organigramme de la boucle do while..
Cette instruction permet de rpter une instruction
(ou un bloc) tant qu'une condition est vraie.

Bloc dinstructions

Vraie

Condition

Fausse

La suite du programme

1. LES STRUCTURES WHILE


Exemple : tant donns deux nombres entiers m et n positifs ou
nuls, on demande d'en calculer le PGCD (mthode dEuclide).
L'algorithme d'Euclide permet de rsoudre ce problme en prenant
d'abord le reste de la division de m par n, puis le reste de la
division de n par ce premier reste, etc jusqu' ce qu'on trouve un
reste nul. Le dernier diviseur utilis est le PGCD de m et n.
Pour m=1386 et n=140, on a successivement:
1386 = 140 * 9 + 126
140 = 126 * 1 + 14
126 = 14 * 9 + 0
le PGCD de 1386 et 126 est bien 14.
10

1. LES STRUCTURES WHILE


L'algorithme s'crit donc :
------------------------------------------------entier m, n, a, b, r, PGDC
lire m, n
am
bn
faire
r a modulo b
ab
br
tant que (b! = 0)
PGDC a
crire "Le PGCD de",m,"et",n,"est",PGDC
------------------------------------------------11

1. LES STRUCTURES WHILE


#include <stdio.h>
int m, n, a, b, r, PGDC ;
main()
{
printf("Introduisez la valeur de l'entier n: "); scanf("%d", &n);
printf("Introduisez la valeur de l'entier m: "); scanf("%d", &m);
a= n;
b= m;
do

/* Instruction compose

r = a % b;
a = b;
b = r;

{ } */

}
while (b != 0);
/* expression logique aussi est gale ! (b==0) */
PGDC=a;
printf(" PGDC de %d et %d est %d \n", n, m, PGDC);
system("PAUSE");
}
12

1. LES STRUCTURES WHILE


Exercice :
i=0;
do
{
i++;
printf("%d\n",i);
}
while (i<2) ;
printf("fin");

1
2
fin

---------------------------------------------i=2;
do
3
{
i++;
fin
printf("%d\n",i);
}
while (i<2) ;
printf("fin");
13

1. LES STRUCTURES WHILE

Il y a deux utilisations possibles du while

14

2. LES STRUCTURES FOR


Le mot-cl for permet lui aussi d'effectuer des boucles
Il pourrait ne pas exister puisqu'on peut le simuler avec
while
Syntaxe
for([<instructions initiales>]; [<condition>]; [<instructions>])
[<corps de la boucle>];
corps de la boucle est rpt tant que la condition est

vraie (expression non nulle)


Avant la premire itration, instructions initiales est
value; En gnral elle sert initialiser les variables de la
boucle
Aprs chaque itration de la boucle, instructions est
value. En gnral elle sert incrmenter le compteur de
la boucle
15

2. LES STRUCTURES FOR

quivalent :

for ([<instructions initiales>]; [<condition>]; [<instructions>])


[<corps de la boucle>];

<instructions initiales> ;
while <condition>
{
<corps de la boucle>;
<instructions>;
}
16

2. LES STRUCTURES FOR

Organigramme de la boucle for


Instructions
initiales

Condition

Fausse

Vraie
Bloc dinstructions

instructions
La suite du
programme
17

2. LES STRUCTURES FOR


Exemple

Calculer
Somme=1+2+3+.+N

la

somme

de

premiers

entiers.

#include<stdio.h>
int i, N, Somme ;
main()
{
printf("S.V.P. donner lentier N : ") ; scanf("%d", &N);
Somme=0;
for (i=0; i<=N ; i++)
for (i=0, somme=0; i<=N ; i++)
{
Somme+=i ;
Somme+=i ;
}
printf("la somme de %d premiers entiers= %d \n", N, Somme) ;
system("PAUSE");
}
18

2. LES STRUCTURES FOR


Exemple : afficher les nombres impairs qui sont <= N
#include<stdio.h>
int i, N ;
main()
{
printf("S.V.P. donner lentier N : ") ; scanf("%d", &N);
for (i=0; i<=N ; i++)
{
if ((i %2) ==1)
printf(" %d est un nombre impair \n", i) ;
};
system("PAUSE");
}

19

2. LES STRUCTURES FOR


Exercice :Afficher le code ASCII du caractre A Z
#include <stdio.h>
main ()
{
char c ; /* Dclaration et initialisation du caractre A */
for(c='A';c<='Z';c++)
{
printf ("Caractre = %c code ASCII = %d \n",c,c);
/* Affichage du caractre et de son code ASCII*/
}
system("PAUSE");
}

20

2. LES STRUCTURES FOR


Exercice Soit lexpression suivante (i! signifie le factoriel de i) :

1! 2! 3!
(n 1)! n!
E (n) ............

n n n
n
n
Ecrire un programme C qui permet de trouver les entiers n tel que E(n)
est compris entre les deux constantes (N1=100 et N2=10000) et
afficher chaque fois la valeur de E(n) associe
#include<stdio.h>
int i, N, fact;
main()
{
int N1=100, N2=10000, cherche, n, m, i;
float s, fact;

21

2. LES STRUCTURES FOR


cherche=1;
n=1;
while (cherche!=0)
{
s=0;
for (m=1;m<=n;m++)
{
for (i=1,fact=1; i<=m;i++) fact=i*fact; /*factoriel de m*/
s=s+(fact/n); /*lajout de m! /n */
};
if ((s>=N1) && (s<=N2)) printf("n = %d et E= %f\n",n,s);
if (s>N2) cherche=0;
n=n+1;
};
system("PAUSE");
}
22

Das könnte Ihnen auch gefallen