Rappel Instruction de sélection Si (if) SI-Sinon (if-else) Si-Sinon si (if-else if...) Les abréviations du C x++ versus ++x +=, *=, /=, %=,... Instruction itérative Tant que Équivalent en C while do while
Déclaration de variable: Type id [= valeur]; Format de lecture et d écriture: %d, %f, %c,
Vrai ou faux? a < A 1 == 1! 0 5 == 1 1 == 49 5 < 0 < 1-1 a=1 (5 < 3) (2 < 6) 0 FAUX FAUX VRAI FAUX VRAI VRAI VRAI VRAI VRAI FAUX
#include <stdio.h> #include <stdlib.h> #define MAXHEURES 40.0 #define MAJORATION 1.5 /*Programme de calcul de salaire brut */ int main(void) { float taux; //sert a la saisie du taux horaire float nb_heures; //sert a la saisie i du nombre d heures float salaire; //sert au calcul du salaire //sollicitation du taux horaire printf( \n\nentrez le taux horaire svp : ); scanf( %f,&taux); //sollicitation du nombre d heures travaillees printf( \n\nentrez le nombre d heures travaillees : ); scanf( %f,&nb_heures); //calcul et affichage du salaire if(nb_heures<=maxheures) salaire = taux * nb_heures; else salaire = MAXHEURES * taux + (nb_heures MAXHEURES) * taux * MAJORATION; printf( \n\nvotre \ salaire brut est : %f,salaire);, } return EXIT_SUCCESS;
#include <stdio.h> #include <stdlib.h> #define MAXHEURES 40.0 #define MAJORATION 1.5 /*Programme de calcul de salaire brut */ int main(void) { float taux; //sert a la saisie du taux horaire float nb_heures; //sert a la saisie i du nombre d heures float salaire; //sert au calcul du salaire //sollicitation du taux horaire printf( \n\nentrez le taux horaire svp : ); scanf( %f,&taux); //sollicitation du nombre d heures travaillees printf( \n\nentrez le nombre d heures travaillees : ); scanf( %f,&nb_heures); //calcul et affichage du salaire if(nb_heures<=maxheures) salaire = taux * nb_heures; else salaire = MAXHEURES * taux + (nb_heures MAXHEURES) * taux * MAJORATION; printf( \n\nvotre \ salaire brut est : %f,salaire);, } return EXIT_SUCCESS;
Chaque instruction d affectation courante a une abréviation X = X + 3 X+= 3 X = X 3 X -= 3 X = X * 4 X *= 4 X = X % 2 X %= 2 X = X / 5 X /= 5 X =X + 1 X = X 1 X++ X--
Différence entre x++ et ++x X++ : post incrémentation L expression entière est évaluée avant l incrémentation ++X : pré incrémentation L incrémentation se fait avant l évaluation de l expression Exemple 1 : int tour = 1; int tour = 1; printf(" %d ", tour); printf(" %d ", tour++); tour = tour + 1 Affiche 1 et incrémente ensuite Exemple 2 : int tour = 1; printf( tf(" %d ", ++tour); Incrémente et affiche 2 ensuite int tour = 1; tour = tour + 1 printf(" %d ", tour);
Répétition ou boucle Instruction qui permet de répéter du code à exécuter selon l évaluation d une condition Tant que: Cette instruction permet de répéter les tâches à exécuter si l évaluation d une expression donne vraie
Forme générale : Tant que expression booléenne tâches à répéter tant que l expression est vraie fin Exemple : Tant que il vente fort je fais de la planche à voile fin
En C while (expression){ instructions à répéter tant que l expression est différente de zéro } Les parenthèses sont obligatoires Les accolades délimitent ce qu on appelle un bloc de code Le code d un bloc doit être indenté (décalé) vers la droite Si les accolades sont manquantes, seule la première instruction est calculée comme faisant partie du while
Exemple: int x = 5; while (x > 0){ } printf("%d ",x); x--; X=5 X > 0 VRAI printf( %d,x--); FAUX Condition n d entrée: x >0 Condition d arrêt: x <=0 Résultat de la boucle: 5 4 3 2 1
Mise en garde Il faut toujours au moins une instruction à l intérieur de la boucle qui permette de converger vers la condition d arrêt de la boucle sinon ce sera une boucle infinie Exemple: int x = 5; while (x > 0){ printf("%d ",x); x++; } Résultat de la boucle: 5 6 7 8 9 10 11
Exemple 2: int x = 5; while (x > 0) printf( tf("%d ",x); x--; Boucle infinie : seulement la première instruction fait partie de la boucle Pas de convergence vers la condition d arrêt
Exercice : Dites ce que vaudront les valeurs de x, y et z après l exécution de cette boucle int x = 5; int y = 3; int z = 3; while (y){ x %= z++; y = y - 1; } Solution: x = 2; y = 0; z = 6
Écrivez un programme qui saisit un nombre entier et qui affiche tous les nombres de 1 jusqu à la valeur entrée. #include <stdio.h> #include <stdlib.h> int main(void){ int nombre; //nombre à saisir int tour; //sert à compter les tours de boucle printf(«entrez un nombre svp :»); scanf («%d», &nombre); } //affiche toutes les valeurs //prises par la variable TOUR tour = 1; while (tour <= nombre ){ printf("%d ",tour); tour++; } return EXIT_SUCCESS; initialisation Analyse de la condition d arrêt de la boucle Convergence vers la condition d arrêt
Que se passe t il si le nombre entré est négatif? #include <stdio.h> #include <stdlib.h> int main(void){ int nombre; //nombre à saisir int tour; //sert à compter les tours de boucle printf(«entrez un nombre svp :»); scanf («%d», &nombre); } //affiche toutes les valeurs //prises par la variable TOUR tour = 1; while (tour <= nombre ){ printf("%d ",tour); tour++; } return EXIT_SUCCESS; initialisation Analyse de la condition d arrêt de la boucle Convergence vers la condition d arrêt?
Il n y a pas de restriction sur ce que peut contenir un bloc d instructions Affectation, affichage, lecture, opérations if, if-else, if-else if while En d autres termes on peut imbriquer des instructions de sélection et d itération à l intérieur d autres instructions de sélection et/ou d itération...
Validation d un nombre entré qui doit être entre 1 et 10 #include <stdio.h> #include <stdlib.h> #define MIN 1 #define MAX 10 int main(void){ int nombre; //première sollicitation du nombre printf("\n\n Entrez un nombre entre %d et %d svp : ",MIN,MAX); scanf ("%d", &nombre); //tant que le nombre est invalide, on avise et on redemande Conditions d entrée multiples } while(nombre < MIN nombre > MAX){ if(nombre < MIN) printf("\n\n Désolé, mais le nombre doit être plus grand que %d",min); else printf("\n\n Désolé, mais le nombre doit être inférieur ou égal à %d",max); printf("\n\n Entrez un nombre entre %d et %d svp : ",MIN,MAX); scanf ("%d", &nombre); } printf(" \n\nvotre nombre est valide "); return EXIT_SUCCESS; Structure if imbriquée Convergence vers la condition d arrêt
C est une mauvaise pratique de terminer une boucle autrement que par la condition d arrêt.
while do do while
while La condition de répétition est évaluée au début du bloc Si la condition est fausse, le bloc n est pas exécuté do while La condition de répétition est évaluée à la fin du bloc Le bloc est exécuté au moins une fois même si la condition est fausse Forme générale : do{ instructions à répéter tant que l expression est différente de zéro } while (expression);
Validation d un nombre entré qui doit être entre 1 et 10 #include <stdio.h> #include <stdlib.h> int main(void){ int nombre; do{ printf(" Entrez un nombre entre 1 et 10 svp : "); scanf ("%d", &nombre); if(nombre < 1 nombre > 10) printf( tf(" Votre nombre est invalide "); }while(nombre < 1 nombre > 10); printf(" Votre nombre est valide "); } return EXIT_SUCCESS;