Download A programming language C++: Course 2 and more Lecture notes Programming Languages in PDF only on Docsity!
COURS et TP DE LANGAGE C++
Chapitre 1
Eléments de langage C++
Joëlle MAILLEFERT
IUT de CACHAN
Département GEII 2
CHAPITRE 1
ELEMENTS DE LANGAGE C++
Les exercices ont été testés avec les outils BORLAND C++ BUILDER (toute version) en
mode « console » et BC5. Le corrigé des exercices et le listing de ces programmes se trouvent
à la fin de chaque chapitre et sont téléchargeables.
Pour avancer un peu plus vite et aborder l’essentiel de la Programmation Orientée Objet
(P.O.O.), on pourra étudier les chapitres et paragraphes marqués de ***, dans un deuxième
temps.
INTRODUCTION
Le langage C++ est un langage évolué et structuré. C’est en ce sens une évolution du langage
C.
Il possède en outre les fonctionnalités de la programmation orienté objet.
Le langage C++ se trouve à la frontière entre le langage C, non objet, et le langage JAVA
conçu d’emblée en orienté objet.
On trouve sur le marché un grand nombre de compilateurs C++ destinés à différents
microprocesseurs ou microcontrôleurs.
Le langage C++ possède assez peu d'instructions, il fait par contre appel à des bibliothèques,
fournies en plus ou moins grand nombre avec le compilateur.
exemples: math.h : bibliothèque de fonctions mathématiques
iostream.h : bibliothèque d'entrées/sorties standard
complex.h : bibliothèque contenant la classe des nombres complexes.
On ne saurait développer un programme en C++ sans se munir de la documentation
concernant ces bibliothèques.
Echanger les 2 premières instructions, puis exécuter le programme.
Modifier maintenant le programme comme ci-dessous, puis le tester :
Dans ce programme, on introduit 3 nouveaux concepts :
- La notion de déclaration de variables : les variables sont les données que manipulera le
programme lors de son exécution. Ces variables sont rangées dans la mémoire vive de
l’ordinateur. Elles peuvent être déclarées au moment où on en a besoin dans le programme.
Pour une meilleure lisibilité, il est conseillé de les déclarer au début (sauf peut-être pour des
variables créées par commodité et qui ne servent que très localement dans le programme).
- La notion d’affectation, symbolisée par le signe =. La source de l’information est à droite du
signe =, la destination à gauche.
a = 10; signifie « a prend la valeur 10 »
s = a + b; signifie « s prend la valeur a + b »
s = s + 5; signifie « la nouvelle valeur de s est égale à l’ancienne + 5 »
- La notion d’opération. Un programme informatique est exécuté séquentiellement, c’est à
dire une instruction après l’autre. Lorsque l’instruction s = a + b est exécutée, a possède la
valeur 10, et b possède la valeur 50.
//les commentaires s'écrivent derrière 2 barres obliques
#include <iostream.h> //sorties standard #include <conio.h>
ÏÞßàvoid main() Ïϧ{ ÏϨ¹¹Ïint a, b, calcul ; //déclaration de 3 variables ÏϨ¹¹Ïcout<<"BONJOUR";//affichage d'un message sur l'écran ÏϨ¹¹Ïa = 10 ; // affectation ÏϨ¹¹Ïb = 50 ; // affectation ÏϨ¹¹Ïcalcul = (a + b)*2 ; // ÏϨ¹¹Ïcout <<" Affichage de a : "<< a<<"\n"; ÏϨ¹¹Ïcout <<" Affichage de b : "<< b<<"\n"; ÏϨ¹¹Ïcout <<" Voici le résultat : "<< calcul<<"\n"; ÏϨ¹¹Ïcout<<"Pour continuer frapper une touche..."; ÏϨ¹¹Ïgetch(); // Attente d'une saisie clavier ÏÏ©}
LES DIFFERENTS TYPES DE VARIABLES
1- Les entiers
Le langage C++ distingue plusieurs types d'entiers:
___________________________________________________________
TYPE DESCRIPTION TAILLE MEMOIRE
___________________________________________________________
int entier standard signé 4 octets: - 231^ ≤ n ≤ 231-
unsigned int entier positif 4 octets: 0 ≤ n ≤ 232
short entier court signé 2 octets: - 215^ ≤ n ≤ 215-
unsigned short entier court non signé 2 octets: 0 ≤ n ≤ 216
char caractère signé 1 octet : - 27^ ≤ n ≤ 27-
unsigned char caractère non signé 1 octet : 0 ≤n ≤ 28
_____________________________________________________________
Numération:
- En décimal les nombres s'écrivent tels que,
- En hexadécimal ils sont précédés de 0x.
exemple: 127 en décimal s'écrit 0x7f en hexadécimal.
Remarque: En langage C++, le type char possède une fonction de changement de type vers
un entier:
- Un caractère peut voir son type automatiquement transformé vers un entier de 8 bits
- Il est interprété comme un caractère alphanumérique du clavier.
Exemples:
Les caractères alphanumériques s'écrivent entre ‘ ‘
Le caractère 'b' a pour valeur 98.
Le caractère 22 a pour valeur 22.
Le caractère 127 a pour valeur 127.
Le caractère 257 a pour valeur 1 (ce nombre s'écrit sur 9 bits, le bit de poids fort est perdu).
2- Les réels
Un réel est composé :
- d'un signe,
- d'une mantisse,
- d'un exposant,
Un nombre de bits est réservé en mémoire pour chaque élément.
Le langage C++ distingue 2 types de réels:
_________________________________________________________
TYPE DESCRIPTION TAILLE MEMOIRE
_________________________________________________________
float réel standard 4 octets
double réel double précision 8 octets
__________________________________________________________
LES INITIALISATIONS
Le langage C++ permet l'initialisation des variables dès leurs déclarations:
char c; est équivalent à char c = 'A';
c = 'A';
int i; est équivalent à int i = 50;
i = 50;
Cette règle s'applique à tous les nombres, char, int, float ... Pour améliorer la lisibilité des
programmes et leur efficacité, il est conseillé de l’utiliser.
SORTIES DE NOMBRES OU DE TEXTE A L'ECRAN
L’OPERATEUR COUT
Ce n'est pas une instruction du langage C++, mais une fonction de la bibliothèque iostream.h.
Exemple: affichage d'un texte:
cout <<"BONJOUR"; // pas de retour à la ligne du curseur après l'affichage
cout <<"BONJOUR\n"; // affichage du texte, puis retour à la ligne du curseur
Exercice I-2: Tester le programme suivant et conclure.
Exercice I-3: Affichage d'une variable de type int ou float:
Tester le programme suivant et conclure.
#include <iostream.h> #include <conio.h>
ÏÞßàvoid main() Ïϧ{ ÏϨ¹¹Ïcout<<"BONJOUR " ; ÏϨ¹¹Ïcout <<"IL FAIT BEAU\n"; ÏϨ¹¹Ïcout <<"BONNES VACANCES"; ÏϨ¹¹Ïcout <<"Pour continuer frapper une touche..."; ÏϨ¹¹Ïgetch(); // Attente d'une saisie clavier ÏÏ©}
#include <iostream.h> #include <conio.h>
ÏÞßàvoid main() Ïϧ{ ÏϨ¹¹Ïint u = 1000 ; ÏϨ¹¹Ïfloat s = 45.78 ; ÏϨ¹¹Ïcout <<"Voici u (en base 10) : " << u << "\n"; ÏϨ¹¹Ïcout <<"Voici u (en hexa) : "<< hex << u <<"\n"; ÏϨ¹¹Ïcout <<"Voici s : "<< s << "\n"; ÏϨ¹¹Ïcout <<"Pour continuer frapper une touche..."; ÏϨ¹¹Ïgetch(); // Attente d'une saisie clavier ÏÏ©}
Exercice I-6:
Pour votre compilateur C++, la taille des entiers est de 32 bits;
Que va-t-il se passer, à l'affichage, lors de l'exécution du programme suivant?
Exercice I-7:
a et b sont des réels, a = -21,43 b = 4,782, calculer et afficher a+b, a-b, a*b, a/b, en
soignant l’interface homme/machine.
LES OPERATEURS
Opérateurs arithmétiques sur les réels: + - * / avec la hiérarchie habituelle.
Opérateurs arithmétiques sur les entiers: + - * / (quotient de la division) % (reste de la
division) avec la hiérarchie habituelle.
Exemple particulier: char c, d; c = 'G'; d = c+'a'-'A';
Les caractères sont des entiers sur 8 bits, on peut donc effectuer des opérations. Sur cet
exemple, on transforme la lettre majuscule G en la lettre minuscule g.
Opérateurs logiques sur les entiers:
& ET | OU ^ OU EXCLUSIF ~ COMPLEMENT A UN
« DECALAGE A GAUCHE
» DECALAGE A DROITE.
Exemples: p = n « 3; // p est égale à n décalé de 3 bits à gauche
p = n » 3; // p est égale à n décalé de 3 bits à droite
L'opérateur sizeof(type) renvoie le nombre d'octets réservés en mémoire pour chaque type
d'objet.
Exemple: n = sizeof(char); /* n vaut 1 */
#include <iostream.h> #include <conio.h>
ÏÞßàvoid main() Ïϧ{ ÏϨ¹¹Ïint a = 12345000, b = 60000000, somme; ÏϨ¹¹Ïsomme=ab; ÏϨ¹¹Ïcout<<"ab = "<<somme<<"\n"; Ïϧ ÏϨ¹¹Ïcout <<"Pour continuer frapper une touche..."; ÏϨ¹¹Ïgetch(); /* Attente d'une saisie clavier */ ÏÏ©}
Exercice I-8: n est un entier (n = 0x1234567a), p est un entier (p = 4). Ecrire un programme
qui met à 0 les p bits de poids faibles de n.
Exercice I-9: quels nombres va renvoyer le programme suivant?
INCREMENTATION - DECREMENTATION
Le langage C++ autorise des écritures simplifiées pour l'incrémentation et la décrémentation
de variables de type entier (int, char, long)
i = i+1; est équivalent à i++;
i = i-1; est équivalent à i--;
OPERATEURS COMBINES
Le langage C++ autorise des écritures simplifiées lorsqu'une même variable est utilisée de
chaque côté du signe = d'une affectation. Ces écritures sont à éviter lorsque l'on débute l'étude
du langage C++ car elles nuisent à la lisibilité du programme.
a = a+b; est équivalent à a+= b;
a = a-b; est équivalent à a-= b;
a = a & b; est équivalent à a&= b;
LES DECLARATIONS DE CONSTANTES
Le langage C++ autorise 2 méthodes pour définir des constantes.
#include <iostream.h> #include <conio.h>
ÏÞßàvoid main() Ïϧ{ ÏϨ¹¹Ïcout<<"TAILLE D'UN CARACTERE : "<<sizeof(char)<< "\n"; ÏϨ¹¹Ïcout<<"TAILLE D'UN ENTIER : " <<sizeof(int)<< "\n"; ÏϨ¹¹Ïcout<<"TAILLE D'UN REEL : " <<sizeof(float)<< "\n"; ÏϨ¹¹Ïcout<<"TAILLE D'UN DOUBLE : " <<sizeof(double)<< "\n"; ÏϨ¹¹Ïcout <<"Pour continuer frapper une touche..."; ÏϨ¹¹Ïgetch(); // Attente d'une saisie clavier ÏÏ©}
LES CONVERSIONS DE TYPES
Le langage C++ permet d'effectuer automatiquement des conversions de type sur les scalaires:
Exemple et exercice I-11:
Une conversion de type float --> int ou char peut-être dégradante.
Une conversion de type int ou char --> float est dite non dégradante.
ÏÞßàvoid main() Ïϧ{ ÏϨ¹¹Ïchar c=0x56,d=25,e; ÏϨ¹¹Ïint i=0x1234,j; ÏϨ¹¹Ïfloat r=678.9,s; ÏϨ¹¹Ïj = c; // j vaut 0x0056, utilisé précédemment pour afficher Ïϧ // le code ASCII d’un caractère ÏϨ¹¹Ïj = r; // j vaut 678 ÏϨ¹¹Ïs = d; // s vaut 25. ÏϨ¹¹Ïe = i; // e vaut 0x ÏÏ©}
CORRIGE DES EXERCICES
Exercice I-4:
Exercice I-7:
#include <iostream.h> #include <conio.h>
ÏÞßàvoid main() Ïϧ{ ÏϨ¹¹Ïint a,b; ÏϨ¹¹Ïa= -21430; ÏϨ¹¹Ïb= 4782; ÏϨ¹¹Ïcout<<"A + B = "<< a+b <<"\n"; ÏϨ¹¹Ïcout<<"A - B = "<< a-b <<"\n"; ÏϨ¹¹Ïcout<<"A x B = "<< a*b <<"\n"; ÏϨ¹¹Ïcout<<"A sur B = "<< a/b <<"\n" ; ÏϨ¹¹Ïcout<<"A mod B = "<< a%b <<"\n"; ÏϨ¹¹Ïcout<<"Pour continuer frapper une touche..."; ÏϨ¹¹Ïgetch(); // Attente d'une saisie clavier ÏÏ©}
#include <iostream.h> #include <conio.h>
ÏÞßàvoid main() Ïϧ{ ÏϨ¹¹Ïfloat a,b; Ïϧ ÏϨ¹¹Ïa= -21430; ÏϨ¹¹Ïb= 4782; Ïϧ ÏϨ¹¹Ïcout<<"A + B = "<< a+b <<"\n"; ÏϨ¹¹Ïcout<<"A - B = "<< a-b <<"\n"; ÏϨ¹¹Ïcout<<"A x B = "<< a*b <<"\n"; ÏϨ¹¹Ïcout<<"A sur B = "<< a/b <<"\n" ; Ïϧ ÏϨ¹¹Ïcout<<"Pour continuer frapper une touche..."; ÏϨ¹¹Ïgetch(); // Attente d'une saisie clavier ÏÏ©}
COURS et TP DE LANGAGE C++
Chapitre 2
Saisie de nombres et de caractères au clavier
Joëlle MAILLEFERT
IUT de CACHAN
Département GEII 2
CHAPITRE 2
SAISIE DE NOMBRES ET DE CARACTERES AU
CLAVIER
LA FONCTION GETCH
La fonction getch, appartenant à la bibliothèque conio.h permet la saisie clavier d’un
caractère alphanumérique, sans écho écran. La saisie s'arrête dès que le caractère a été
frappé.
La fonction getch n'est pas définie dans la norme ANSI mais elle existe dans les
bibliothèques des compilateurs.
On peut utiliser getch de deux façons:
- sans retour de variable au programme:
Exemple: cout<<"POUR CONTINUER FRAPPER UNE TOUCHE ";
getch();
- avec retour de variable au programme:
Exemple: char alpha;
cout<<"ENTRER UN CARACTERE (ATTENTION PAS DE
RETURN)";
alpha = getch();
cout<<"\nVOICI CE CARACTERE: "<<alpha;
Les parenthèses vides de getch() signifient qu'aucun paramètre n'est passé à cette
fonction par le programme appelant.
L’OPERATEUR CIN
L’opérateur cin, spécifique à C++, appartient à la bibliothèque iostream.h, et permet la
saisie à partir du clavier de n'importe quel type de variable (l’affichage prend en compte
le type de la variable).
La saisie s'arrête avec "RETURN" (c'est à dire LF), les éléments saisis s'affichent à
l'écran ( saisie avec écho écran ).
Tous les éléments saisis après un caractère d'espacement (espace, tabulation) sont
ignorés.
CORRIGE DES EXERCICES
Exercice II_1:
Exercice II_2:
#include <iostream.h> #include <conio.h>
ÏÞßàvoid main() Ïϧ{ ÏϨ¹¹Ïint I,V,M,P; ÏϨ¹¹Ïcout<<"Entrer le nombre d'inscrits : "; ÏϨ¹¹Ïcin>>I; ÏϨ¹¹Ïcout<<"Entrer le nombre de votants : "; ÏϨ¹¹Ïcin>>V; ÏϨ¹¹ÏP = V*100/I; ÏϨ¹¹ÏM = V/2 + 1; // Division entière ÏϨ¹¹Ïcout<<"Participation : "<<P<<"% - Majorité: "; ÏϨ¹¹Ïcout<<M<<" bulletins\n"; ÏϨ¹¹Ïcout<<"POUR CONTINUER FRAPPER UNE TOUCHE "; ÏϨ¹¹Ïgetch(); ÏÏ©}
#include <iostream.h> #include <conio.h>
ÏÞßàvoid main() Ïϧ{ ÏϨ¹¹Ïchar c; ÏϨ¹¹Ïint u; ÏϨ¹¹Ïcout<<"ENTRER UN CARACTERE : "; ÏϨ¹¹Ïcin >> c; ÏϨ¹¹Ïu = c; //conversion automatique de type ÏϨ¹¹Ïcout<<"VOICI SON CODE ASCII : "<< u << "\n"; ÏϨ¹¹Ïcout<<"Pour continuer frapper une touche..."; ÏϨ¹¹Ïgetch(); ÏÏ©}
Exercice II_3:
#include <iostream.h> #include <conio.h>
ÏÞßàvoid main() Ïϧ{ ÏϨ¹¹Ïfloat r1, r2, r3, moy; Ïϧ ÏϨ¹¹Ïcout<<"ENTRER UN NOMBRE REEL : "; ÏϨ¹¹Ïcin >> r1; Ïϧ ÏϨ¹¹Ïcout<<"ENTRER UN NOMBRE REEL : "; ÏϨ¹¹Ïcin >> r2; Ïϧ ÏϨ¹¹Ïcout<<"ENTRER UN NOMBRE REEL : "; ÏϨ¹¹Ïcin >> r3; Ïϧ ÏϨ¹¹Ïmoy = (r1 + r2 + r3) / 3; Ïϧ ÏϨ¹¹Ïcout<<"MOYENNE DE CES 3 NOMBRES : "<<moy<<"\n"; ÏϨ¹¹Ïcout<<"Pour continuer frapper une touche ..."; Ïϧ ÏϨ¹¹Ïgetch(); ÏÏ©}