LES VARIABLES
Qu'est-ce qu'une variable ?
Une variable est un nom permettant de repérer un emplacement mémoire. On pourra là modifier et là faire évoluer au cours du programme.
Bonnes pratiques sur le nom de variable
Imaginons que vous deviez calculer la moyenne d'un groupe de notes, il est évident qu'on préférera appelée cette variable moyenne, plutôt que x, dans le sens où l'on comprend facilement que représente cette variable en mémoire.
Donc faîtes toujours très attention à bien choisir le nom de vos variables (sans fautes d'orthographe c'est mieux ) et cela sous forme de nom (pas de verbes, articles définis, pronoms, etc.)
Déclarer une variable
En C, avec une grande rigueur et beaucoup de réflexions pour résoudre son problème, on doit spécifier quel type de variable choisir.
Par exemple, reprenons le cas de notre moyenne à calculer, il est évident qu'on choisira un nombre réel (flottant en informatique) plutôt qu'un entier naturel (entier en informatique), car on attend le résultat d'une division euclidienne.
Pour déclarer notre variable moyenne on choisira donc d'utiliser le type flottant (float)
Code:
float moyenne;
Code:
double moyenne;
Ne cherchez pas à comprendre, dites vous simplement que la précision de la valeur trouvée (moyenne) sera plus précise avec le type double qu'avec le type float. On choisira donc l'un ou l'autre type selon la précision souhaitée.
Voici un tableau des différents types en C
int | Entiers naturels |
float | Nombres réels (précision 32 bits) |
double | Nombres réels (précision 64 bits) |
char | Caractère |
Affecter une variable
Il y a deux possibilités:
possibilité n°1
Code:
float moyenne; /* déclaration de la variable moyenne type float (nombre réel) */ moyenne = 12.5; /* affectation de la valeur 12.5 à la variable moyenne */
Code:
float moyenne = 12.5; /* déclaration et affectation de la variable moyenne type float */
On voit que les commentaires de mon code sont entre /* et */
On voit que la fin des instructions sont représentées par un point virgule
Ensuite si je dois faire un choix entre les deux possibilités, je choisis la n°1 sans hésiter, pourquoi ?
En C, et surtout dans une norme très restrictive (C89, ma préférée pour sa rigueur), on déclare toujours les variables avant de les affecter, ça rend très lisible l'intention du codeur par le lecteur.
Voici un exemple de code lisible
Code:
#include <stdio.h> int main(void) { float notes[6]; /* déclaration tableau de 6 flottants */ float somme; /* déclaration d'un flottant représentant la somme des notes */ float moyenne; /* déclaration d'un flottant représentant la moyenne des notes */ /* Affectation des notes dans notre tableau de flottants */ notes[0] = 12.5; notes[1] = 6; notes[2] = 7.5; notes[3] = 16; notes[4] = 2.5; notes[5] = 8; somme = notes[0] + notes[1] + notes[2] + notes[3] + notes[4] + notes[5]; /* Affectation de la somme des notes dans la variable somme */ moyenne = somme/6; /* Affectation dans moyenne du résultat somme/6 */ printf("La moyenne vaut %f", moyenne); /* La moyenne vaut 8.75 */ return 0; }
Le fait de choisir la possibilité n°1, vous impose d'avoir une réflexion avant de coder, c'est très important de généraliser cette façon de faire, il faut toujours prévoir avant de coder. Souvent on voit codage et réflexion en même temps, par expérience, ça donne très rarement du bon.
La possibilité n°2 mélange déclaration et affectation de variable, souvent les expérimentés l'utilisent, mais si vous lisez ce cours, c'est que vous ne l'êtes pas.
Code:
#include <stdio.h> int main(void) { float notes[6] = {12.5, 6, 7.5, 16, 2.5, 8}; /* déclaration et affectation du tableau de 6 flottants */ float somme; /* déclaration d'un flottant représentant la somme des notes */ float moyenne; /* déclaration d'un flottant représentant la moyenne des notes */ somme = notes[0] + notes[1] + notes[2] + notes[3] + notes[4] + notes[5]; /* Affectation de la somme des notes dans la variable somme */ moyenne = somme/6; /* Affectation dans moyenne du résultat somme/6 */ printf("La moyenne vaut %f", moyenne); /* La moyenne vaut 8.75 */ return 0; }
- C'est plus court
- C'est plus pratique (la façon d'affecter des valeurs à un tableau est sympa, on l'utilisera plus tard)
- C'est moins lisible (non séparation déclaration + affectation)
À vous de choisir, je conseille, vous, vous faites ce que vous voulez
Échanger deux variables
Pour échanger deux variables, rien de tel qu'une démonstration
Code:
#include <stdio.h> int main(void) { int a = 2; int b = 3; a, b = b, a; /* tentative d'échange entre variable a et variable b printf("valeur a=%d, valeur b=%d", a, b); /* Affichage du résultat */ return 0; }
left-hand operand of comma expression has no effect [-Wunused-value]
En gros le compilateur nous explique que ce qu'on fait en C ne fonctionnera pas, et que nos valeurs ne peuvent être modifiées de cette façon.
Lorsqu'on exécute le code, effectivement les valeurs restent inchangées
valeur a=2, valeur b=3
Ah ouais ! Je fais comment alors ? Eh bien j’essaie de trouver une astuce comme ajouter une variable par exemple.
Code:
#include <stdio.h> int main(void) { int a = 2; int b = 3; int c; c = a; /* affectation de la valeur a=2 dans c -> c = 2 */ a = b; /* affectation de la valeur b=3 dans a -> a = 3 */ b = c; /* affectation de la valeur c=2 dans b -> b = 2*/ printf("valeur a=%d, valeur b=%d", a, b); /* affichage du résultat */ return 0; }
Pas de messages d'erreur
Que l'inversion c'est bien passée valeur a=3, valeur b=2
EXERCICES
Exercice n°1
Donner les valeurs de a, b et c
Code:
a = 8; b = 2; c = a-b; c = b-a;
Donner les valeurs de a et b
Code:
a = 5; b = a - 8; a = a + 1; b = a - 4;
Commentaire