Structures de contrôle Gestion du point d’exécution
Qu’est-ce que est géré par le programme? Données Espace des données Affectation Lecture Point d’exécution Structures de contrôle Instructions exécutables B.Shishedjiev -Structures du contrôle
Structures de contrôle Structures de base Chaîne (suite) Alternative (Branchement) Répétitive (boucle) Choix début Algorithme Action fin B.Shishedjiev -Structures du contrôle
B.Shishedjiev -Structures du contrôle Chaîne Définition { Instruction 1 Instruction 2 Instruction 3 ... Instruction n } Action 1 Action 2 Action 3 ... Action n B.Shishedjiev -Structures du contrôle
B.Shishedjiev -Structures du contrôle Chaîne Exemple – échanger le contenu des variables x et y 2 y x 5 4 t 1 3 début t=x #include <stdio.h> void main(void){ int x,y,t; /*initialisation de x et y*/ t = x; x = y; y = t; } x=y y=t fin B.Shishedjiev -Structures du contrôle
B.Shishedjiev -Structures du contrôle Alternative Définition if (condition 1) Traduction de Action 1 else Action 2 vrai faux Condition Action1 Action2 B.Shishedjiev -Structures du contrôle
B.Shishedjiev -Structures du contrôle Alternative Exemple – Trouver le maximum des 2 nombres début vrai faux a > b #include <stdio.h> void main(void){ int a,b,max; /*initialisation de a et b*/ if (a > b) max = a; else max = b; } max = a max =b fin B.Shishedjiev -Structures du contrôle
B.Shishedjiev -Structures du contrôle Alternative Exemple – Echanger le contenu de la variable c avec le contenu de cette variable (a ou b) qui a plus grande valeur début vrai a > b faux #include <stdio.h> void main(void){ int a,b,max; /*initialisation de a, b et c */ if (a > b) { t = a; a = c; c = t; }else { t = b; b = c; c = t; } t = a t =b a=c b=c c=t c=t fin B.Shishedjiev -Structures du contrôle
B.Shishedjiev -Structures du contrôle Alternative Alternative simple vrai faux Condi- tion if (condition) traduction de Action 1 Action 1 B.Shishedjiev -Structures du contrôle
B.Shishedjiev -Structures du contrôle Alternative Exemple – Trouver la valeur absolue de a début vrai faux a < 0 #include <stdio.h> void main(void){ int a; /*initialisation de a */ if (a < 0) a=-a; } a = -a fin B.Shishedjiev -Structures du contrôle
B.Shishedjiev -Structures du contrôle Alternative ambigu if (condition 1) if (condition2) Action 1 else Action 2 faux vrai Condi- tion1 vrai faux Condi- tion2 Action 1 Action 2 faux vrai Condi- tion1 if (condition 1) { if (condition2) Action 1 }else Action 2 vrai faux Condi- tion2 Action 2 Action 1 B.Shishedjiev -Structures du contrôle
B.Shishedjiev -Structures du contrôle Les répétitives Actions répétées Sommer les premiers 10 nombres entiers début début début s =0 s =0 i=1 s = 0 i =1 s = s + 1 faux s = s + i i = i+1 i <= 10 s = s+2 s = s+i i=i+1 vrai s = s + i i = i+1 s = s+3 s = s+i i=i+1 ... ... fin s = s + 10 s = s+i i=i+1 fin fin B.Shishedjiev -Structures du contrôle
B.Shishedjiev -Structures du contrôle Répétitive Tant-que – la boucle fondamentale vrai faux Condi- tion while (condition) traduction de Action Action(corps) B.Shishedjiev -Structures du contrôle
B.Shishedjiev -Structures du contrôle Tant-que exemple Compter les nombres entiers lus jusq’au on lit -100 début Initialiser c = 0 #include <stdio.h> void main(void){ int n,c; c = 0; //initialisation scanf ("%d",&n); while (n !=-100) { c++; } printf("le nombre est : %d\n",c); Lire 1-er nombre en n Compter vrai faux n!=-100 c = c + 1 Lire n Afficher c fin B.Shishedjiev -Structures du contrôle
B.Shishedjiev -Structures du contrôle La boucle pour L’instruction for expr1 for (expr1;expr2;expr3) instruction non expr2 oui instruction expr3 B.Shishedjiev -Structures du contrôle
B.Shishedjiev -Structures du contrôle Exemple for #include <stdio.h> void main(void){ int m,n,s,i; printf("Tapez deux nombres:"); scanf("%d %d", &m,&n); s = 0; i= m; while (i<=n) { s += i; i++; } printf("la somme est : %d\n", s); Sommer tous les entiers dans l’intervalle [M,N] début Lire m,n Initialiser s = 0 i = m vrai faux i<=n #include <stdio.h> void main(void){ int m,n,s=0,i; printf("Tapez deux nombres:"); scanf("%d %d", &m,&n); for (i= m;i<=n;i++) { s += i; } printf("la somme est : %d\n", s); } s = s + i i = i +1 Afficher s fin B.Shishedjiev -Structures du contrôle
Répétitive avec post condition Définition do{traduction de Action(condition) } while (condition) Action(corps) Condi- tion oui non B.Shishedjiev -Structures du contrôle
B.Shishedjiev -Structures du contrôle Exemple Saisie d’un nombre qui doit être dans un intervalle #include <stdio.h> #define M 10 #define N 20 void main(void){ int x,y,d; do { printf ("Entrez un nombre entre %d et %d: ",M,N); y = scanf("%d",&x); if (y!=1) getchar(); }while (y !=1 || x < M || x > N); printf ("\nLa valeur entrée est %d\n",x); } B.Shishedjiev -Structures du contrôle
Particularités de scanf do {scanf("%d",&x); }while (x < M || x > N); 23 12 L'écran le programme Mémoire ' ' '2' '3' ' ' '1' '2' '\n' x 12 ? 23 ' ' 'a' ' ' ' ' '2' '3' '\n' B.Shishedjiev -Structures du contrôle
Particularités de scanf do{ y=scanf("%d",&x); if (y!=1) fflush(stdin) }while (y !=1 || x < M || x > N); Mémoire x ? le programme y ? ' ' 'a' ' ' ' ' '1' '2' '\n' do{scanf("%d",&x); if (y!=1) getchar(); }while (y !=1 || x < M || x > N); Mémoire x ? 12 y ? 1 ' ' 'a' ' ' ' ' '1' '2' '\n' B.Shishedjiev -Structures du contrôle
Répétitive avec post condition Exemple – la racine carrée calculée par la formule de Héronne début Lire c, #include <stdio.h> #include <math.h> void main(void){ double c,xv,xn=1,eps; scanf("%lf %lf", &c,&eps); do { xv = xn; xn = 0.5*(xv+c/xv); }while (fabs(xn-xv)>eps); printf("le résultat est %9.3f\n", xn); } Initialiser xn = 1 xv = xn xn = 0.5*(xv+c/xv) oui |xn-xv|> non Afficher xn fin B.Shishedjiev -Structures du contrôle
B.Shishedjiev -Structures du contrôle Instruction break début Compter les nombres entiers lus jusq’au on lit -100 mais pas plus de 15 nombres Initialiser c = 0 #include <stdio.h> void main(void){ int n,c; c = 0; //initialisation scanf ("%d",&n); while (n !=-100) { c++; if (c>=15) break; } printf("le nombre est : %d\n",c); Lire 1-er nombre en n Compter vrai faux n-100 c = c + 1 c>=15 vrai faux Lire n Afficher c B.Shishedjiev -Structures du contrôle fin
B.Shishedjiev -Structures du contrôle Boucle mixte while (1){ A1; if (cond) break; A2; } A1 A1 Condi- tion Condi- tion non non oui oui A2 A2 A1 B.Shishedjiev -Structures du contrôle
B.Shishedjiev -Structures du contrôle Instruction continue Sommer tous les entiers dans l’intervalle [M,N] mais sans ces nombres qui se divisent à 5 #include <stdio.h> void main(void){ int m,n,s=0,i; printf("Tapez deux nombres:"); scanf("%d %d", &m,&n); for (i= m;i<=n;i++) { if (i % 5 == 0) continue; s += i; } printf("la somme est : %d\n", s); B.Shishedjiev -Structures du contrôle
B.Shishedjiev -Structures du contrôle Le choix Définition oui cond.1 A1 if (cond.1) A1 else if (cond.2) A2 else if ... ... else if (cond.N) AN else B ; non oui cond.2 A2 non ... oui cond.N AN non B B.Shishedjiev -Structures du contrôle
B.Shishedjiev -Structures du contrôle L’instruction switch Switch expr. c1 default c2 cn A1 A2 ... AN B switch (expr.){ case c1: A1; break; case c2: A2; break; ... case cn : AN; break; default: B; } B.Shishedjiev -Structures du contrôle
Exemple de switch Compter la fréquence des chiffres, des blancs, des points et tous les autres caractères dans un texte. #include <stdio.h> void main(void){ int nb_ch, nb_bl, nb_p, nb_aut,c; nb_ch= nb_bl= nb_p=nb_aut=0; while ((c=getchar())!=EOF){ switch(c){ case '0': case '1': case '2': ... case '9': nb_ch++;break; case ' ': case '\t':nb_bl++;break; case '.': nb_p++; break; default : nb_aut++; } printf("\n%d %d %d %d \n", nb_ch,nb_bl,nb_p,nb_aut); début nb_ch=nb_bl =nb_p=nb_aut =0 Lire c c != EOF non oui Switch c chiffre default blanc point nb_ch++ nb_bl++ nb_p++ nb_aut++ Lire c Afficher compteurs fin B.Shishedjiev -Structures du contrôle