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.
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.
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.
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.
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.int ou double.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.

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 :
(a-z, A-Z), de chiffres (0-9) et du tiret bas "_".+, -, *, /, '@', etc.) ne sont pas autorisés.int, double, if, else, for).rose n'est PAS un Rose et n'est PAS un ROSE.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
numberOfStudents ou numStudents.a, b, c, d, i, j, k, i1, j99. Évitez les noms à une seule lettre, sauf s'ils sont des noms courants comme x, y, z pour les coordonnées, i pour l'indice.row pour désigner un seul numéro de ligne et rows pour désigner plusieurs lignes.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 :
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.
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
Une instruction d'affectation :
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).
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;
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

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.