Chapitre 3: Variables et opérations

         1 – Qu’est ce qu’une variable?

    Une variable sert à contenir des données, ces données peuvent Être des nombres (entier, relatif, décimaux, rationnel, irrationnel, réel (après c’est un peu plus complexe à gérer ?)), une chaine de caractères (une lettre, un mot, une phrase), ou bien le résultat d’une fonction que nous verrons bientôt. en C, ce sera surtout des nombres. Une variable en C sera stockée dans la mémoire de votre ordinateur. Ainsi, on est limité en variable, c’est pourquoi il faudra en utiliser le moins possibles. Imaginez que votre mémoire est un tableau avec l’adresse de la variable (on verra ce que c’est plus tard avec les pointeurs) et la valeur de la variable, celle que vous lui donnerais, ce tableau a une limite, elle varie suivant les configurations de votre ordinateur, c’est-À -dire la RAM (ou mémoire vive). A chaque déclaration de variable, votre système d’exploitation lui attribuera une place dans la RAM.

Hein ? O_o J’ai pas compris là …


Pas d’inquiétude, j’ explique. Pour schématiser ce qu’est une variable nous allons nous baser sur un petit programme traitant d’une variable. Recopiez le code ci-dessous :

Code c:
#include <stdio.h>
#include <stdlib.h>

int main ()
{
long ageUtilisateur;
return 0;
}



Donc déjà on remarque encore une fonction « main » à l’intérieur de laquelle on peut voir deux instructions. Jusque là vous devez suivre … Enfin j’espère sinon retournez lire la fin du chapitre précédent.

Etudions l’instruction :

Code c:
long ageUtilisateur;


Ici la variable est « ageUtilisateur », ageUtilisateur est son nom, son type est « long » nous détaillerons les types de variables après.
Cette instruction est ce que l’on appel une déclaration de variable.
Là ça se complique, mais pas de soucis j’explique.

Chose importante : les noms de variables sont souvent source d’erreur. Leur nom ne peut être composé que de caractères alphanumériques (a – A, b – B, …, 8,9) et du caractère de soulignement  » _  » la touche 8 de votre clavier. On ne doit en aucun cas utiliser des espaces et d’autres caractères du genre :  » ? « ,  » ; « , …
De plus le nom ne doit pas commencer par un chiffre. Enfin préférez utiliser des noms compréhensibles ( par exemple : vieMonstre vaut mieux que : vM )

Ainsi :

sont justes : vieMonstre, vie_du_monstre, vie_monstre1, VIE_MONSTRE
sont faux : 1vie, viedepart-5, vie0,005
sont problématiques : a, A2, B2, b2, e, b


On remarque aussi dans ce code que la valeur de cette variable n’est pas visible. En fait la valeur que la variable contient est quelquonque. (==> c.f annexe mémoire)

Comment afficher la valeur de cette variable ?
Avec un printf tout bête rajoutez cette ligne juste après la déclaration de la variable ageUtilisateur :

Code c:
printf(« ageUtilisateur vaut %ld », ageUtilisateur);


Vous verrez sans doute un nombre qui ne peut pas représenter un age humain.
Dans cette case de mémoire il y avait déjà un nombre utilisé précédemment par un autre programme. Rappelez vous le paragraphe sur la mémoire.

On peut remarquer « %ld » dans ce code, en fait il désigne la variables ageUtilisateur que l’on rajoute après les guillets. En gros que se passe t’il ? Et bien lors de la compilation, le compilateur remplace « %ld » par la valeur contenue dans la variables ageUtilisateur.

Dans ce programme aucune valeur n’est spécifiée et on l’a vu cela amène à des nombres improbables. C’est pour cela qu’il faut initialiser les variables que l’on utilise, en les mettant à zero si on ne connait pas à l’avance leur valeur, et si on les connait on initialise les variables à ces valeur .
UNE VARIABLE NE PEUT CONTENIR QU’UNE SEUL VALEUR !!!!
Si on a plusieurs valeurs a déclaré, on initialise autant de variable qu’il y a de valeur.

Du code pour illustrer tout cela :

Code c:
#include <stdio.h>
#include <stdlib.h>

int main ()
{
long ageUtilisateur = 0;
printf(« ageUtilisateur vaut %ld », ageUtilisateur);
return 0;
}


Compiler le programme. Il affiche 0, tant mieux; il affiche erreur ou autre chose, vérififiez vos  » ;  » et si il le faut faites un copier coller du code ci-dessus.

Remplacer maintenant le zero par une autre valeur, entière ( pas de virgule ) et ne dépassant pas 2 milliards ( nous verrons pourquoi plus tard ). Si vous compilez vous devez voir apparaitre la valeur que vous avez entré … Magique …

Il existe un autre genre de variable : les constantes.
Comme leur nom l’indique, la valeur de ces variables ne peut pas changer au cour du déroulement du programme et si vous avez bien suivi, c’est là le contraire avec une variable  » ordinaire » qui, elle, peut changer de valeur au cour du programme.

Pour définir une constante, on écrit :

Code c:
const long ageUtilisateur = 0;

         2 – Les types

    Nous avons vu qu’à chaque variable est associé un type. Toutes les données que vous utiliserez dans vos programmes vont suivre cette typologie. Nous verrons ici une partie (et la plus simple) des différents types existants.

Ce type décide de l’occupation en mémoire de cette donnée.

Ces types se divisent en deux groupes :

– les entiers
– les nombres a virgules flottantes

Les Entiers :

Les types stockant des nombres entiers sont :
int : il stocke le nombre sur deux octets, il permet de stocker des nombres entiers allant de – 32 768 à 32 767. On l’utilisera en priorité pour des petits nombres entiers.
long : l stocke un nombre sur quatre octets, il permet de stocker des nombres entiers allant de – 2 147 843 648 à 2 147 843 647. On l’utilisera en priorité, il permet surtout de gérer les erreurs de saisie d’un utilisateur (oui il y a toujours ceux qui tapent un nombre improbable pour tester le programme).


La plage de valeur d’un type dépend du nombre de combinaisons de nombres que l’on peut former sur le nombre d’octet qu’utilise le type. Par exemple pour le type int :
Il stock sur deux octets donc 16 bits :

16 x 16 + 16 x 16 = 256 x 256 = 65 536 combinaisons possibles qu’on sépare en deux un coté allant aux nombres négatifs et un autre aux positifs. Si vous n’avez absolument rien compris de ces deux paragraphes et du calcul ne vous inquiétez pas, il s’agit là non plus de C mais de binaire ( donc pas au programme ).

Les nombres à virgule :

float : il stock les nombres sur quatre octets, il permet de gérer des nombres allant de 3,4 x 10 puissance -38 à 3,4 x 10 puissance 38. Le type float nous sera utile pour gérer les nombres à virgule.
double : il stock les nombres sur huit octects, il permet de gérer des nombres allant de 1,7 x 10 puissance -308 à 1,7 x 10 puissance 308.


La plage des nombres des types de données à virgule flottante est beaucoup plus complexe que pour les types de nombres entiers. C’est pour cela qu’il ne vaut mieux pas en parler.

         3 – Mise en pratique

    Maintenant que vous savez créer et afficher une variables nous allons pouvoir commencer à coder nos petits programmes. Et pour commencer le classique :  » Quel âge as-tu ? « 

Ce programme demandera l’âge de l’utilisateur, stockera la valeur rentrée par l’utilisateur dans une variable et réaffichera cette âge dans un printf.

Mais il va nous falloir récupérer la saisie de l’utilisateur. Pour cela nous allons utiliser  » scanf « .
scanf marque une pause dans le programme, le temps que l’utilisateur rentre sa donnée. Puis après qu’il est appuyé sur entrée, cette valeur va être stockée dans une variable.

Syntaxe de scanf :

Code c:
scanf (« %ld », &amp;nomDeLaVariable );


Détaillons :

%ld représente le nombre qui va être saisie. ld car il s’agit d’une variable de type long. Chaque type à un % ** spécifique. Par exemple si notre variable aurait été du type double on aurait mis %lf.
Il est inutile à ce stade de vous faire la liste de ces % ** nous y reviendrons en temps voulu.
Ensuite on peut voir &amp;nomDeLaVariable. En fait ça signifie que la valeur saisie va être stockée dans cette variable.

A partir d’ici je ne met plus :

Code c:
#include <stdio.h>
#include <stdlib.h>


Mais on doit impérativement les retrouver dans les deux premières lignes de vos programmes. Elles sont essentiels au bon déroulement du programme. Leur signification et leur rôle étant un peu complexe nous verrons cela par la suite.

A vous de jouer



Voici la solution pour ceux qui n’aurait pas réussi

Code c:
int main ()
{
/* On initialise la variable à zéro */
long ageUtilisateur = 0;
/* On demande l’âge à l’utilisateur */
printf(« Quel âge avez vous ? « );
/*L’utlisateur rentre son âge */
scanf(« %ld », &amp;ageUtilisateur);
/*et le programme l’affiche */
printf(« Vous avez %ld ans », ageUtilisateur);


return 0;
}