Professional Documents
Culture Documents
O en sommes-nous ?
Thme Introduction I t d ti Aperu du fonctionnement dun ordinateur Introduction au langage C Reprsentation et traitement de linformation
Les types de donnes de base et leurs oprations
Approfondissements
Analyse et programmation 1 - Les structures de contrle 1
Thmes abords
Les blocs Choisir Ch i i entre t diff diffrents t t traitements it t
Les instructions de choix : test, slection.
Un bloc dinstructions
Est dlimit par les accolades o ouvrantes rantes et fermantes fermantes. Est considr comme une instruction unique dans les structures de contrle. Peut comporter des dclarations de variables au dbut. Les instructions sont excutes de faon squentielle.
Exemple
{ int i, j; i = 2; j = i + 1; printf("%d\n", j); }
Autres formes
Le bloc vide
{ }
Utilit
Boucle dattente.
On attend quune condition apparaisse. Pendant ce temps, on ne fait rien.
Analyse et programmation 1 - Les structures de contrle 5
Linstruction de test if
Prsentation
Structure de base
if (expression) instruction;
Signification de if
si
Fonctionnement
Linstruction if value lexpression entre parenthses. Si la condition est vraie, linstruction suivant le if est excute. Vrai voulant dire, en langage C, diffrent de 0. Sinon, lexcution continue la ligne suivante.
if (x < 0.0) printf("Les valeurs negatives ne sont pas admises.\n");
Exemple
Linstruction de test if
Illustration
if Expression
[Vraie (!= 0)] [Fausse (== 0)]
instruction
Linstruction de test if
Conditions complexes
La condition entre parenthses peut tre complexe Seulement S l t dlimite dli it par l les parenthses th
if ( ( (x >= ( (x >= ( (x >= ( (x >= print("x p t( 0) 20) 40) 60) est && (x <= 10) && (x <= 30) && (x <= 50) && (x <= 70) valide\n"); a de\ ); ) ) ) ) || || || )
Linstruction de test if
Plusieurs instructions
Linstruction de test if
Alternative Structure de base
if (expression) instruction_1; else instruction_2;
Signification de else:
Autrement (sinon)
Fonctionnement
Linstruction if value lexpression entre parenthses. Si la condition est vraie, vraie instruction_1 instruction 1 est excute. excute Sinon, instruction_2 est excute.
Exemple
if (x < 0.0) printf("Les valeurs negatives ne sont pas admises.\n"); else printf("racine carre : %f.\n" , sqrt(x));
Analyse et programmation 1 - Les structures de contrle 10
Linstruction de test if
Illustration
if Expression
[Vraie (!= 0)] [Fausse (== 0)]
instruction 1 instruction_1
instruction 2 instruction_2
11
Linstruction de test if
Chanage - principe if (tension < 0) printf("Cas p t ( Cas non o g gr\n"); \ ); else if (tension < 50) printf("basse tension\n"); else if (tension < 1500) printf("moyenne tension\n"); else if (tension < 15000) printf("haute tension\n"); else printf("trs haute tension\n");
Analyse et programmation 1 - Les structures de contrle 12
Linstruction de test if
Chanage forme recommande
if (tension < 0) printf("Cas i tf("C non gr\n"); \ ") else if (tension < 50) printf("basse tension\n"); else if (tension < 1500) printf("moyenne tension\n"); else if (tension < 15000) printf("haute tension\n"); else printf("trs haute tension\n");
Analyse et programmation 1 - Les structures de contrle 13
Linstruction de test if
Imbrications
Ou
if (expression_1) if (expression_2) instruction 1; instruction_1; else instruction_2;
Rgle :
else se rapporte toujours au if le plus proche qui na pas encore de else.
Analyse et programmation 1 - Les structures de contrle 14
Linstruction de test if
Imbrications associer un else avec un if lointain
Il est possible de forcer lassociation dun else. Utilisation Utili ti d de l la structure t t d de bl bloc.
if (expression_1) { if (expression_2) instruction_1; } else instruction_2;
15
Linstruction de test if
Piges courants
16
17
Linstruction switch value lexpression entire entre parenthses. parenthses En fonction de la valeur de lexpression
Se branche sur le case portant cette valeur. Commence lexcution ce point.
Particularit
Lexcution ne sarrte pas automatiquement la fin du cas. Elle poursuit sur les cas suivants !
18
switch Expression
[valeur1] [valeur2]
instruction cas 1
instruction cas 2
...
instruction default
19
10
Constat
Dans la plupart pl part des programmes rels rels, on so souhaite haite e excuter c ter les instructions correspondant un cas. Mais on ne souhaite pas enchaner le suivant
Linstruction break
Permet de sortir du switch. Permet donc de sparer les cas.
21
11
switch Expression
[valeur1] [valeur2]
instructions1; ; break;
instructions2; ; break;
...
break;
instruction default
23
12
Syntaxe
Utiliser
default:
et non pas
case default:
Ce cas nest pas obligatoire. Sil nexiste pas et que le cas ne figure pas dans la liste
Aucun traitement nest effectu par switch. switch
25
13
Cest moins efficace lexcution. Cela traduit visuellement moins la slection 1 parmi N.
26
Utilisation propre
Prfrer switch avec un break la fin de chaque cas. Possibilit cependant de mettre plusieurs case avant un bloc dinstructions.
27
14
Rappels
Le compilate compilateur r ignore les espaces dans le code so source. rce On peut mettre autant despaces et de sauts de lignes sans changer la signification du code source.
Indentation
Disposer le code source pour mettre en vidence sa structure logique. Exploiter p p pour cela la libert q que nous laisse le compilateur. p
Exemple
if (x < 0.0) printf("Les valeurs negatives ne sont pas admises.\n"); else printf("racine carre : %f.\n" , sqrt(x));
Analyse et programmation 1 - Les structures de contrle 28
Style Pascal
if (x < 0.0) { printf("Les valeurs ale rs negati negatives es ne sont pas admises admises.\n"); \n") printf("Donnez une valeur positive.\n"); } else { printf("Valeur correcte.\n"); printf("racine carre : %f.\n" , sqrt(x)); }
Analyse et programmation 1 - Les structures de contrle 29
15
30
Commentez
Seulement lorsquil ny a pas dautre moyen de rendre le code clair.
31
16
32
Super ! Mais M i
Il nest en gnral pas maintenu jour. Il existe des outils qui permettent automatiquement
de mettre jour la date de modification. de retrouver toutes les modifications dun code source depuis une date.
33
17
34
35
18
La boucle do while
Prsentation Structure de base
do instruction; while (expression)
Signification
do : faire while : tant que
Fonctionnement
Linstruction est excute. Ensuite, lexpression est value. Si elle est vraie, vraie on reprend lexcution l excution de linstruction l instruction, etc etc Il est donc souhaitable que linstruction agisse sur la condition.
do scanf("%d", &i); while (i <= 0);
Exemple
36
La boucle do while
Illustration
37
19
La boucle do while
Plusieurs instructions
La boucle do while
Particularits autorises par le C
Boucle infinie
Certains compilateurs dtectent que la condition est invariable.
do ; while (1);
Analyse et programmation 1 - Les structures de contrle 39
20
La boucle while
Prsentation Structure de base
while (expression) instruction;
Signification
while : tant que
Fonctionnement
Lexpression est value dabord. Si elle est vraie, on excute linstruction. Et on recommence. Si lexpression est fausse fausse, la boucle sarrte sarrte. Il est donc souhaitable que linstruction agisse sur la condition.
i = 0; while (i <= 0); scanf("%d", &i);
Analyse et programmation 1 - Les structures de contrle 40
Exemple
La boucle while
Illustration
while Expression
[Fausse (== 0)]
instruction
41
21
La boucle while
Plusieurs instructions while naccepte quune seule instruction.
while (i <= 0) i = 0; scanf("%d", &i); // pas controle par while !
42
La boucle while
Particularits autorises par le C
Boucle infinie
Certains compilateurs dtectent que la condition est invariable.
while (1) ;
43
22
La boucle for
Prsentation
Structure de base
for (expression1 ; expression2 ; expression3) instruction;
Signification
for : pour
Fonctionnement
Lexpression 1 est value une seule fois au dbut. Lexpression 2 est value ensuite. ensuite Si elle est vraie, on excute linstruction, puis lexpression3. Et on recommence lvaluation de lexpression 2. Si lexpression 2 est fausse, la boucle sarrte. Il est donc souhaitable que linstruction agisse sur la condition.
44
La boucle for
Prsentation
for (expression1 ; expression2 ; expression3) instruction;
Utilisations habituelles
for (i = 0; i < 10; i++) printf("%d, ", i); for (i = 1; i <= 10; i++) printf("%d, ", i); for (i = 10; i >= 1; i--) printf("%d, ", i);
45
23
La boucle for
Illustration for expression1 p Expression2
instruction expression3
46
La boucle for
Illustration for i=0 i < 10
47
24
La boucle for
Plusieurs instructions for naccepte quune seule instruction.
for (i = 1; i <= 10; i++) printf("%d", i); printf(", "); // pas controle par for !
48
La boucle for
Particularits autorises par le C
25
La boucle for
Particularits autorises par le C
Pas dincrmentation.
for (i = 1 ; i <= 10 ; ) printf("%d", i++); // incrmentation ici
Boucle infinie
for (;;) // forme recommande de la boucle infinie ;
50
La boucle for
Particularits autorises par le C
A retenir
for a t conu pour traduire la boucle POUR i = 1 N FAIRE . Son implmentation en C permet den faire bien dautres choses. Prfrer en g gnral les usages g normaux du for. On trouve les formes bizarres dans du code industriel. Donc, il est important de connatre la smantique du for en C.
51
26
Effet
Arrt immdiat de la boucle. bo cle Poursuite du programme sur linstruction suivant la boucle.
Exemple
int i; float somme = 0.0, f; for (i = 0; i < 100; i++) { if (scanf("%f", &f) == 0) // saisie incorrecte => sortie de boucle break; somme += f; }
Analyse et programmation 1 - Les structures de contrle 52
Effet
Passe immdiatement l litration itration suivante de la boucle. boucle Sans terminer les instructions de litration en cours. Usage peu recommand.
Exemple
int i; float somme = 0.0, f; for (i = 0; i < 100; i++) { if (scanf("%f", &f) == 0) // saisie incorrecte => iteration suivante continue; somme += f; }
Analyse et programmation 1 - Les structures de contrle 53
27
54
Conseil
Prfrer le contrle normal des boucles
condition pour while et do while. nombre ditrations pour for.
28
Dans la pratique, les 3 types de boucles permettent chacun de recrer les autres.
56
Linstruction goto
Prsentation Structure de base
goto etiquette; etiquette:
Signification
goto : aller
Fonctionnement
Aprs lexcution de goto, le programme continue linstruction suivant ltiquette mentionne. Ltiquette doit se trouver dans la mme fonction que le goto. Il est possible de sauter au milieu dune structure de contrle !!!
Exemple
goto gestion_erreur; . . . . . . gestion_erreur: printf("Une erreur est survenue. Impossible de" "continuer\n");
Analyse et programmation 1 - Les structures de contrle 57
29
Linstruction goto
Exemple la boucle for avec goto
int i; i = 0; boucle: printf("%d\n", i); i++; if (i < 10) goto boucle; A viter absolument
58
Linstruction goto
Que fait ce programme ?
int main() { int i, j; i = 0; j = 9; goto debut; affiche: printf("%d\n", i); debut: i++; goto test; milieu: j--; test: if (i > j) goto debut; else if (i > 7) goto milieu; goto affiche; fin: _getch(); return 0; }
Analyse et programmation 1 - Les structures de contrle 59
30
Linstruction goto
Critique
La programmation utilisant goto amne des problmes. goto t nest t pas une structure t t d de contrle. t l
Ne structure pas le programme de faon hirarchique. Les autres structures de contrle sparent 2 niveaux :
Le niveau contrle : condition. Le niveau contrl : instructions.
31
Linstruction goto
Pourquoi existe-t-elle ?
Linstruction goto
peut permettre dcrire du code dune faon optimise. en consommant le moins de ressources possibles. cest une programmation proche de la machine.
62
Quavons-nous appris ?
Les structures de contrle de test/slection
if, if s switch itch case case.
63
32
Vos questions
64
65
33