Algorithmique et Programmation I
Séance 5
Ça continue…
Année universitaire 2020/2021 – Semestre 1
1
Ça, on sait déjà
Calculer la moyenne d’un étudiant.
#include<stdio.h>
void main()
{
float Note1, Note2, Moyenne;
printf ("Donner la note 1: "); scanf ("%f", &Note1);
printf ("Donner la note 2: "); scanf ("%f", &Note2);
Moyenne = (Note1 0.8) + (Note2 0.2);
printf (“Moyenne de l’étudiant: %f", Moyenne);
}
2
Ça aussi on sait
Calculer la moyenne de 50 étudiants.
#include <stdio.h>
void main ()
{
float Note1, Note2, Moyenne;
int i;
for (i = 1; i<=50; i++)
{
printf ("Donner la note 1: "); scanf ("%f", &Note1);
printf ("Donner la note 2: "); scanf ("%f", &Note2);
Moyenne = (Note1 0.8) + (Note2 0.2);
printf (“Moyenne de l’étudiant: %f", Moyenne);
}
}
3
Et ça ?
Comment calculer la moyenne de plusieurs étudiants sachant
qu’on n’en connaît pas le nombre ?
4
La structure while (tant que)
Tant qu’une condition est vérifiée, répéter un bloc d’instructions.
Expression logique (booléenne)
simple ou combinée. Cette expression
est testée avant chaque itération.
while (expression)
{
…
suite d'instructions
…
}
bloc d’instructions exécuté à chaque
itération si l’expression est vraie.
Si la boucle ne comporte qu’une instruction, les accolades sont superflues.
5
La structure while
Tant que l'expression fournit une valeur différente de zéro (vrai),
le bloc d'instructions est exécuté.
Si l'expression fournit la valeur zéro (faux), l'exécution continue
avec l'instruction qui suit le bloc d'instructions.
Pour que le traitement itératif se termine, l’une des instructions
doit contribuer à rendre la condition (expression) fausse
(sa valeur devient zéro).
Le bloc d'instructions est exécuté zéro ou plusieurs fois.
6
Exemple
Calculer la moyenne de plusieurs étudiants.
#include <stdio.h>
void main()
{
float Note1, Note2, Moyenne;
char Continuer = 'O';
while (Continuer == 'O')
{
Publicité
printf ("Donner la note 1: "); scanf ("%f", &Note1);
printf ("Donner la note 2: "); scanf ("%f", &Note2);
Moyenne = (Note1 0.8) + (Note2 0.2);
printf (“Moyenne de l’étudiant: %f", Moyenne);
printf ("Voulez-vous calculer la moyenne d’un autre étudiant (O/N)");
scanf ("%c", &Continuer);
}
}
7
Que fait ce programme ?
#include <stdio.h>
void main ()
{
int n = 2;
while ( (n%2) == 0) && (n != 0) )
{
printf (“Donner un entier : “);
scanf (“%d”, &n);
}
}
On ne veut accepter que les entiers pairs et non nuls.
On sort de la boucle quand l’utilisateur saisit un entier impair ou nul.
8
On préfèrera . . .
#include <stdio.h>
void main ()
{
int n, stop = 0;
while (stop == 0)
{
printf (“Donner un entier: “);
scanf (“%d”, &n);
if ((n%2) != 0) || (n == 0))
stop = 1;
}
}
9
Usage général
Si on ne connaît pas à
l’avance le nombre de fois
que le traitement sera répété
Si on connaît à l’avance le
nombre de fois que le
traitement sera répété
Boucle while
Boucle for
En fait, la boucle while peut également être utilisée
alors qu’on connaît à l’avance le nombre d’itérations !
10
Exemple
(1)
Affichage du mot “Bonjour” 5 fois.
#include<stdio.h>
void main()
{
int i = 0;
while (i < 5)
{
#include<stdio.h>
void main()
{
int i = 1;
while (i <= 5)
{
printf (“Bonjour \n”);
i++;
printf(“Bonjour \n”);
i++;
}
}
}
Publicité
}
11
Exemple
(2)
Affichage des nombres entiers de 1 à 10.
#include <stdio.h>
void main()
{
int i = 1;
while (i <= 10)
{
printf (“%d \n”, i);
i++;
}
}
12
for / while
En C, les structures for et while sont équivalentes.
for (initialisation; condition; compteur)
{
Bloc d’instructions
}
initialisation;
while (condition)
{
Bloc d’instructions
compteur;
}
Le mieux est de choisir le type
de boucle en fonction de chaque
cas concret.
13
Exemple
Affichage du mot “Bonjour” 5 fois.
#include<stdio.h>
void main()
{
int i = 0;
while (i < 5)
{
printf(“Bonjour \n”);
i++;
}
}
}
#include<stdio.h>
void main()
{
int i;
for (i=0 ; i < 5; i++)
printf(“Bonjour \n”);
14
Devinons …
int i = 1;
while (i == 1)
Boucle infinie
printf (“Que pensez vous de ma boucle ?”);
Boucle infinie
for ( ; ;)
printf (“Et là, que pensez vous de ma boucle ?”);
for ( ; 8 ;)
printf (“Et celle-ci ?”);
Boucle infinie
15
Attention !
i = 1;
while (i < 3)
{
;
i++;
}
Publicité
Attention aux points
virgules excessifs
Le programme suivant est syntaxiquement correct,
mais n’en finira pas de boucler !
16
Qu’en pensez-vous ?
#include<stdio.h>
void main()
{
int i = 1;
while (i < 5)
printf(“%d \n”, i);
i++;
}
Boucle infinie
Ce programme n’affiche que la valeur 1, sans jamais s’arrêter.
17
Comment le corriger?
#include<stdio.h>
void main()
{
int i = 1;
while (i < 5)
{
printf (“%d \n”, i);
i++;
}
}
Attention aux
Accolades !!
Il affiche maintenant les valeurs 1, 2, 3, 4
18
La structure do..while (répéter…tant que)
do {
}
bloc d'instructions
while (expression) ;
Attention c’est différent de répéter..jusqu’à
La structure do..while ressemble à la structure while, sauf que…
La structure while évalue la condition avant d’exécuter le bloc
d’instructions, alors que la structure do..while évalue la condition
après avoir exécuté le bloc d’instructions (à la fin de l’itération).
Avec la structure do..while le bloc d’instructions
est exécutéau moins une fois.
19
Exemple
#include<stdio.h>
void main()
{
int x = 5;
do
{
printf(“La valeur de x est %d”, x );
x--;
}
while (x > 0);
}
20
L’équivalent en while
#include<stdio.h>
void main()
{
int x = 5;
while (x > 0)
{
printf(“La valeur de x est %d”, x );
x--;
}
}
21
while ou do..while ?
Publicité
(1)
int i;
printf(“Combien il vous reste de séances de cours aujourd’hui?” );
scanf(“%d”, &i);
do
{
printf(“Il reste %d séances ”, i );
i--;
}
while (i > 0);
while
int i;
printf(“Combien il vous reste de séances de cours aujourd’hui?” );
scanf(“%d”, &i);
while (i > 0)
{
printf(“Il reste %d séances ”, i );
i--;
}
22
while ou do..while
(2)
char c;
do
{
printf(“Entrer un caractère (s pour stop)” );
scanf(“%c”, &c);
}
while (c !=‘s’);
printf(“Entrer un caractère (s pour stop)” );
scanf(“%c”, &c);
while (c !=‘s’)
{
printf(“Entrer un caractère (s pour stop)” );
scanf(“%c”, &c);
}
do..while
23
while ou do..while
int n, i=0;
printf(“Donner un entier: “); scanf(“%d”, &n);
while ( (n%2) != 0 )
{
printf(“L’entier impair est %d: “, n);
printf(“Donner un entier: “); scanf(“%d”, &n);
i++;
}
printf(“Le nombre d’entiers impairs saisis est %d”, i);
}
int n, i=0;
do
{
printf(“Donner un entier: “); scanf(“%d”, &n);
printf(“L’entier impair est %d: “, n);
i++;
(3)
while
}
while ( (n%2) != 0);
printf(“Le nombre d’entiers impairs saisis est %d”, i);
}
24
Nos outils de travail
Les instructions simples (saisie, affichage, affectation,…).
Les structures conditionnelles (if, switch).
Les structures itératives (for, while, do..while).
Bienvenue au monde
de la programmation
25