Vous êtes sur la page 1sur 25

ChaplLre 2 noLlons de base

21 SLrucLure d'un programme C


Un programme ecrit en C doit obeir a certaines regles bien deIinies.
Le langage reconnat uniquement la structure de Ionction: un programme ecrit en C est un
ensemble de Ionctions dont chacune peut s`appeler elle-mme et appeler les autres Ionctions.
Une Ionction particuliere, dont la presence dans le programme est obligatoire, est la
Ionction main . Le programme commencera toujours sont execution au debut de cette
Ionction.
La structure la plus simple d`un programme C est alors:

main( )

deIinition des variables
instructions
}

Remarquez les parentheses obligatoires apres le nom de la Ionction (ici main ) et les accolades
d`ouverture et de Iermeture delimitant le debut et la Iin de la Ionction.
22 Les commenLalres en C
Dans un programme C il est possible (et d`ailleurs preIerable) d`ajouter des commentaires
Iacilitant ainsi la lecture et la comprehension du programme par le programmeur lui-mme et
par les autres personnes aussi.
Le debut d`un commentaire est marque par /* et sa Iin par */, notons que les commentaires
imbriques sont interdits.
Exemple:

/* ce programme est ecrit en C */ ce commentaire est bon.

/* ceci /* est Iaux */ donc a eviter */ tandis que celui-ci est Iaux.

2.3 Les Ionctions precompilees et les header Iiles
Il existe en C des Ionctions precompilees qui peuvent tre incluses dans nos programmes, ces
Ionctions sont contenues dans des Iichiers speciaux appeles library Iiles (extension *.lib).
Pour acceder a ces Ionctions une directive doit tre issue au compilateur indiquant d`inclure
les header Iiles (extension *.h) contenant les declarations correspondantes a ces Ionctions.
La syntaxe de la directive est la suivante:

#includeIichier.h~

Cette directive doit tre ecrite au tout debut du programme.

Exemple:

#includestdio.h~
main( )

printI("Hello world");
}

Ou stdio.h est le header Iile contenant la declaration de la Ionction printI.
Nous reparlerons des header Iiles et des Ionctions dans les chapitres suivants.
24 8epresenLaLlon des donnees en C
L`ordinateur a besoin de manipuler et de stocker les donnees qu`on lui Iourni.
Le langage C permet la representation des donnees sous diIIerents Iormats repondant ainsi a
ces besoins. Les diIIerents types de donnees sont les suivants:

2.4.1 Les constantes
deIinition: les constantes sont des donnees dont la valeur ne peut pas tre modiIiee durant
l`execution du programme.

En C on a les types de constantes suivants:

2.4.1.1 Les constantes entieres
Ce sont tout simplement des valeurs entieres.

Exemple: -5
124

2.4.1.2 Les constantes reelles
Ce sont des valeurs representees en virgule-Ilottante.
Exemple: -12.36
123.21
134.1e3
111.12E-6
2.4.1.3 Les constantes caractere
Elles representent un seul caractere.
Exemple: a`
B`
2`
Le caractere etant un des caracteres du code ASCII a l`exception de l`apostrophe et du
backslash.
Notez que dans une constante caractere le caractere est entoure de deux apostrophes.
Remarque: dans le troisieme exemple le 2` represente le caractere 2 et non pas l`entier 2 ( en
ASCII le caractere 2 a pour code numerique 50 en decimal).
2.4.1.4 Les constantes sequences d`echappement
Elles representent des caracteres speciaux. Une sequence d`echappement est Iormee du
caractere backslash suivi d`un autre caractere. Les principales sequences d`echappement sont
les suivantes:
\n saut de ligne
\t tabulation:pousser de 5 caracteres
\b eIIacer un caractere (backspace)
\a alerte:bip sur le haut parleur
\\ imprime le caractere backslash
\` imprime l`apostrophe
2.4.1.5 Les constantes chanes de caracteres
Une chane de caracteres represente un suite de caracteres et de sequences d`echappement
delimitee par de guillemets.
Exemple: "Je suis une chane \n"
2.4.2 Les variables
deIinition: Les variables sont des donnees dont la valeur peut tre modiIiee durant l'execution
du programme.
Toute variable est representee par un indentiIicateur qui doit tre declare avant son
utilisation.
La declaration se Iait de la maniere suivante:
type identiIicateur valeur;
type etant un des types reconnus par le langage C
identiIicateur etant le nom par lequel on designera la variable
valeur etant la valeur initiale qu'on souhaite attribuer a la valeur. Si dans la declaration la
variable n'est pas initialisee (on ne lui attribut pas de valeur initiale) cette derniere peut alors
contenir n'importe quoi.
En ce qui concerne l'identiIicateur il doit obeir aux regles suivantes:
-Il peut tre compose de n'importe quelle combinaison de lettres et de chiIIres mais doit
necessairement commencer par une lettre ou un trait de soulignement (underscore).
-La longeur maximale de l'identiIicateur depend du compilateur (32 caracteres en Borland C).
-Les lettres minuscules sont diIIerenciees des majuscules ainsi somme et SOMME sont deux
identiIicateurs diIIerents et peuvent tre utilises dans le mme programme.
Il est temps de parler des diIIerents types de variables que C nous presente. En C les types de
donnees sont:
2.4.2.1 Le type char
Il permet de declarer un variable comme caractere.
Exemple: char c'a';
2.4.2.2 Le type int
Il permet de declarer un variable comme entier positiI ou negatiI.
Exemple: int a200;
Remarque: Un int doit tre compris entre deux valeurs limites (consequence de l'architecture
de l'ordinateur), sur le PC par exemple entre -32768 et 32767.
2.4.2.3 Le type Iloat
Il permet de declarer une variable comme reel en virgule-Ilottante compris entre -10e38 et
10e38.
Exemple: Iloat b2.32e3;
2.4.2.4 Le type double
Mme que Iloat mais pour des nombres compris entre -10e308 et 10e308.
2.4.3 Les tableaux
DeIinition: Les tableaux constituent un moyen pratique qui permet de regrouper plusieurs
variables de mme type.
la declaration d'un tableau se Iait de la maniere suivante:
type identiIicateur|constante entiere positive|;
Exemple: int tab|4|; declare un tableau de 4 valeurs entieres.
Lab0 Lab1 Lab2 Lab3
On peut acceder aux elements individuels du tableau en indiquant entre les crochets l'indice
correspondant a cet element. Notons que l'indice du premier element est 0 et non pas 1.
ainsi tab|0| indique le premier element
.
.
.
tab|3| indique le dernier element

La declaration des tableaux ne se limite pas a une seule dimension, en eIIet on peut declarer
des tableaux a plusieurs dimensions.
Exemple: char tab|5||3|; declare un tableau de 5*315 elements
Lab00

Lab21

Lab42
Le premier indice est le numero de la ligne et le second celui de la colonne.

Comme toute autre variable un tableau peut tre initialise durant sa declaration.
Exemple: int tab|3|0,1,2};

0 1 2

int tab|2||2| 1,2},3,4} };
1 2
3 4

int tab|4|1,2}; ici les deux premiers elements du tableau sont initialises.
Notons qu'on peut pas commencer l'initialisation par les derniers elements du tableau.
2.4.4 Les structures
DeIinition: Si un tableau permet de regrouper des variables de mme type, une structure
permet par contre de regrouper des variables de types diIIerents.
La declaration d'une structure se Iait de la Iaon suivante:
struct identiIicateur

type element 1;
type element 2;
.
.
.
type element n;
};
Les elements de la structure sont appeles les champs ou les membres de cette structure.
Notons que les structures constituent un moyen pratique de regrouper des elements qui sont
en relation.
Exemple: struct client

char nom|20|;
int numero;
};
Pour acceder a un champ d'une structure l'operateur " . " est utilise.
Exemple: client.numero permet d'acceder au champ numero dans client.
Apres avoir declare une structure on peut directement declarer des variables de ce type de
structure.
Exemple: struct client

char nom|20|;
int numero;
};
struct client client1,client2;
donc client1 et client2 sont des structures client.
La declaration de variables de type structure peut aussi se Iaire durant la declaration de la
structure.
Exemple: struct client

char nom|20|;
int numero;
}client1,client2;
client1 et client2 sont deux structures independantes, on peut acceder aux champs de chacune
d'elle les modiIier et les traiter.
ChaplLre 3 Les operaLeurs
Le langage C est base sur un noyau d'operateurs simple mais assez important et
eIIicace permettant d'ecrire des expressions reduites aboutissant a des calculs
rapides.
Avant de commencer la discussion sur les operateurs il est necessaire de clariIier et
d'expliquer les mots utilises apres:
Les constantes et les variables declarees dans le programme constituent les donnees
manipulees par l'ordinateur.
Les operateurs ont pour but de permettre la manipulation et le traitement de ces
donnees. DiIIerentes donnees peuvent tre groupees a l'aide des operateurs pour
Iormer des expressions.
Explication Iaite passons a la discussion des diIIerents operateurs du langage C.
Il existe en C diIIerentes categories d'operateurs.
3.1 Operateurs arithmetiques
Ils permettent d'ecrire des expressions mathematiques mettant en jeu des operandes
numeriques.
plus unaire :
Il permet de signaler une valeur positive.
Exemple: a 200;
a (200-c);
moins unaire -:
Il permet de signaler une valeur negative.
Exemple: a -32;
a -b;
plus binaire :
Il retourne la somme de ses deux operandes.
Exemple: a 23;
a bc;
moins binaire -:
Il retourne la diIIerence de ses deux operandes.
Exemple: a 41-12;
a b-c;
multiplication *:
Cet operateur multiplie ses deux operandes.
Exemple: a 30*12;
a c*b;
division /:
Cet operateur divise son premier operande par le second.
Exemple: a 4/2;
a c/b;
Remarque: il est tres important de noter que la division de deux entiers retourne un
entier.
Ainsi a5/6; retourne 0 et non pas 0.83333... . Pour remedier a ce probleme il Iaut
que
l'un des operandes soit un reel par suite a 5.0/6; retournera comme reponse
0.83333... .
modulo :
Il retourne le reste de la division du premier operande par le second.
Exemple: a1295; retourne 4 car 129 5*25 4.
3.2 Operateurs logiques
Ils permettent de realiser des expressions logiques ou booleennes, permettant ainsi
de Iormer des expressions complexes a partir d'expressions simples.
negation ! decrite par la table qui suit.

!
vral faux
faux vral
ET logique && decrit par la table qui suit.

8 8
vral vral vral
vral faux faux
faux vral faux
faux faux faux
OU logique ,, decrit par la table qui suit.

8 $$8
vral vral vral
vral faux vral
faux vral vral
faux faux faux
Notons que A et B representent des expressions et que le resultat de telles
operations est 0 pour Iaux et 1 pour vrai.
Nous reviendrons sur ces operateurs plus tard dans les autres chapitres et les
exercises.
3.3 Operateurs relationnels
Ils permettent de Iormer des expressions de contrle en comparant les deux
operandes.

lnferlorlLe sLrlcLe
lnferlorlLe large
superlorlLe sLrlcLe
superlorlLe large
egallLe
lnegallLe !
3.4 Operateurs d'aIIectation

affecLaLlon
slmple

affecLaLlon avec
calcul
arlLhmeLlque
ces operaLeurs
effecLuenL le
calcul
arlLhmeLlque de
leur premler
operande avec le
second en
laffecLanL au
premler
+ * /
Lxemple a
+b equlvauL aa+b
lncremenLaLlon
a[ouLe 1 son
operande
+ +
Lxemple a++ equlvauL
a a+1
decremenLaLlon
Remarque: lorsque l'operateur d'incrementation ou de decrementation est place
avant son operande ce dernier est incremente avant d'tre utilise dans l'expression,
c'est la pre-incrementation.
lorsque l'operateur d'incrementation ou de decrementation est place apres son
operande ce dernier est incremente apres son utilisation dans l'expression, c'est la
post-incrementation.
3.5 L'operateur conditionnel ou ternaire
Le seul operateur ternaire du langage C est l'operateur ?: aussi appele l'operateur
conditionnel.
Il evalue son second ou son troisieme operande selon que sont premier operande est
vrai ou Iaux.
Sa syntaxe est la suivante:
operande1?operande2:operande3
Exemple: a (c~b)?12:15
Si la variable c est superieure a la variable b alors la variable a sera egale a 12 sinon
elle sera egale a 15.
3.6 Autres operateurs
L'operateur . permet comme nous l'avons vu dans le chapitre precedent d'acceder
au champs d'une structure.
L'operateur d'evaluation sequentielle note , permet tout simplement d'evaluer ses
deux operandes dans l'ordre de gauche a droite.
Exemple: a (b,b12); incremente b, eIIectue la somme b12 puis aIIecte le
resultat a a.
3.7 Priorite et ordre d'evaluation des operateurs
Peut tre que vous vous posez deja la question suivante: comment evalue t'on une
expression si elle contient plusieurs operateurs?
En Iait dans le langage C chaque operateur a sa priorite et son ordre d'evaluation.
Dans une expression comportant plusieurs operateurs ceux de plus grande priorite
sont evalues en premier ensuite ceux de priorite plus petite et ainsi de suite jusqu'a
arriver a ceux dont la priorite est la plus petite. Dans le cas ou plusieurs operateurs
sont de mme priorite leur ordre d'evaluation determine alors celui qui sera evalue
en premier.
Je vous presente ci-dessous un tableau de priorite et d'ordre d'evaluation des
diIIerents operateurs:

peraLeur rdre devaluaLlon
( ) Cauche urolLe
! + + (molns unalre) urolLe Cauche
* / C u
+ C u
C u
! C u
C u
$$ C u
? C u
+ * / u C
C u
3.8 Les conversions de type
3.8.1 La conversion implicite ou automatique
Si on regroupe dans une mme expression des types de donnees diIIerents le
compilateur procede a une conversion des types selon la regle suivante:
Le type dont le poids est le plus Iaible est converti au type dont le poids le plus
Iort.
Ainsi un char en presence d'un int sera convertit en int (la valeur correspondante
sera alors le code ASCII du caractere correspondant), un int en presence d'un Iloat
sera convertit en Iloat. Le type dont le poids est le plus Iort est le double.
Exemple: char a'A';
int b32;
alors ab sera un int contenant 97 car le char a ete convertit en int.
Il est aussi important de noter que dans une expression d'aIIectation le compilateur
procede a une conversion implicite en changeant le type de la variable a droite au
type de la variable a gauche.
Exemple: int a12;
Iloat ba; alors b sera egale a 12.0
int cb; alors c sera egale a 12 et la valeur decimale est tronquee.
3.8.2 La conversion explicite ou Iorcee
Nous avons vu que le compilateur procede a une conversion quand cette conversion
lui parat logique: int --~ Iloat par exemple.
Cepandant il est tout a Iait possible de proceder a la conversion d'un Iloat en un int
par exemple.
Cette conversion est dite une conversion Iorcee ou explicite. Une conversion Iorcee
peut tre achevee en utilisant un cast, la syntaxe d'un cast est la suivante:
(type souhaite) expression
Exemple: (int)(5.31/5) retournera un int (valeur tronquee), en eIIet 5.31/5 retourne
un Iloat mais puisque un cast est utilise avant l'expression le Iloat sera convertit en
int.
ChaplLre 4 Les foncLlons denLrees/sorLles en C
Aprs avo|r exp|or |es types de donnes et |es oprateurs du |angage C nous passons ma|ntenant
g |tude de que|ques fonct|ons qu| vont nous permettre de ||re g part|r du c|av|er et daff|cher sur
|cran de notre ord|nateur Aprs tout tout programme aura beso|n de donnes que nous devons
|u| fourn|r pour |es man|pu|er et aff|chera en retour d|ffrents rsu|tats sur |cran
41 #lnclude sLdloh

Le |angage C nous fourn|t des fonct|ons prdf|n|es de |ecture g part|r du c|av|er et dcr|ture sur
|cran qu| sont contenues dans |e header f||e std|oh donc au dbut de tout programme qu|
devra ut|||ser ces fonct|ons nous devrons |nc|ure au dbut |a d|rect|ve su|vante #|nc|ude std|oh
42 La foncLlon geLchar()

La fonct|on getchar permet |a rcuprat|on dun seu| caractre g part|r du c|av|er La syntaxe
dut|||sat|on de getchar est |a su|vante
var|ab|egetchar()
notez que var|ab|e do|t tre de type char et |es parenthses aprs getchar

Lxemp|e

#|nc|ude
ma|n()

char c
cgetchar()


43 La foncLlon puLchar()

La fonct|on putchar permet |aff|chage dun seu| caractre sur |cran de |ord|nateur La fonct|on
putchar const|tue a|ors |a fonct|on comp|menta|re de getchar La syntaxe dut|||sat|on est |a
su|vante
putchar(var|ab|e)
o var|ab|e est de type char
Lxemp|e

#|nc|ude
ma|n()

char c
cgetchar()
putchar(c)


Cet exemp|e attend |entre dun caractre g part|r du c|av|er et |aff|che sur |cran

44 La foncLlon scanf()

Les deux fonct|ons d[g voques b|en quut||es prsentent un |ncovn|ent ma[eur que fa|re pour
pouvo|r entrer une cha|ne comp|te ou mme un nombre? Dans |e cas dun cha|ne on devra
constru|re une bouc|e et dans |e cas dun nombre on devra auss| convert|r |es caractres en
ch|ffres tout ce|g se montre trs |ourd cest a|ors que v|ent g |a|de |a fonct|on scanf Ln effet e||e
permet de rcuprer n|mporte que||e comb|na|son de va|eurs numr|ques de caractres et de
cha|nes La syntaxe dut|||sat|on de scanf est |a su|vante
scanf(cha|ne de contr|e var1 var2 varN)
o cha|ne de contr|e reprsente certa|nes donnes de formattage et var1 var2 varN
reprsentent |es var|ab|es g remp||r La cha|ne de contr|e est entoure de gu|||emets const|tue
de groupes de caractres chaque groupe tant en re|at|on avec une des var|ab|es ment|onnes Le
groupe devra commencer par |e s|gne su|v|t dun nombre |nd|quant |a |argeur de |a var|ab|e g ||re
et ensu|te un caractre b|en df|n| (|e type) |nd|quant s| |a var|ab|e est un caractre un nombre
(so|t ent|er so|t dc|ma|) ou une cha|ne
La syntaxe du groupe possde a|ors |a forme gnr|que su|vante
|argeurtype
Notez que |argument entre crochets est facu|tat|f Les d|ffrents types sont donns dans |e tab|eau
su|vant
1ype Donnes g rcuprer
c caractre
d nombre ent|er
e ou f
un nombre dc|ma| en notat|on re||e (f) ou
exponent|e||e (e)
s une cha|ne de caractres

S| |a cha|ne cont|ent p|us quun groupe || sont souvent spars par des espaces et a|ns| |es donnes
entres do|vent tre spares par des espaces Le type de chaque var|ab|e do|t correspondre au
type de son groupe et chaque var|ab|e do|t tre prcde du s|gne sauf s| e||e est une cha|ne
1hor|e d|ff|c||e? passons aux exemp|es

1) | est un ent|er our obten|r | de |ut|||sateur on cr|t
scanf(d|)
sur |e c|av|er nous tapons 123

2) a est un caractre
scanf(ca)
d

3) v|||e est une cha|ne
scanf(sv|||e)

| pas de car v|||e est une cha|ne

beyrouth

4) | et [ sont deux ent|ers | ne do|t pas tre p|us |arge que tro|s ch|ffres
scanf(3d d|[)
231 1024

| notez |espace separateur

43 La foncLlon prlnLf()

Comme |a fonct|on scanf() permet dacqur|r tout type de donnes g part|r du c|av|er |a fonct|on
pr|ntf() permet quant g e||e daff|cher tout type de donnes g |cran de |ord|nateur
Cette fonct|on permet daff|cher n|mporte que||e comb|na|son de caractres de nombres et de
cha|nes
La syntaxe de |a fonct|on pr|ntf() est |a su|vante
pr|ntf(cha|ne de contr|earg1 arg2 argN)
o cha|ne de contr|e reprsente certa|nes donnes de formattage et arg1 arg2 argN |es
var|ab|es (ou ventue||ement |es express|ons) g aff|cher chaque groupe est en re|at|on avec
|argument correspondant dans |a ||ste des arguments
Le groupe possde |a forme gnr|que su|vante
f|ag|argeurprc|s|ontype
Les |ments entre crochets tant facu|tat|fs
La |argeur |nd|que |e nombre m|n|mum de caractres aff|chs et |a prc|s|on |nd|que |e nombre
max|mum de caractres aff|chs (pour un nombre dc|ma| |a prc|s|on |nd|que |e nombre max|ma|
de caractres aprs |a v|rgu|e qu| est par dfaut 6)
Les d|fferents types sont donns dans |e tab|eau su|vant
1ype S|gn|f|cat|on
c un caractre
d un ent|er
f un re|
s une cha|ne de caractres
e notat|on exponent|e||e

Les d|ffrents f|ags sont donns dans |e tab|eau su|vant
I|ag S|gn|f|cat|on va|eur par dfaut
[ust|f|cat|on g gauche [ust|f|cat|on g dro|te
+
aff|chage du s|gne (+ ou )avant |a va|eur
numr|que
un|quement |e est
aff|ch
espace
|es va|eurs pos|t|ves sont prcdes dun
espace
aucun espace nest
aff|ch

ChaplLre 3 Les lnsLrucLlons du langage C
Le |angage C d|spose dun nombre d|nstruct|ons fa|b|e ma|s certa|nement eff|cace
ar dfaut |es |nstruct|ons sont xcutes squent|e||ement et cet ordre peut tre mod|f| par |es
|nstruct|ons de contr|e et de bouc|e a|ns| que |es |nstruct|ons dchappement
Nous a||ons dans ce chap|tre exam|ner success|vement |es |nstruct|ons de base ce||es de bouc|e et
enf|n ce||es dchappement
31 Les lnsLrucLlons de base

Les |nstruct|ons de base sont xcutes squent|e||ement se|on |ordre de |eur appar|t|on dans
|e programme
L||es ne mod|f|ent pas |ordre dxcut|on du programme
Cn constate deux types d|nstruct|ons de base ||nstruct|on s|mp|e et |e b|oc d|nstruct|ons
311 lnsLrucLlon slmple

Une |nstruct|on s|mp|e est toute |nstruct|on su|v|e dun po|ntv|rgu|e
La syntaxe est |a su|vante
expression;

Lxemp|e
prix_totalprix_unitaire ` quantite;
312 8loc dlnsLrucLlons

Un b|oc d|nstruct|ons peut tre ut|||s n|mporte o une |nstruct|on s|mp|e peut appara|tre
Gnra|ement un b|oc d|nstruct|ons est form dune su|te d|nstruct|ons d||m|te par des
acco|ades
La syntaxe est a|ors

instruction1;
instruction2;
.
.
.
instructionN;
]
Notez qu'aprs l'accolade fermante il n'y a pas de point-virgule.
L'utilit du bloc d'instructions sera evidente quant il sera utilis avec les instructions de
contrle et de boucle.

32 Les lnsLrucLlons de conLrle eL de boucle

Les |nstruct|ons de contr|e permettent de mod|f|er |ordre dxcut|on squent|e| des |nstruct|ons
Cn peut a|ns| drouter |xcut|on se|on quune cond|t|on est vra|e ou fausse
321 LlnsLrucLlon lfelse

L|nstruct|on |f permet |xcut|on dune |nstruct|on ou dun b|oc d|nstruct|ons s| et
seu|ement s| |a cond|t|on qu| est une express|on |og|que est vr|f|e
La syntaxe est |a su|vante
if(condition)
instruction; /` ou ventuellement un bloc d'instructions `/

our |||ustrer |a thor|e prenons un exemp|e
if(note > 15)
groupe'A';

f peut tre auss| ut|||se avec e|se (qu| est facu|tat|ve) et a|ns| s| |a cond|t|on est
vr|f|e ||nstruct|on (ou |e b|oc d|nstruct|ons) d|rectement aprs |e |f sera xcute
s|non (cond|t|on fausse) ||nstruct|on (ou |e b|oc d|nstruct|ons) aprs |e e|se sera xcute
La syntaxe comp|te de ||nstruct|on |fe|se sera a|ors
if(condition)
instruction;
else
autre_instruction;

Lxemp|e
if(note > 15)
groupe'A';
else
groupe'B';

Les |nstruct|ons |fe|se peuvent tre |mbr|ques |une dans |autre
Lors dune te||e s|tuat|on un e|se se rapporte tou[ours au prem|er |f qu| |e prcde
| est conse||| despacer |es pa|res de |fe|se hor|zonta|ement |une de |autre pour assurer
|a c|aret de |a |ecture
Lxemp|e
if(condition1)
if(condition2)
instruction1;
else instruction2;
instruction3;
Lorsque condition1 n'est pas vrifie c'est instruction3 qui est xcute sinon condition2
est
teste si elle est vraie instruction1 est xcute et si elle est fausse instruction2 est
xcute.
Le else se rapporte ainsi au second if.
A noter que l'utilisation des accolades changera la rgle du else correspondant au
premier if
qui le prcde.
Exemple:
if(condition1)

if(condition2)
instruction1;
]
else
instruction2;
instruction3;
Lorsque condition1 n'est pas vrifie instruction2 est xcute puis instruction3, sinon si
condition2 est vrifie instruction1 est xcute puis instruction3.
Le else se rapporte dans ce cas au premier if.
322 LlnsLrucLlon swlLch

mag|nez quon veut |mpr|mer g |cran un des caractres A 8 C D L ou I se|on |e ch|ffre
entr par |ut|||sateur et se|on |e pr|nc|pe su|vant
1 --> A
2 --> B
3 --> C
4 --> D
5 --> E
6 --> F
L'criture de ce raisonnement en une suite d'instructions if-else est, quoique faisable,
gnante.
C'est ici que l'utilisation de l'instruction switch peut paratre utile.
En effet cette instruction permet de sauter directement vers l'instruction correcte selon
la
valeur d'une variable appele slecteur.
La syntaxe est la suivante:
switch(slecteur)

case cas1: instruction1;
case cas2: instruction2;
.
.
.
case casN: instructionN;
default: instruction_par_dfaut; /` le cas "default" tant facultatif `/
]
Notez qu'il n'y a pas de point-virgule aprs l'accolade de fermeture.
Le fonctionnement est le suivant:
Lorsque le selecteur (qui peut en effet tre une expression ou une variable) donne un
rsultat
identique celui d'une certaine ligne commencant par case, un saut est ffectu vers
cette ligne
et l'instruction(s) correspondante(s) est (sont) xcute(s).
Par suite toutes les autres lignes commencant par case auront leurs instructions
correspondantes
xcutes.
Lorsqu'aucun cas n'est valide un saut est ffectu vers la ligne commencant par default
(si elle
existe) et les instructions correspondantes seront xcutes.

Notre exemp|e scr|t a|ors
switch(choix)

case 1: printf("A");
case 2: printf("B");
case 3: printf("C");
case 4: printf("D");
case 5: printf("E");
case 6: printf("F");
default: printf("autre.");
]
L'entre par un utilisateur du choix 1 donnera en sortie: ABCDEFautre.
Nous constatons que l'xcution des autres instructions aprs celle qui correspond au
bon choix
semble tre gnante (au lieu d'afficher A on affiche ABCDEFautre.) ; Ne craignez rien le
remde
existe: c'est l'instruction break (plus de details plus tard).
323 LlnsLrucLlon whlle

L|nstruct|on wh||e permet |xcut|on rpte dune |nstruct|on ou dun b|oc d|nstruct|ons
tant quune certa|ne cond|t|on est vra|e
La syntaxe est la suivante:
while(condition)
instruction;
Le fonctionnement est le suivant: lorsque l'instruction while est rencontre la condition
entre
parenthses est teste; si elle est vraie alors l'instruction ou le bloc d'instructions aprs
le
while est xcut(e) et la condition est teste nouveau; si elle reste vraie le cycle sera
rpt nouveau jusqu' ce que la condition devienne fausse; l'xcution continue alors
directement la premire instruction aprs le while.

Lxemp|e
i1;
while(i<10)

printf(" l'intrieur du while\n");
i++;
]
printf(" l'extrieur du while\n");

l'cran on aura alors:
l'intrieur du while
l'intrieur du while
l'intrieur du while
l'intrieur du while
l'intrieur du while
l'intrieur du while
l'intrieur du while
l'intrieur du while
l'intrieur du while
l'extrieur du while

emarque || faut tou[ours sassurer que |a cond|t|on sera g un certa|n moment fausse s|non on
restera dans |a bouc|e wh||e |ndf|n|ment
Dans notre exemp|e cest ||nstruct|on |++ qu| assurera ce|g
324 LlnsLrucLlon dowhlle

L|nstruct|on dowh||e est presque |dent|que g ||nstruct|on wh||e La d|ffrence est que dans |e
dowh||e |a cond|t|on est teste aprs avo|r xcuter ||nstruct|on ou |e b|oc d|nstruct|ons annexe
La syntaxe est |a su|vante
do
instruction;
while(condition);
Lorsque do est rencontr l'instruction est xcute puis la condition est teste, si elle est
vrifie la boucle est rpte sinon l'xcution continue la premire instruction aprs le
while.

Lxemp|e
i1;
do

printf("d ",i);
i++;
]while(i<10);
Sur l'cran on obtient 1 2 3 4 5 6 7 8 9
323 LlnsLrucLlon for

L|nstruct|on for permet |xcut|on rpt|t|ve dune |nstruct|on ou dun b|oc d|nstruct|ons
un nombre b|en dterm|n de fo|s et ce|g grce a un compteur
La syntaxe est |a su|vante
for(initialisation; condition; incrmentation)
instruction;
Le fonctionnement est le suivant:
Lorsque for est rencontre pour la premire fois dans un programme, la partie
initialisation est
xcute en premier. La partie initialisation permet en effet de donner au compteur unr
valeur
initiale.
Puis la condition est teste, si elle est vrifie instruction est xcute sinon le
programme
saute l'instruction immdiatement aprs le for.
Aprs xcution de instruction, la partie incrmentation est xcute, elle permet en effet
de
changer la valeur du compteur. A nouveau condition est teste et la boucle se rpte
nouveau
tant que condition reste vraie.
Notez que initialisation ne s'effectue qu'une seule et unique fois durant tout le passage
par la
boucle for et cel au tout dbut.

Lxemp|e
for(i1;i<10;i++)
printf("bonjour\n");
Cette boucle sera itre 9 fois et ainsi bonjour sera affich 9 fois.
33 Les lnsLrucLlons dechappemenL

Ces |nstruct|ons permettent d|nterrompre |a squence norma|e dxcut|on des |nstrcut|ons
surtout
|es |nstruct|ons de contr|e et de bouc|e
331 LlnsLrucLlon break

L|nstruct|on break na de s|gn|f|cat|on que |orsque||e est ut|||se g ||ntr|eur de |une des
|nstruct|ons su|vantes wh||e sw|tch dowh||e et for
Lorsqu||e est est rencontre un saut est effectu g |a prem|re |nstruct|on aprs ||nstruct|on
de contr|e qu| |a cont|ent
La syntaxe est |a su|vante
break;
Prenons quelques exemples.

Lxemp|e 1
int i1;
while(i!0) /` boucle infinie `/

agetchar();
if(a'x')
break;
]
Lorsque la touche x est tape au clavier l'instruction break est xcute et la sortie de la
boucle while infinie est effectue.
Exemple 2:
Rappelez vous que dans l'exemple du sawitch au paragraphe 5.2.2 on avait le problme
que les
instructions aprs la bonne instruction taient elles aussi xcutes. Le remde est alors
d'utiliser le break.
Reprenons l'exemple en le rectifiant:
switch(choix)

case 1: printf("A"); break;
case 2: printf("B"); break;
case 3: printf("C"); break;
case 4: printf("D"); break;
case 5: printf("E"); break;
case 6: printf("F"); break;
default: printf("autre."); /` break non ncessaire `/
]
Ainsi lorsque la bonne instruction est xcute un break est rencontr ce qui permet de
sortir
directement du switch.
332 lnsLrucLlon conLlnue

L|nstruct|on cont|nue na de s|gn|f|cat|on que |orsque||e est ut|||se au se|n dune des bouc|es
su|vantes wh||e dowh||e et for
Lorsque||e est rencontre |e programme passe d|rectement g ||trant|on su|vante de |a bouc|e
o e||e se trouve sans effectuer |es |nstruct|ons restantes du passage actue|
La syntaxe est |a su|vante
continue;

Lxemp|e
for(j1;j<4;j++)

if(j!2)
printf("d\n",j);
else continue;
]
A l'cran on voit s'afficher:
1
3
4
333 LlnsLrucLlon nulle

Cette |nstruct|on ne ra||se abso|uement r|en
La syntaxe est s|mp|ememt |e po|ntv|rgu|e
Son ut|||t rs|de dans |e fa|t que||e permet de perdre du temps L||e est presque [ama|s ut|||se