Introduction
Dans ce laboratoire, vous allez apprendre les variables et les types en C++. Vous allez apprendre à définir des variables et à utiliser différents types de variables.
Aperçu du contenu
Les programmes informatiques manipulent (ou traitent) des données. Une variable est utilisée pour stocker une donnée à des fins de traitement. Elle est appelée variable car vous pouvez modifier la valeur stockée.
- Variables
- Identificateurs
- Déclaration de variables
- Constantes
- Expressions
- Affectation
- Types de base
- Littéraux pour les types de base et les chaînes de caractères
Variables
Une variable est un emplacement de stockage nommé qui stocke une valeur d'un type de données particulier. En d'autres termes, une variable a un nom, un type et stocke une valeur.
- Une variable a un nom (ou identificateur), par exemple
radius,area,age,height. Le nom est nécessaire pour identifier de manière unique chaque variable, afin d'attribuer une valeur à la variable et de récupérer la valeur stockée. - Une variable a un type tel que
intoudouble. - Une variable peut stocker une valeur de ce type particulier. Une variable est associée à un type et ne peut stocker que des valeurs du type particulier.
- Le type détermine la taille et la disposition des données, la plage de ses valeurs et l'ensemble des opérations qui peuvent être appliquées.
Le diagramme suivant illustre deux types de variables : int et double. Une variable int stocke un entier (nombre entier). Une variable double stocke un nombre réel.

Identificateurs
Un identificateur est nécessaire pour nommer une variable (ou toute autre entité telle qu'une fonction ou une classe). C++ impose les règles suivantes pour les identificateurs :
- Un identificateur est une séquence de caractères composée de lettres majuscules et minuscules
(a-z, A-Z), de chiffres(0-9)et du tiret bas"_". - Les espaces blancs (espace, tabulation, saut de ligne) et autres caractères spéciaux (tels que
+,-,*,/,'@', etc.) ne sont pas autorisés. - Un identificateur doit commencer par une lettre ou un tiret bas. Il ne peut pas commencer par un chiffre. Les identificateurs commençant par un tiret bas sont généralement réservés à l'utilisation système.
- Un identificateur ne peut pas être un mot clé réservé ou un littéral réservé (par exemple,
int,double,if,else,for). - Les identificateurs sont sensibles à la casse. Un
rosen'est PAS unRoseet n'est PAS unROSE.
Convention de nommage des variables
Le nom d'une variable est un nom de substantif, ou une locution nominale composée de plusieurs mots. Le premier mot est en minuscules, tandis que les mots suivants commencent par une majuscule, sans espace entre les mots. Par exemple, thefontSize, roomNumber, xMax et thisIsAVeryLongVariableName, qui est connue sous le nom de camel-case.
Recommandations
- Il est important de choisir un nom qui soit auto-déscriptif et reflète étroitement la signification de la variable, par exemple,
numberOfStudentsounumStudents. - N'utilisez pas de noms sans sens comme
a,b,c,d,i,j,k,i1,j99. Évitez les noms à une seule lettre, sauf s'ils sont des noms courants commex,y,zpour les coordonnées,ipour l'indice. - Il est parfaitement acceptable d'utiliser des noms longs de 30 caractères environ pour s'assurer que le nom reflète précisément sa signification.
- Utilisez les noms de substantifs singuliers et pluriels avec prudence pour différencier les variables singulières et pluriels. Par exemple, utilisez la variable
rowpour désigner un seul numéro de ligne etrowspour désigner plusieurs lignes.
Déclaration de variable
Vous devez d'abord déclarer son nom et son type avant de l'utiliser, selon l'une des syntaxes suivantes :
| Syntaxe | Exemple |
|---|---|
| Déclarer une variable d'un type spécifié | int option; |
| Déclarer plusieurs variables du même type, séparées par des virgules | double sum, difference, product, quotient; |
| Déclarer une variable et assigner une valeur initiale de ce type | int magicNumber = 88; |
| Déclarer plusieurs variables avec des valeurs initiales de ce type | double sum = 0.0, product = 1.0; |
Par exemple
int mark1; // Déclarer une variable int appelée mark1
mark1 = 76; // Utiliser mark1
int mark2; // Déclarer la variable int mark2
mark2 = mark1 + 10; // Utiliser mark2 et mark1
double average; // Déclarer la variable double average
average = (mark1 + mark2) / 2.0; // Utiliser average, mark1 et mark2
int mark1; // Erreur : déclarer deux fois
mark2 = "Hello"; // Erreur : assigner une valeur d'un type différent
int number; // Déclarée mais non initialisée
cout << number << endl; // Utilisée avant d'être initialisée, sans avertissement/erreur, mais résultat inattendu.
Notez que :
- En C++, vous devez déclarer le nom d'une variable avant de pouvoir l'utiliser.
- C++ est un langage "fortement typé". Une variable a un type. Une fois le type d'une variable déclaré, elle ne peut stocker que des valeurs appartenant à ce type particulier.
- Chaque variable ne peut être déclarée qu'une fois.
- En C++, vous pouvez déclarer une variable n'importe où dans le programme, tant qu'elle est déclarée avant d'être utilisée.
- Le type d'une variable ne peut pas être changé dans le programme.
- Une variable qui est juste déclarée mais non initialisée contient des données inappropriées. C/C++ n'émettra aucun avertissement/erreur si vous utilisez une variable avant de l'initialiser - ce qui peut entraîner des résultats inattendus.
Constantes (const)
Les constantes sont des variables non modifiables, déclarées avec le mot clé const. Leur valeur ne peut pas être modifiée pendant l'exécution du programme. De plus, const doit être initialisée lors de la déclaration. Par exemple :
const double PI = 3.1415926; // Nécessite une initialisation
Convention de nommage des constantes : Utiliser des mots en majuscules, joints par des tirets bas. Par exemple, MIN_VALUE.
Expressions
Une expression est une combinaison d'opérateurs (tels que '+', '-', '*', '/') et d'opérandes (variables ou valeurs littérales), qui peut être évaluée pour produire une seule valeur d'un certain type. Par exemple :
1 + 2 * 3 // donne un int 7
int sum, number;
sum + number // évalué en une valeur de type int
double principal, interestRate;
principal * (1 + interestRate) // évalué en une valeur de type double
Affectation (=)
Une instruction d'affectation :
- affecte une valeur littérale (du côté droit) à une variable (du côté gauche) ; ou
- évalue une expression (du côté droit) et affecte la valeur résultante à une variable (du côté gauche).
Le côté droit doit être une valeur ; et le côté gauche doit être une variable (ou une adresse mémoire).
La syntaxe de l'instruction d'affectation est la suivante :
| Syntaxe | Exemple |
|---|---|
| Affecte la valeur littérale (du côté droit) à la variable (du côté gauche) | number = 88; |
| Évalue l'expression (côté droit) et affecte le résultat à la variable (côté gauche) | sum = sum + number; |
L'instruction d'affectation doit être interprétée de la manière suivante : L'expression du côté droit (RHS) est d'abord évaluée pour produire une valeur résultante (appelée rvalue ou valeur droite). La rvalue est ensuite affectée à la variable du côté gauche (LHS) (ou lvalue, qui est un emplacement qui peut contenir une rvalue).
Types de base
Le tableau ci-dessous montre la taille, la valeur minimale et maximale typique des types primitifs. Encore une fois, notez que les tailles dépendent de l'implémentation.
| Catégorie | Type | Description | Octets(Typique) | Minimum(Typique) | Maximum(Typique) |
|---|---|---|---|---|---|
| Entiers | int(ou signed int) | Entier signé (d'au moins 16 bits) | 4 (2) | -2147483648 | 2147483647 |
| Entiers | unsigned int | Entier non signé (d'au moins 16 bits) | 4 (2) | 0 | 4294967295 |
| Entiers | char | Caractère (peut être signé ou non signé selon l'implémentation) | 1 | ||
| Entiers | signed char | Caractère ou entier signé très petit (garanti signé) | 1 | -128 | 127 |
| Entiers | unsigned char | Caractère ou entier non signé très petit (garanti non signé) | 1 | 0 | 255 |
| Entiers | signed short | Entier signé court (d'au moins 16 bits) | 2 | -32768 | 32767 |
| Entiers | unsigned short | Entier non signé court (d'au moins 16 bits) | 2 | 0 | 65535 |
| Entiers | long | Entier signé long (d'au moins 32 bits) | 4 (8) | -2147483648 | 2147483647 |
| Entiers | unsigned long | Entier non signé long (d'au moins 32 bits) | 4 (8) | 0 | même que ci-dessus |
| Entiers | long long | Entier signé très long (d'au moins 64 bits) | 8 | -2e^63 | 2e^63-1 |
| Entiers | unsigned long long | Entier non signé très long (d'au moins 64 bits) | 8 | 0 | 2e^64-1 |
| Nombres réels | float | Nombre à virgule flottante, ≈7 chiffres | 4 | 3.4e^38 | 3.4e^(-38) |
| Nombres réels | double | Nombre à virgule flottante à double précision, ≈15 chiffres | 8 | 1.7e^308 | 1.7e^(-308) |
| Nombres réels | long double | Nombre à virgule flottante à double précision longue, ≈19 chiffres | 12 (8) | ||
| Nombres booléens | bool | Valeur booléenne de soit true soit false |
1 | false (0) | true (1 ou non nul) |
| Caractères larges | wchar_t, char16_t, char32_t | Caractère large (à double octet) | 2 (4) |
L'opérateur sizeof
C/C++ fournit un opérateur unaire sizeof pour obtenir la taille de l'opérande (en octets). Le programme suivant utilise l'opérateur sizeof pour afficher la taille des types fondamentaux (enregistrez le code suivant dans test.cpp dans /home/labex/Code).
/*
* Affiche la taille des types fondamentaux.
*/
#include <iostream>
using namespace std;
int main() {
cout << "sizeof(char) est " << sizeof(char) << " octets " << endl;
cout << "sizeof(short) est " << sizeof(short) << " octets " << endl;
cout << "sizeof(int) est " << sizeof(int) << " octets " << endl;
cout << "sizeof(long) est " << sizeof(long) << " octets " << endl;
cout << "sizeof(long long) est " << sizeof(long long) << " octets " << endl;
cout << "sizeof(float) est " << sizeof(float) << " octets " << endl;
cout << "sizeof(double) est " << sizeof(double) << " octets " << endl;
cout << "sizeof(long double) est " << sizeof(long double) << " octets " << endl;
cout << "sizeof(bool) est " << sizeof(bool) << " octets " << endl;
return 0;
}
Sortie :
sizeof(char) est 1 octets
sizeof(short) est 2 octets
sizeof(int) est 4 octets
sizeof(long) est 4 octets
sizeof(long long) est 8 octets
sizeof(float) est 4 octets
sizeof(double) est 8 octets
sizeof(long double) est 12 octets
sizeof(bool) est 1 octets

L'instruction typedef
Taper unsigned int plusieurs fois peut devenir ennuyeux. L'instruction typedef peut être utilisée pour créer un nouveau nom pour un type existant. Par exemple, vous pouvez créer un nouveau type appelé "uint" pour "unsigned int" comme suit. Vous devriez placer le typedef immédiatement après #include. Utilisez typedef avec soin car cela rend le programme difficile à lire et à comprendre.
typedef unsigned int uint;
Beaucoup de compilateurs C/C++ définissent un type appelé size_t, qui est un typedef de unsigned int.
typedef unsigned int size_t;
Constantes pour les types de base et les chaînes de caractères
Littéraux entiers
Un nombre entier, tel que 123 et -456, est traité comme un int par défaut. Par exemple :
int number = -123;
int sum = 4567;
En plus des entiers décimaux de base 10 par défaut, vous pouvez utiliser un préfixe '0x' pour une valeur en hexadécimal et le préfixe '0b' pour une valeur binaire (dans certains compilateurs), par exemple :
int number1 = 1234; // Décimal
int number2 = 01234; // Octal 1234, Décimal 2322
int number3 = 0x1abc; // Hexadécimal 1ABC, Décimal 15274
int number4 = 0b10001001; // Binaire (peut ne pas fonctionner dans certains compilateurs)
Un littéral long est identifié par un suffixe 'L' ou 'l' (évitez le minuscule, qui peut être confondu avec le nombre un). Un long long int est identifié par un suffixe 'LL'. Vous pouvez également utiliser le suffixe 'U' pour unsigned int, 'UL' pour unsigned long et 'ULL' pour unsigned long long int. Par exemple :
long number = 12345678L; // Suffixe 'L' pour long
long sum = 123; // int 123 est automatiquement converti en long 123L
long long bigNumber = 987654321LL; // Nécessite le suffixe 'LL' pour long long int
Aucun suffixe n'est nécessaire pour les littéraux short. Mais vous ne pouvez utiliser que des valeurs entières dans la plage autorisée. Par exemple :
short midSizeNumber = -12345;
Littéraux à virgule flottante
Un nombre avec une virgule, tel que 55.66 et -33.44, est traité comme un double par défaut. Vous pouvez également les exprimer en notation scientifique, par exemple 1.2e3, -5.5E-6, où e ou E représente l'exposant en puissance de 10. Vous pouvez précéder la partie fractionnaire ou l'exposant d'un signe plus (+) ou moins (-). L'exposant doit être un entier.
Vous DEVEZ utiliser un suffixe 'f' ou 'F' pour les littéraux float, par exemple -1.2345F. Par exemple :
float average = 55.66; // Erreur! Le côté droit est un double. Nécessite le suffixe 'f' pour float.
float average = 55.66f;
Utilisez le suffixe 'L' (ou 'l') pour long double.
Littéraux booléens
Il n'y a que deux littéraux bool, soit true et false. Par exemple :
bool done = true;
bool gameOver = false;
int i;
if (i == 9) { // Renvoie soit true soit false
......
}
Littéraux de caractères
Un littéral de char imprimable est écrit en entourant le caractère d'une paire de apostrophes simples, par exemple 'z', '$' et '9'. En C++, les caractères sont représentés à l'aide du code ASCII sur 8 bits et peuvent être traités comme des entiers signés sur 8 bits dans les opérations arithmétiques. En d'autres termes, char et l'entier signé sur 8 bits sont interchangeables. Vous pouvez également assigner un entier dans la plage [-128, 127] à une variable char ; et [0, 255] à un unsigned char. Par exemple :
char letter = 'a'; // Identique à 97
char anotherLetter = 98; // Identique à la lettre 'b'
cout << letter << endl; // Affiche 'a'
cout << anotherLetter << endl; // Affiche 'b' au lieu du nombre
anotherLetter += 2; // 100 ou 'd'
cout << anotherLetter << endl; // Affiche 'd'
cout << (int)anotherLetter << endl; // Affiche 100
Littéraux de chaînes de caractères
Un littéral de String est composé de zéro ou plusieurs caractères entourés d'une paire de guillemets doubles, par exemple "Hello, world!", "The sum is ", "". Par exemple :
String directionMsg = "Turn Right";
String greetingMsg = "Hello";
String statusMsg = ""; // Chaîne vide
Exemple (Littéraux)
/* Test des types primitifs */
#include <iostream>
using namespace std;
int main() {
char gender ='m'; // char est entre apostrophes simples
bool isMarried = true; // true(non nul) ou false(0)
unsigned short numChildren = 8; // [0, 255]
short yearOfBirth = 1945; // [-32767, 32768]
unsigned int salary = 88000; // [0, 4294967295]
double weight = 88.88; // Avec partie fractionnaire
float gpa = 3.88f; // Nécessite le suffixe 'f' pour float
// "cout <<" peut être utilisé pour afficher la valeur de n'importe quel type
cout << "Genre est " << gender << endl;
cout << "Est marié est " << isMarried << endl;
cout << "Nombre d'enfants est " << numChildren << endl;
cout << "Année de naissance est " << yearOfBirth << endl;
cout << "Salaire est " << salary << endl;
cout << "Poids est " << weight << endl;
cout << "Moyenne est " << gpa << endl;
return 0;
}
Sortie :
Genre est m
Est marié est 1 // true
Nombre d'enfants est 8
Année de naissance est 1945
Salaire est 88000
Poids est 88.88
Moyenne est 3.88

Résumé
Dans cette partie, nous avons présenté plusieurs types fondamentaux. Vous devriez savoir comment représenter une variable et comment opérer sur elle. Gardez à l'esprit quelle est la taille de chaque type en mémoire et la plage de chaque type.



