UKOnline

Variable

Pour qu'une donnée puisse être utilisée durant l'exécution d'un programme, il faut la stocker. Pour cela, on utilise des variables, concept-clé de la programmation. On peut voir simplement une variable comme étant une boite nommée dans laquelle il est possible de placer une donnée. La boite possède un nom, ce qui permet de l'identifier. De plus, dans une variable donnée, on ne pourra stocker que des données d'un même type choisi. Par exemple, si je crée une variable « nombre entier positif », je ne pourrais y stocker que des nombres entiers positifs.

Une variable est donc caractérisée par trois éléments :

  • son nom permet de l'identifier ;
  • son type détermine quelle donnée elle pourra stocker ;
  • et sa valeur correspond à la donnée qu'elle stocke.

La figure 4 illustre le concept de variable comme étant une boite contenant une valeur. Son type est indiqué au-dessus de la boite, et son nom en-dessous.

Variable
Une variable est caractérisée par un nom, un type et une valeur.

Règle de nommage

Le nom que vous choisissez pour vos variables est très important, et ne peut pas être choisi n'importe comment. La première règle à respecter est qu'il est interdit d'utiliser un mot réservé comme nom de variable. Les mots réservés sont des mots qui ont une signification particulière pour le langage C. La figure 5 reprend tous les mots réservés du langage C, depuis la version K&R jusqu'à la version C11.

Mots réservés
Liste des mots réservés du langage C.

La deuxième règle qu'il faut respecter concerne les caractères autorisés pour former le nom d'une variable. Un nom de variable ne peut être constitué que de lettres non-accentuées, de chiffres et du tiret de soulignement ( _ ), et le premier caractère ne peut pas être un chiffre. De plus, C est sensible à la casse, c'est-à-dire que les noms CHOCOLAT, chocolat et Chocolat sont trois noms différents.

Enfin, la troisième règle est une règle de bonne pratique. Il est très important de choisir un nom de variable qui décrit la donnée qu'elle va contenir. Par exemple, pour une variable dont le but est de contenir le poids d'une personne, on utilisera weight, personWeight ou person_weight, mais on évitera x, w ou the_weight_of_a_person.

Déclaration et initialisation

Pour pouvoir utiliser une variable dans un programme, il faut avant tout la déclarer. Déclarer une variable, c'est lui choisir un nom et définir son type. Voici par exemple comment déclarer une variable de type int dont le nom est weight, qui permet de représenter le poids d'un sachet de chips :

La déclaration d'une variable est donc une instruction qui se compose de deux éléments : on indique d'abord le type de la variable, suivi du nom que l'on veut lui donner. Voyons un autre exemple de déclaration d'une variable sex de type char qui permet de représenter le sexe d'une personne ('M' pour mâle et 'F' pour femelle) :

La figure 6 montre les deux variables que l'on vient de créer. Remarquez que les valeurs des deux variables ne sont pas connues (?). En effet, en C, lorsqu'on déclare une variable, on n'a aucune information quant au contenu de la variable. Elle peut contenir tout et n'importe quoi (comme on le verra plus loin, la valeur d'une variable nouvellement déclarée correspond en fait à ce qu'il y avait en mémoire au moment de la déclaration).

Déclaration de variable
Exemple de déclaration de deux variables.

Une fois une variable déclarée, il faut l'initialiser avant de pouvoir l'utiliser, c'est-à-dire définir sa valeur initiale. Pour ce faire, on écrit par exemple :

L'initialisation d'une variable comporte donc deux parties : on indique le nom de la variable à initialiser, suivi du caractère = et suivi de la valeur initiale que l'on veut donner à la variable. La figure 7 montre l'état des deux variables une fois qu'elles ont été initialisées.

Initialisation de variable
Exemple d'initialisation de deux variables.

Enfin, on peut déclarer et initialiser une variable en une seule opération. Par exemple, pour les deux variables qu'on a utilisées comme exemple, on peut directement écrire :

Modification

Une fois une variable déclarée et initialisée, on peut à tout moment changer sa valeur. La modification de la valeur d'une variable se fait de nouveau avec le =. En fait, on utilise exactement la même notation que celle utilisée pour l'initialisation. Par exemple, si on veut changer de sexe, on écrit :

La figure 8 montre l'état des deux variables après cette modification. La valeur de la variable sex a bel et bien changé, tandis que la valeur de la variable weight est restée inchangée.

Initialisation de variable
Exemple de modification d'une variable.

Opérateur d'affectation

Le signe = est en fait l'opérateur d'affectation. Il permet d'affecter, c'est-à-dire donner, une valeur à une variable. Lorsque c'est la première fois qu'on l'utilise, on parle d'initialisation de la variable, et sinon il s'agit d'une modification de la valeur de la variable.

La figure 9 illustre la forme générale d'une instruction d'affectation. Elle commence par le nom de la variable, suivi de l'opérateur =, suivi de la nouvelle valeur de la variable. L'instruction se termine par un point-virgule.

Instruction d'affectation
Forme générale de l'instruction d'affectation.

La valeur peut être un littéral, à savoir une donnée écrite directement dans le code (comme 42, 7.5 ou 'Z'), le nom d'une autre variable (dans lequel cas on fait une copie de sa valeur) ou enfin une opération, comme on le verra dans la section suivante. L'exemple ci-dessous déclare et initialise une variable age à 30 puis fait une copie de cette variable dans une autre variable copy.

Affichage avec printf

Comme on l'a vu dans l'introduction, il est important pour un programme d'être capable de communiquer avec ses utilisateurs, afin de lui montrer les résultats produits. Pour ce faire, une méthode que l'on peut utiliser consiste à afficher les données calculées à l'écran.

On va utiliser la fonction printf pour faire cet affichage. Afin de pouvoir utiliser cette fonction, il faut au préalable inclure le fichier stdio.h. La première chose que l'on peut faire consiste à afficher du texte à l'écran, comme on a déjà pu voir dans le chapitre précédent. Par exemple, on peut afficher un message de bienvenue avec l'instruction suivante :

Après exécution, voici ce qui est affiché à l'écran :

Bonjour,
Bienvenue dans ce programme !

On peut observer que la séquence de caractères \n a été remplacée par un saut de ligne. C'est en effet son rôle. Il s'agit d'une séquence d'échappement, c'est-à-dire une suite de caractères qui sera traitée comme un cas particulier, et qui représente un caractère spécifique (le saut de ligne dans cet exemple).

Sortie formatée

En plus de pouvoir afficher du texte, on va également pouvoir y incruster la valeur de variables. Pour ce faire, on doit insérer des balises et indiquer le nom de la variable dont on veut afficher la valeur. C'est ce qu'on appelle une sortie formatée. Prenons un exemple :

On voit donc qu'on a ajouté la balise %d, qui signifie qu'une valeur de type int doit être insérée à la place de la balise. La valeur qu'il faut utiliser est celle de la variable year comme on l'a également indiqué à la fonction printf. À chaque type de donnée est associée une balise spécifique. Voici un autre exemple avec la balise %c pour un caractère :

La figure 10 reprend les balises à utiliser pour les différents types de données qu'on a vus dans cette section. Notez la différence entre les versions signed et unsigned pour les types supportant ces deux types.

Type signed unsigned
short %hd %hu
int %d %u
long int %ld %lu
long long %lld %llu
float %f
double %f
long double %Lf
char %c
char %hhd %hhu
Balises à utiliser avec la fonction printf pour afficher des données.

On peut utiliser plusieurs balises dans un même appel à la fonction printf. Dans ce cas, il faudra évidemment lister toutes les variables dont il faut prendre les valeurs. La figure 11 montre un exemple d'appel à printf qui utilise trois balises. L'ordre d'apparition des balises doit être le même que l'ordre dans lequel les variables sont listées.

Identificateur printf
Forme générale de l'instruction printf.

Voici un exemple concret qui utilise une sortie formatée avec plusieurs variables, de différents types :

Formatage avancé

Enfin, il faut savoir qu'il est possible de faire du formatage avancé en utilisant les options des différentes balises. On va s'intéresser aux deux balises %d et %f.

Pour la balise %d, il est possible de préciser le nombre de caractères que l'on souhaite en tout, pour afficher le nombre entier. Si le nombre de caractères dans le nombre à afficher est plus petit que l'option spécifiée pour la balise %d, des espaces seront ajoutés devant. Prenons un exemple :

Comme on peut le voir sur le résultat de l'exécution montré ci-dessous, les deux premières lignes sont affichées de manière normale. En effet, le nombre affiché fait trois caractères de long, et on demande respectivement un affichage sur 2 et 3 caractères. À la troisième ligne, un espace a été ajouté, et à la quatrième 7 espaces ont été ajoutés pour atteindre les 10 caractères demandés.

valeur = 719
valeur = 719
valeur =  719
valeur =        719

Au lieu de compléter avec des espaces, on peut aussi vouloir compléter avec le chiffre zéro. Pour cela, il suffit de commencer la balise par %0, suivi du nombre de caractères total, suivi par d. Voici par exemple comment afficher une heure, et faire en sorte que l'affichage occupe toujours 5 caractères.

Comme on peut le voir sur le résultat d'exécution de ce code, des zéros ont été ajoutés à la deuxième ligne affichée, puisque l'heure et les minutes sont des chiffres qui n'occupent donc qu'un seul caractère.

Il est 11:17
Il est 09:02

Pour la balise %f, il est possible de spécifier le nombre de chiffres que l'on veut derrière la virgule. Pour cela, on ajoute entre le % et le f, le nombre de chiffres qu'on veut, juste après un .. Voyons un exemple :

La première instruction d'affichage restreint donc à seulement 2 chiffres après la virgule, alors que la deuxième instruction d'affichage demande 6 chiffres après la virgule. L'exécution de ces lignes de code affiche :

pi = 3.14
pi = 3.141593