COURS et TP DE LANGAGE C++
Eléments de langage C++
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 = n » 3;
// p est égale à n décalé de 3 bits à gauche
// 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 */
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 ?
#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
ÏÏ©}
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.
1ere méthode : déclaration d’une variable, dont la valeur sera constante pour toute la portée de la fonction main.
Exemple :
ÏÞßàvoid main()
Ïϧ{
ÏϨ¹¹Ïconst float PI = 3.14159;
ÏϨ¹¹Ïfloat perimetre, rayon = 8.7;
ÏϨ¹¹Ïperimetre = 2*rayon*PI;
Ïϧ// …
ÏÏ©}
Dans ce cas, le compilateur réserve de la place en mémoire (ici 4 octets), pour la variable pi, on ne peut changer la valeur. On peut associer un modificateur« const » à tous les types.
2eme méthode: définition d’un symbole à l’aide de la directive de compilation #define.
Exemple:
#define PI = 3.14159;
ÏÞßàvoid main()
Ïϧ{
ÏϨ¹¹Ïfloat perimetre,rayon = 8.7;
ÏϨ¹¹Ïperimetre = 2*rayon*PI;
Ïϧ// ….
ÏÏ©}
Le compilateur ne réserve pas de place en mémoire, on définit ainsi une équivalence « lexicale ».
Les constantes déclarées par #define s’écrivent traditionnellement en majuscules, mais ce n’est pas une obligation.
LES CONVERSIONS DE TYPES
Le langage C++ permet d’effectuer automatiquement des conversions de type sur les scalaires:
Exemple et exercice I-11:
ÏÞßà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.0
ÏϨ¹¹Ïe = i; // e vaut 0x34
ÏÏ©}
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.
CORRIGE DES EXERCICES
Exercice I-4:
#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
ÏÏ©}
Exercice I-7:
#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 ÏÏ©}
Exercice I-8:
#include <iostream.h>
#include <conio.h>
ÏÞßàvoid main()
Ïϧ{
ÏϨ¹¹Ïint n,p,masque;
Ïϧ
ÏϨ¹¹Ïn= 0x1234567a;
ÏϨ¹¹Ïp = 4;
Ïϧ
ÏϨ¹¹Ïcout<<« valeur de n avant modification: »<< hex << n <<« \n »;
ÏϨ¹¹Ïn = n >> p;
ÏϨ¹¹Ïn = n << p;
Ïϧ
ÏϨ¹¹Ïcout<<« n modifié vaut: »<< hex << n <<« \n »; ÏϨ¹¹Ïcout <<« Pour continuer frapper une touche… »; Ïϧ
ÏϨ¹¹Ïgetch(); // Attente d’une saisie clavier ÏÏ©}
Exercice I-9:
Avec le compilateur C++ utilisé :
• sizeof(char) vaut 1
• sizeof(int) vaut 4
• sizeof(float) vaut 4
• sizeof(double) vaut 8.