You are on page 1of 27

C.

Delannoy
Exercices en 3e dition
Claude Delannoy

LANGAGE
C++ Exercices en

3e dition
LANGAGE
Ingnieur informaticien au CNRS, Claude Delannoy
150 exercices corrigs pour matriser la langage C++ possde une grande pratique de la formation conti-
Complment idal de Programmer en langage C++, du mme auteur, cet
nue et de lenseignement suprieur. Rputs pour la
ouvrage vous propose 150 exercices corrigs et comments pour mieux qualit de leur dmarche pdagogique, ses ouvrages

Exercices en LANGAGE C++


assimiler la syntaxe de base du C++ (types et oprateurs, instructions de sur les langages et la programmation totalisent plus
contrle, fonctions, tableaux, pointeurs) et les concepts objet du langage. de 500 000 exemplaires vendus.

C++
Les exercices proposs vous permettront de vous forger une vritable
mthodologie de conception de vos propres classes C++. Vous saurez
notamment dcider du bien-fond de la surdfinition de loprateur
Au sommaire
daffectation ou du constructeur par recopie, tirer parti de lhritage
(simple ou multiple), crer vos propres bibliothques de classes, exploiter Gnralits sur le C++, types de base, oprateurs et
les possibilits offertes par les patrons de fonctions et de classes, etc. expressions (7 exercices) Instructions de contrle
(16 exercices) Fonctions (10 exercices) Tableaux,
Chaque chapitre dbute par un rappel de cours suivi de plusieurs exercices
pointeurs et chanes de type C (13 exercices) Struc-
de difficult croissante. Les corrigs sont tous prsents suivant le mme
tures (6 exercices) Du C au C++ (9 exercices)
canevas: analyse dtaille du problme, solution sous forme de programme
Classes, constructeurs et destructeurs (7exercices)
avec exemple de rsultat dexcution, justification des choix oprs car il
Proprits des fonctions membres (5 exercices)
ny a jamais de solution unique un problme donn ! et, si besoin,
commentaires sur les points dlicats et suggestions sur les extensions
possibles du programme.
Construction, destruction et initialisation des objets
(7 exercices) Fonctions amies (3 exercices)
Surdfinition doprateurs (11 exercices) Conversions
150 exercices corrigs
Le code source des corrigs est fourni sur le site www.editions-eyrolles.com. de type dfinies par lutilisateur (7 exercices) Tech-
nique de lhritage (7 exercices) Hritage multiple
qui sadresse ce livre ? (6 exercices) Fonctions virtuelles et polymorphisme
(3 exercices) Flots dentre et de sortie (5 exer-
Aux tudiants des cursus universitaires (DUT, licence, master), ainsi quaux cices) Patrons de fonctions (4exercices) Patrons
lves des coles dingnieur. de classes (8 exercices) Gestion des exceptions
tout programmeur ayant dj une exprience de la programmation (7exercices) Exercices de synthse (6 exercices)
(C, Python, Java, PHP) et souhaitant sinitier au langage C++. Composants standard (11 exercices).

3e dition
ISBN : 978-2-212-67387-6
Code diteur : G67387

19,90

Conception de couverture :
Jrmie Barlog / Studio Eyrolles
ditions Eyrolles

G67387_ExercicesEnLangageC++-EXE.indd 1 17/02/2017 12:42


C. Delannoy
Exercices en 3e dition
Claude Delannoy

LANGAGE
C++ Exercices en

3e dition
LANGAGE
Ingnieur informaticien au CNRS, Claude Delannoy
150 exercices corrigs pour matriser la langage C++ possde une grande pratique de la formation conti-
Complment idal de Programmer en langage C++, du mme auteur, cet
nue et de lenseignement suprieur. Rputs pour la
ouvrage vous propose 150 exercices corrigs et comments pour mieux qualit de leur dmarche pdagogique, ses ouvrages

Exercices en LANGAGE C++


assimiler la syntaxe de base du C++ (types et oprateurs, instructions de sur les langages et la programmation totalisent plus
contrle, fonctions, tableaux, pointeurs) et les concepts objet du langage. de 500 000 exemplaires vendus.

C++
Les exercices proposs vous permettront de vous forger une vritable
mthodologie de conception de vos propres classes C++. Vous saurez
notamment dcider du bien-fond de la surdfinition de loprateur
Au sommaire
daffectation ou du constructeur par recopie, tirer parti de lhritage
(simple ou multiple), crer vos propres bibliothques de classes, exploiter Gnralits sur le C++, types de base, oprateurs et
les possibilits offertes par les patrons de fonctions et de classes, etc. expressions (7 exercices) Instructions de contrle
(16 exercices) Fonctions (10 exercices) Tableaux,
Chaque chapitre dbute par un rappel de cours suivi de plusieurs exercices
pointeurs et chanes de type C (13 exercices) Struc-
de difficult croissante. Les corrigs sont tous prsents suivant le mme
tures (6 exercices) Du C au C++ (9 exercices)
canevas: analyse dtaille du problme, solution sous forme de programme
Classes, constructeurs et destructeurs (7exercices)
avec exemple de rsultat dexcution, justification des choix oprs car il
Proprits des fonctions membres (5 exercices)
ny a jamais de solution unique un problme donn ! et, si besoin,
commentaires sur les points dlicats et suggestions sur les extensions
possibles du programme.
Construction, destruction et initialisation des objets
(7 exercices) Fonctions amies (3 exercices)
Surdfinition doprateurs (11 exercices) Conversions
150 exercices corrigs
Le code source des corrigs est fourni sur le site www.editions-eyrolles.com. de type dfinies par lutilisateur (7 exercices) Tech-
nique de lhritage (7 exercices) Hritage multiple
qui sadresse ce livre ? (6 exercices) Fonctions virtuelles et polymorphisme
(3 exercices) Flots dentre et de sortie (5 exer-
Aux tudiants des cursus universitaires (DUT, licence, master), ainsi quaux cices) Patrons de fonctions (4exercices) Patrons
lves des coles dingnieur. de classes (8 exercices) Gestion des exceptions
tout programmeur ayant dj une exprience de la programmation (7exercices) Exercices de synthse (6 exercices)
(C, Python, Java, PHP) et souhaitant sinitier au langage C++. Composants standard (11 exercices).

3e dition

G67387_ExercicesEnLangageC++-EXE.indd 1 17/02/2017 12:42


Exercices
enlangageC++
AUX DITIONS EYROLLES

Du mme auteur

C. Delannoy. Programmer en langage C++.


N14008, 8e dition, 2011, 820 pages.

C. Delannoy. Programmer en Java. Java 5 8.


N11889, 9e dition, 2014, 948 pages (rdition avec nouvelle prsentation, 2016).

C. Delannoy. Exercices en Java.


N67385, 4e dition, 2014, 360 pages (rdition avec nouvelle prsentation, 2016).

C. Delannoy. Sinitier la programmation et lorient objet.


Avec des exemples en C, C++, C#, Python, Java et PHP.
N11826, 2e dition, 2014, 360 pages.

C. Delannoy. Le guide complet du langage C.


N14012, 2014, 844 pages.

Autres ouvrages

H. Bersini, I. Wellesz. La programmation oriente objet.


Cours et exercices en UML 2 avec Python, PHP, Java, C#, C++.
N67399, 7e dition, 2017, 672 pages.

P. Roques. UML 2 par la pratique


N12565, 7e dition, 2009, 396 pages.

J. Engels. PHP 7. Cours et exercices.


N67360, 2017, 608 pages.

P. Martin, J. Pauli, C. Pierre de Geyer et E. Daspet. PHP 7 avanc.


N14357, 2016, 728 pages.

G. Swinnen. Apprendre programmer avec Python 3.


N13434, 3e dition, 2012, 435 pages.

E. Biernat, M. Lutz. Data science : fondamentaux et tudes de cas.


N14243, 2015, 312pages.
Claude Delannoy

Exercices
enlangageC++
3e dition

Troisime tirage 2017, avec nouvelle prsentation


DITIONS EYROLLES
61, bd Saint-Germain
75240 Paris Cedex 05
www.editions-eyrolles.com

En application de la loi du 11 mars 1957, il est interdit de reproduire intgralement ou partiellement le


prsent ouvrage, sur quelque support que ce soit, sans lautorisation de lditeur ou du Centre franais
dexploitation du droit de copie, 20, rue des Grands-Augustins, 75006 Paris.

La troisime dition du prsent ouvrage est parue en 2007 sous lISBN 978-2-212-12201-5.
loccasion de ce troisime tirage, elle bnficie dune nouvelle couverture. Le texte reste inchang.

Groupe Eyrolles, 1997-2007, pour le texte de la prsente dition.


Groupe Eyrolles, 2017, pour la nouvelle prsentation. ISBN : 978-2-212-67387-6.
exos_c++.book Page V Jeudi, 5. juillet 2007 11:10 11

Avant-propos

La matrise dun langage de programmation passe obligatoirement par la pratique, cest--dire


la recherche personnelle dune solution un problme donn, et cette affirmation reste vraie
pour le programmeur chevronn qui tudie un nouveau langage. Cest dans cette situation que
se trouve gnralement une personne qui aborde le C++ :
soit elle connat dj un langage procdural classique autre que le C (Java, Visual Basic,
Pascal, ...),
soit elle connat dj la langage C sur lequel sappuie effectivement C++ ; toutefois, ce
dernier langage introduit suffisamment de possibilits supplmentaires et surtout de nou-
veaux concepts (en particulier ceux de la Programmation Oriente Objet) pour que son
apprentissage sapparente celui dun nouveau langage.
Cet ouvrage vous propose daccompagner votre tude du C++ et de la prolonger laide dexer-
cices appropris, varis et de difficult croissante, et ceci quelles que soient vos connaissances
pralables. Il comporte :
4 chapitres destins ceux dentre vous qui ne connaissent pas le C : types de base, opra-
teurs et expressions ; instructions de contrle ; fonctions ; tableaux, pointeurs et chanes de
style C ;
un chapitre destin assurer la transition de C C++ destins ceux qui connaissent dj
le langage C ;
seize chapitres destins tous : les notions de classe, constructeur et destructeur ; les pro-
prits des fonctions membre ; la construction, la destruction et linitialisation des objets ;
les fonctions amies ; la surdfinition doprateurs ; les conversions de type dfinies par
lutilisateur ; la technique de lhritage ; les fonctions virtuelles ; les flots dentre et de

ditions Eyrolles V
exos_c++.book Page VI Jeudi, 5. juillet 2007 11:10 11

Exercices en langage C++

sortie, les patrons de fonctions et les patrons de classes ; la gestion des exceptions. Le cha-
pitre 20 propose des exercices de synthse.
Chaque chapitre dbute par un rappel dtaill des connaissances ncessaires pour aborder les
exercices correspondants (naturellement, un exercice dun chapitre donn peut faire intervenir
des points rsums dans les chapitres prcdents).
Le cours complet correspondant ces rsums se trouve dans louvrage Apprendre le C++, du
mme auteur.
Au sein de chaque chapitre, les exercices proposs vont dune application immdiate du cours
des ralisations de classes relativement compltes. Au fil de votre progression dans louvrage,
vous raliserez des classes de plus en plus ralistes et oprationnelles, et ayant un intrt
gnral ; citons, par exemple :
les ensembles ;

les vecteurs dynamiques ;

les tableaux dynamiques plusieurs dimensions ;

les listes chanes ;

les tableaux de bits ;

les (vraies) chanes de caractres ;

les piles ;

les complexes.

Naturellement, tous les exercices sont corrigs. Pour la plupart, la solution propose ne se
limite pas une simple liste dun programme (laquelle ne reprsente finalement quune rdac-
tion possible parmi dautres). Vous y trouverez une analyse dtaille du problme et, si besoin,
les justifications de certains choix. Des commentaires viennent, le cas chant, clairer les parties
quelque peu dlicates. Frquemment, vous trouverez des suggestions de prolongement ou de
gnralisation du problme abord.
Outre la matrise du langage C++ proprement dit, les exercices proposs vous permettront de
vous forger une mthodologie de conception de vos propres classes. Notamment, vous
saurez :
dcider du bien-fond de la surdfinition de loprateur daffectation ou du constructeur
par recopie ;

VI ditions Eyrolles
exos_c++.book Page VII Jeudi, 5. juillet 2007 11:10 11

Avant-propos

exploiter, lorsque vous jugerez que cela est opportun, les possibilits de conversions
implicites que le compilateur peut mettre en place ;
tirer parti de lhritage (simple ou multiple) et dterminer quels avantages prsente la cration
dune bibliothque de classes, notamment par le biais du typage dynamique des objets qui
dcoule de lemploi des fonctions virtuelles ;
mettre en uvre les possibilits de fonctions gnriques (patrons de fonctions) et de classes
gnriques (patrons de classes).

Quelques exercices proposs dans les prcdentes ditions de louvrage trouvent maintenant
une solution vidente en faisant appel aux composants standard introduits par la norme. Nous
les avons cependant conservs, dans la mesure o la recherche dune solution ne faisant pas
appel aux composants standard conserve un intrt didactique manifeste. De surcrot, nous
avons introduit un nouveau chapitre (21), qui montre comment rsoudre les exercices
lorsquon accepte, cette fois, de recourir ces composants standard.

ditions Eyrolles VII


exos_c++.book Page VIII Jeudi, 5. juillet 2007 11:10 11
exos_c++.book Page IX Jeudi, 5. juillet 2007 11:10 11

Table des matires

1 Gnralits, types de base, oprateurs et expressions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1


Exercice 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Exercice 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Exercice 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Exercice 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Exercice 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Exercice 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Exercice 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2 Les instructions de contrle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13


Exercice 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Exercice 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Exercice 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Exercice 11. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Exercice 12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Exercice 13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Exercice 14 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Exercice 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Exercice 16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Exercice 17. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Exercice 18 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Exercice 19 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Exercice 20 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Exercice 21 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Exercice 22 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Exercice 23 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

3 Les fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Exercice 24 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Exercice 25 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Exercice 26 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Exercice 27 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

ditions Eyrolles IX
exos_c++.book Page X Jeudi, 5. juillet 2007 11:10 11

Exercices en C++

Exercice 28. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Exercice 29. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Exercice 30. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Exercice 31 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Exercice 32. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Exercice 33. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

4 Les tableaux, les pointeurs et les chanes de style C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49


Exercice 34. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Exercice 35. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Exercice 36. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Exercice 37 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Exercice 38. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Exercice 39. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Exercice 40. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Exercice 41 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Exercice 42. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Exercice 43. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Exercice 44. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Exercice 45. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Exercice 46. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

5 Les structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Exercice 47 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Exercice 48. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Exercice 49. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Exercice 50. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Exercice 51 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Exercice 52. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

6 De C C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Exercice 53. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Exercice 54. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Exercice 55. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Exercice 56. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Exercice 57 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Exercice 58. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

X ditions Eyrolles
exos_c++.book Page XI Jeudi, 5. juillet 2007 11:10 11

Table des matires

Exercice 59 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Exercice 60 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Exercice 61 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

7 Notions de classe, constructeur et destructeur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97


Exercice 62 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Exercice 63 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Exercice 64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Exercice 65 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Exercice 66 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Exercice 67 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Exercice 68 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

8 Proprits des fonctions membre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115


Exercice 69 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Exercice 70 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Exercice 71 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Exercice 72 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Exercice 73 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

9 Construction, destruction et initialisation des objets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127


Exercice 74 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Exercice 75 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Exercice 76 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Exercice 77 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Exercice 78 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Exercice 79 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Exercice 80 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

10 Les fonctions amies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147


Exercice 81 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Exercice 82 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Exercice 83 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152

11 Surdfinition doprateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155


Exercice 84 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Exercice 85 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
Exercice 86 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

ditions Eyrolles XI
exos_c++.book Page XII Jeudi, 5. juillet 2007 11:10 11

Exercices en C++

Exercice 87 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Exercice 88. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Exercice 89. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Exercice 90. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Exercice 91 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Exercice 92. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
Exercice 93. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Exercice 94. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181

12 Les conversions de type dfinies par lutilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183


Exercice 95. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
Exercice 96. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Exercice 97 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Exercice 98. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
Exercice 99. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
Exercice 100 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Exercice 101 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192

13 La technique de lhritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195


Exercice 102 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
Exercice 103 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Exercice 104 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
Exercice 105 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
Exercice 106 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
Exercice 107 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
Exercice 108 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

14 Lhritage multiple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213


Exercice 109 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Exercice 110 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
Exercice 111 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Exercice 112 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Exercice 113 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
Exercice 114 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220

15 Les fonctions virtuelles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225


Exercice 115 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227

XII ditions Eyrolles


exos_c++.book Page XIII Jeudi, 5. juillet 2007 11:10 11

Table des matires

Exercice 116. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228


Exercice 117 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230

16 Les flots dentre et de sortie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237


Exercice 118. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Exercice 119. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
Exercice 120 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
Exercice 121. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
Exercice 122 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249

17 Les patrons de fonctions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251


Exercice 123 ................................................................. 254
Exercice 124 ................................................................. 255
Exercice 125 ................................................................. 256
Exercice 126 ................................................................. 257

18 Les patrons de classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259


Exercice 127. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
Exercice 128 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
Exercice 129 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Exercice 130 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
Exercice 131. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Exercice 132 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Exercice 133 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Exercice 134 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273

19 Gestion des exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275


Exercice 135 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Exercice 136 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Exercice 137. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Exercice 138 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
Exercice 139 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
Exercice 140 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
Exercice 141. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287

20 Exercices de synthse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289


Exercice 142 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Exercice 143 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294

ditions Eyrolles XIII


exos_c++.book Page XIV Jeudi, 5. juillet 2007 11:10 11

Exercices en C++

Exercice 144 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297


Exercice 145 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
Exercice 146 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
Exercice 147 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310

21 Les composants standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313


Exercice 148 (67 revisit) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
Exercice 149 (68 revisit) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
Exercice 150 (77 revisit) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
Exercice 151 (78 revisit) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
Exercice 152 (79 revisit) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
Exercice 153 (90 revisit) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
Exercice 154 (91 revisit) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
Exercice 155 (93 revisit) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
Exercice 156 (142 revisit) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
Exercice 157 (143 revisit) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
Exercice 158 (94 revisit) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334

XIV ditions Eyrolles


exos_c++.book Page 1 Jeudi, 5. juillet 2007 11:10 11

Chapitre 1

Gnralits, types de base,


oprateurs et expressions

Rappels

Gnralits
Le canevas minimal utiliser pour raliser un programme C++ se prsente ainsi :
#include <iostream>
using namespace std ;
main() // en-tte
{ ..... // corps du programme
}
Toute variable utilise dans un programme doit avoir fait lobjet dune dclaration en prcisant
le type et, ventuellement, la valeur initiale. Voici des exemples de dclarations :
int i ; // i est une variable de type int nomme i
float x = 5.25 ; // x est une variable de type float nomme x
// initialise avec la valeur 5.25
const int NFOIS = 5 ; // NFOIS est une variable de type int dont la
// valeur, fixe 5, ne peut plus tre modifie

ditions Eyrolles 1
exos_c++.book Page 2 Jeudi, 5. juillet 2007 11:10 11

Exercices en langage C++

Laffichage dinformations lcran est ralis en envoyant des valeurs sur le flot cout ,
comme dans :
cout << n << 2*p ; // affiche les valeurs de n et de 2*p sur lcran

La lecture dinformations au clavier est ralise en extrayant des valeurs du flot cin ,
comme dans :
cin >> x >> y ; // lit deux valeurs au clavier et les affecte x et y

Types de base
Les types de base sont ceux partir desquels seront construits tous les autres, dits drivs (il
sagira des types structurs comme les tableaux, les structures, les unions et les classes, ou
dautres types simples comme les pointeurs ou les numrations).
Il existe trois types entiers : short int (ou short), int et long int (ou long). Les limita-
tions correspondantes dpendent de limplmentation. On peut galement dfinir des types
entiers non signs : unsigned short int (ou unsigned short), unsigned int et unsi-
gned long int (ou unsigned long). Ces derniers sont essentiellement destins la mani-
pulation de motifs binaires.
Les constantes entires peuvent tre crites en notation hexadcimale (comme 0xF54B) ou
octale (comme 014). On peut ajouter le suffixe u pour un entier non sign et le suffixe l
pour un entier de type long.
Il existe trois types flottants : float, double et long double. La prcision et le domaine
reprsentable dpendent de limplmentation.
Le type caractre permet de manipuler des caractres cods sur un octet. Le code utilis
dpend de limplmentation. Il existe trois types caractre : signed char, unsigned char et
char (la norme ne prcise pas sil correspond signed char ou unsigned char).
Les constantes de type caractre, lorsquelles correspondent des caractres imprimables ,
se notent en plaant le caractre correspondant entre apostrophes.
Certains caractres disposent dune reprsentation conventionnelle utilisant le caractre \
notamment \n qui dsigne un saut de ligne. De mme, \ reprsente le caractre et \"
dsigne le caractre ". On peut galement utiliser la notation hexadcimale (comme dans \
x41) ou octale (comme dans \07).
Le type bool permet de manipuler des boolens . Il dispose de deux constantes notes
true et false.

2 ditions Eyrolles
exos_c++.book Page 3 Jeudi, 5. juillet 2007 11:10 11

chapitre n 1 Gnralits, types de base, oprateurs et expressions

Les oprateurs de C++


Voici un tableau prsentant lensemble des oprateurs de C++ (certains ne seront exploits que
dans des chapitres ultrieurs) :

Catgorie Oprateurs Associativit

Rsolution de porte :: (porte globale - unaire) <--


:: (porte de classe - binaire) -->
Rfrence () [] -> . -->
Unaire + - ++ -- ! ~ * & sizeof <---
cast dynamic_cast static_cast
reinterpret_cast const_cast
new new[] delete delete[]
Slection ->* .* <--
Arithmtique * / % --->
Arithmtique + - --->
Dcalage << >> --->
Relationnels < <= > >= --->
Relationnels == != --->
Manipulation de bits & --->
Manipulation de bits ^ --->
Manipulation de bits | --->
Logique && --->
Logique || --->
Conditionnel (ternaire) ?: --->
Affectation = += -= *= /= %= <---
&= ^= |= <<= >>=
Squentiel , --->

Les oprateurs arithmtiques et les oprateurs relationnels


Les oprateurs arithmtiques binaires (+, -, * et /) et les oprateurs relationnels ne sont dfinis
que pour des oprandes dun mme type parmi : int, long int (et leurs variantes non
signes), float, double et long double. Mais on peut constituer des expressions mixtes

ditions Eyrolles 3
exos_c++.book Page 4 Jeudi, 5. juillet 2007 11:10 11

Exercices en langage C++

(oprandes de types diffrents) ou contenant des oprandes dautres types (bool, char et
short), grce lexistence de deux sortes de conversions implicites :
les conversions dajustement de type, selon lune des hirarchies :
int -> long -> float -> double -> long double
unsinged int -> unsigned long -> float -> double -> long double
les promotions numriques, savoir des conversions systmatiques de char (avec ou sans
attribut de signe), bool et short en int.

Les oprateurs logiques


Les oprateurs logiques && (et), || (ou) et (non) acceptent nimporte quel oprande numri-
que (entier ou flottant) ou pointeur, en considrant que tout oprande de valeur non nulle cor-
respond faux :

Oprande 1 Oprateur Oprande 2 Rsultat

0 && 0 faux
0 && non nul faux
non nul && 0 faux
non nul && non nul vrai
0 || 0 faux
0 || non nul vrai
non nul || 0 vrai
non nul || non nul vrai
! 0 vrai
! non nul faux

Les deux oprateurs && et || sont court-circuit : le second oprande nest valu que si
la connaissance de sa valeur est indispensable.

Oprateurs daffectation
Loprande de gauche dun oprateur daffectation doit tre une lvalue, cest--dire la rf-
rence quelque chose de modifiable.
Les oprateurs daffectation (=, -=, += ...), appliqus des valeurs de type numrique, provo-
quent la conversion de leur oprande de droite dans le type de leur oprande de gauche. Cette
conversion force peut tre dgradante .

4 ditions Eyrolles
exos_c++.book Page 5 Jeudi, 5. juillet 2007 11:10 11

chapitre n 1 Gnralits, types de base, oprateurs et expressions

Oprateurs dincrmentation et de dcrmentation


Les oprateurs unaires dincrmentation (++) et de dcrmentation (--) agissent sur la valeur
de leur unique oprande (qui doit tre une lvalue) et fournissent la valeur aprs modification
lorsquils sont placs gauche (comme dans ++n) ou avant modification lorsquils sont placs
droite (comme dans n--).

Oprateur de cast
Il est possible de forcer la conversion dune expression quelconque dans un type de son choix,
grce loprateur dit de cast . Par exemple, si n et p sont des variables entires,
lexpression :
(double) n / p // ou : static_cast<double> (n/p)
aura comme valeur celle de lexpression entire n/p convertie en double.

Oprateur conditionnel
Cet oprateur ternaire fournit comme rsultat la valeur de son deuxime oprande si la condi-
tion mentionne en premier oprande est non nulle (vraie pour une expression boolenne), et
la valeur de son troisime oprande dans le cas contraire. Par exemple, avec cette affectation :
max = a>b ? a : b ;
on obtiendra dans la variable max la valeur de a si la condition a>b est vraie, la valeur de b
dans le cas contraire. Avec :
valeur = 2*n-1 ? a : b ;
on obtiendra dans la variable valeur la valeur de a si lexpression 2*n-1 est non nulle, la
valeur de b dans le cas contraire.

Exercice 1

nonc
liminer les parenthses superflues dans les expressions suivantes :
a = (x+5) /* expression 1 */
a = (x=y) + 2 /* expression 2 */
a = (x==y) /* expression 3 */
(a<b) && (c<d) /* expression 4 */
(i++) * (n+p) /* expression 5 */

a = x+5 /* expression 1 */
Loprateur + est prioritaire sur loprateur daffectation =.

ditions Eyrolles 5
exos_c++.book Page 6 Jeudi, 5. juillet 2007 11:10 11

Exercices en langage C++

a = (x=y) + 2 /* expression 2 */
Ici, loprateur + tant prioritaire sur =, les parenthses sont indispensables.
a = x==y /* expression 3 */
Loprateur == est prioritaire sur =.
a<b && c<d /* expression 4 */
Loprateur && est prioritaire sur loprateur <.
i++ * (n+p) /* expression 5 */
Loprateur ++ est prioritaire sur * ; en revanche, * est prioritaire sur +, de sorte quon ne
peut liminer les dernires parenthses.

Exercice 2

nonc
Soient les dclarations :
char c = '\x01' ;
short int p = 10 ;
Quels sont le type et la valeur de chacune des expressions suivantes :
p + 3 /* 1 */
c + 1 /* 2 */
p + c /* 3 */
3 * p + 5 * c /* 4 */

1. p est dabord soumis la conversion systmatique short -> int, avant dtre
ajout la valeur 3 (int). Le rsultat 13 est de type int.
2. c est dabord soumis la conversion systmatique char -> int (ce qui aboutit la
valeur 1), avant dtre ajout la valeur 1 (int). Le rsultat 2 est de type int.
3. p est dabord soumis la conversion systmatique short -> int, tandis que c est sou-
mis la conversion systmatique char -> int ; les rsultats sont alors additionns
pour aboutir la valeur 11 de type int.
4. p et c sont dabord soumis aux mmes conversions systmatiques que ci-dessus ; le rsultat
35 est de type int.

6 ditions Eyrolles
exos_c++.book Page 7 Jeudi, 5. juillet 2007 11:10 11

chapitre n 1 Gnralits, types de base, oprateurs et expressions

Exercice 3

nonc
Soient les dclarations :
char c = '\x05' ;
int n = 5 ;
long p = 1000 ;
float x = 1.25 ;
double z = 5.5 ;
Quels sont le type et la valeur de chacune des expressions suivantes :
n + c + p /* 1 */
2 * x + c /* 2 */
(char) n + c /* 3 */
(float) z + n / 2 /* 4 */

1. c est tout dabord converti en int, avant dtre ajout n. Le rsultat (10), de type int,
est alors converti en long, avant dtre ajout p. On obtient finalement la valeur 1010,
de type long.
2. On value dabord la valeur de 2*x, en convertissant 2 (int) en float, ce qui fournit la
valeur 2.5 (de type float). Par ailleurs, c est converti en int (conversion systmati-
que). On value ensuite la valeur de 2*x, en convertissant 2 (int) en float, ce qui
fournit la valeur 2.5 (de type float). Pour effectuer laddition, on convertit alors la
valeur entire 5 (c) en float, avant de lajouter au rsultat prcdent. On obtient finale-
ment la valeur 7.75, de type float.
3. n est tout dabord converti en char ( cause de loprateur de cast ), tandis que c est
converti (conversion systmatique) en int. Puis, pour procder laddition, il est nces-
saire de reconvertir la valeur de (char) n en int. Finalement, on obtient la valeur 10,
de type int.
4. z est dabord converti en float, ce qui fournit la valeur 5.5 (approximative, car, en fait,
on obtient une valeur un peu moins prcise que ne le serait 5.5 exprim en double). Par
ailleurs, on procde la division entire de n par 2, ce qui fournit la valeur entire 2. Cette
dernire est ensuite convertie en float, avant dtre ajoute 5.5, ce qui fournit le rsul-
tat 7.5, de type float.

ditions Eyrolles 7
exos_c++.book Page 8 Jeudi, 5. juillet 2007 11:10 11

Exercices en langage C++

Exercice 4

nonc
Soient les dclarations suivantes :
int n = 5, p = 9 ;
int q ;
float x ;
Quelle est la valeur affecte aux diffrentes variables concernes par chacune des instructions
suivantes ?
q = n < p ; /* 1 */
q = n == p ; /* 2 */
q = p % n + p > n ; /* 3 */
x = p / n ; /* 4 */
x = (float) p / n ; /* 5 */
x = (p + 0.5) / n ; /* 6 */
x = (int) (p + 0.5) / n ; /* 7 */
q = n * (p > n ? n : p) ; /* 8 */
q = n * (p < n ? n : p) ; /* 9 */

1. 1
2. 0
3. 5 (p%n vaut 4, tandis que p>n vaut 1).
4. 1 (p/n est dabord valu en int, ce qui fournit 1 ; puis le rsultat est converti en
float, avant dtre affect x).
5. 1.8 (p est converti en float, avant dtre divis par le rsultat de la conversion de n en
float).
6. 1.9 (p est converti en float, avant dtre ajout 0.5 ; le rsultat est divis par le
rsultat de la conversion de n en float).
7. 1 (p est converti en float, avant dtre ajout 0.5 ; le rsultat (5.5) est alors converti
en int avant dtre divis par n).
8. 25
9. 45

8 ditions Eyrolles
exos_c++.book Page 9 Jeudi, 5. juillet 2007 11:10 11

chapitre n 1 Gnralits, types de base, oprateurs et expressions

Exercice 5

nonc
Quels rsultats fournit le programme suivant :
#include <iostream>
using namespace std ;
main ()
{
int i, j, n ;
i = 0 ; n = i++ ;
cout << "A : i = " << i << " n = " << n << "\n" ;

i = 10 ; n = ++ i ;
cout << "B : i = " << i << " n = " << n << "\n" ;
i = 20 ; j = 5 ; n = i++ * ++ j ;
cout << "C : i = " << i << " j = " << j << " n = " << n << "\n" ;
i = 15 ; n = i += 3 ;
cout << "D : i = " << i << " n = " << n << "\n" ;

i = 3 ; j = 5 ; n = i *= --j ;
cout << "E : i = " << i << " j = " << j << " n = " << n << "\n" ;
}

A : i = 1 n = 0
B : i = 11 n = 11
C : i = 21 j = 6 n = 120
D : i = 18 n = 18
E : i = 12 j = 4 n = 12

ditions Eyrolles 9
exos_c++.book Page 10 Jeudi, 5. juillet 2007 11:10 11

Exercices en langage C++

Exercice 6

nonc
Quels rsultats fournira ce programme :
#include <iostream>
using namespace std ;
main()
{
int n=10, p=5, q=10, r ;

r = n == (p = q) ;
cout << "A : n = " << n << " p = " << p << " q = " << q
<< " r = " << r << "\n" ;

n = p = q = 5 ;
n += p += q ;
cout << "B : n = " << n << " p = " << p << " q = " << q << "\n" ;

q = n < p ? n++ : p++ ;


cout << "C : n = " << n << " p = " << p << " q = " << q << "\n" ;

q = n > p ? n++ : p++ ;


cout << "D : n = " << n << " p = " << p << " q = " << q << "\n" ;
}

A : n = 10 p = 10 q = 10 r = 1
B : n = 15 p = 10 q = 5
C : n = 15 p = 11 q = 10
D : n = 16 p = 11 q = 15

10 ditions Eyrolles
exos_c++.book Page 11 Jeudi, 5. juillet 2007 11:10 11

chapitre n 1 Gnralits, types de base, oprateurs et expressions

Exercice 7

nonc
Quels rsultats fournira ce programme :
#include <iostream>
using namespace std ;
main()
{ int n, p, q ;

n = 5 ; p = 2 ; /* cas 1 */
q = n++ >p || p++ != 3 ;
cout << "A : n = " << n << " p = " << p << " q = " << q << "\n" ;

n = 5 ; p = 2 ; /* cas 2 */
q = n++<p || p++ != 3 ;
cout << "B : n = " << n << " p = " << p << " q = " << q << "\n" ;

n = 5 ; p = 2 ; /* cas 3 */
q = ++n == 3 && ++p == 3 ;
cout << "C : n = " << n << " p = " << p << " q = " << q << "\n" ;

n = 5 ; p = 2 ; /* cas 4 */
q = ++n == 6 && ++p == 3 ;
cout << "D : n = " << n << " p = " << p << " q = " << q << "\n" ;
}

Il ne faut pas oublier que les oprateurs && et || nvaluent leur second oprande que lorsque
cela est ncessaire. Ainsi, ici, il nest pas valu dans les cas 1 et 3. Voici les rsultats fournis
par ce programme :
A : n = 6 p = 2 q = 1
B : n = 6 p = 3 q = 1
C : n = 6 p = 2 q = 0
D : n = 6 p = 3 q = 1

ditions Eyrolles 11

You might also like