Blog ENI : Toute la veille numérique !
💥 Un livre PAPIER acheté
= La version EN LIGNE offerte pendant 1 an !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Langage C
  3. Variables simples
Extrait - Langage C Maîtriser la programmation procédurale (avec exercices pratiques) (2e édition)
Extraits du livre
Langage C Maîtriser la programmation procédurale (avec exercices pratiques) (2e édition)
2 avis
Revenir à la page d'achat du livre

Variables simples

Introduction

Voici quelques questions pour vous aider à synthétiser et retenir des contenus qui nous paraissent essentiels dans cette section :

  • Qu’est-ce qu’une variable en informatique ?

  • Quels sont les types de variables en C ?

  • Comment avoir une variable dans un programme ?

  • Y a-t-il des contraintes pour les noms de variable ?

  • Comment donner une valeur à une variable ?

  • Comment afficher la valeur d’une variable ?

  • Comment afficher la taille en mémoire d’une variable ?

  • Comment obtenir l’adresse mémoire d’une variable ?

  • Comment dans un programme faire pour que l’utilisateur puisse entrer une valeur dans une variable ?

  • Qu’est-ce qu’une constante ?

  • Quels sont les moyens d’obtenir des constantes en C ?

Qu’est-ce qu’une variable en informatique ?

Pour la machine une variable est un espace mémoire réservé et accessible qui permet de stocker et d’utiliser des valeurs numériques. Il y a deux actions possibles :

  • Donner une valeur à la variable.

  • Utiliser la valeur de la variable (dans un calcul par exemple).

Quel que soit le langage, il y a toujours plusieurs types de variables. Chaque type est identifié par un mot-clé. Il définit une taille en mémoire pour la variable et certaines propriétés. Pour les variables simples, il s’agit uniquement de savoir s’il y a une virgule ou pas, si elles sont signées ou non (+, -).

Définir des variables dans un programme

1. Les types de variables élémentaires en C

Chaque type est déterminé par un mot-clé du langage, il y en a dix en tout :

Mot-clé

Taille en octets

Nombre de codes possibles

Plage en non-signé

Plage en signé

Propriétés

char

1

28

0 à 28 -1

-27 à 27-1

Entiers

_Bool ou bool

1

2

0 ou 1

non

Entiers

short

2

216

0 à 216 -1

-215 à 215-1

Entiers

int

2 ou 4 (selon environnement)

216 ou 232

0 à 216 -1 ou 0 à 232 -1

-215 à 215-1 ou -231 à 231-1

Entiers

long

4

232

0 à 232 -1

-231 à 231-1

Entiers

long long

8

264

0 à 264 -1

-263 à 263-1

Entiers

float

4

232

0 à 232 -1

-231 à 231-1

Réels (virgule)

double

8

264

0 à 264 -1

-231 à 231-1

Réels (virgule)

long double

(voir remarque)

8

264

0 à 264 -1

-231 à 231-1

Réels (virgule)

Pointeur

(opérateur *)

4

232

0 à 232 -1

Contient des adresses mémoire

Contient des adresses mémoire

Par défaut, toutes les variables sont signées (hors booléens et pointeurs). Le mot-clé signed est utilisé implicitement par la machine. Pour avoir des variables non signées, il faut le spécifier explicitement avec le mot-clé unsigned.

À propos du type booléen

Nativement, le C propose le type _Bool pour les booléens. Il n’admet que deux valeurs : 0 pour faux (false) ou 1 pour vrai (true). Deux valeurs FALSE et TRUE sont définies sous forme de #define dans la bibliothèque <Windows.h>. Elles peuvent éventuellement être utilisées sous cette forme après l’inclusion de windows.h.

Avec l’inclusion de la bibliothèque <stdbool.h>, il est possible de s’aligner sur le C++ et d’utiliser le type...

Mise en pratique : définir des variables dans un programme

Exercice 1

Combien y a-t-il de types en C et quels sont-ils ?

Qu’est-ce qui les différencie ? Par défaut sont-ils signés ou non signés ?

Quelles sont les fourchettes de valeurs ?

Exercice 2

Quels sont les types à choisir pour coder les nombres : 45.876, 56.0, 77, 650987, 32769, -32765, 450009996 ?

Écrire un programme dans lequel on a des variables susceptibles de recevoir ces valeurs.

Exercice 3

Soit dans un programme les déclarations suivantes :

    int 0t, ti, p0;  
    freste float;  
    double div-total;  
    float tata, t2345, char c, cc :  
    short Err_, _E_, 

Indiquer, expliquer et corriger les erreurs (possibilité d’utiliser le compilateur).

Manipulations de base sur les variables

1. Affecter une valeur à une variable

L’opérateur d’affectation est l’opérateur =.

Dans un programme, les instructions :

    float toto;  // déclare une variable float  
    toto=1.5;    // affecte la valeur 1.5 à toto (toto vaut 1.5) 

Il y a aussi la possibilité d’initialiser la variable à la déclaration, ce qui donne :

 float toto = 1.5; // La virgule est indiquée avec un point 

Que fait le programme suivant ?

int main()  
{  
int a,b;  
    a=10;  
    b=0;  
    a=b;  
    b=555;  
    b=a;  
    a=3;  
    b=a;  
   return 0;   // ici combien valent a et b ?  
} 

D’une façon générale, pour savoir ce que fait un programme, il faut simuler intellectuellement son fonctionnement.

Les instructions (expressions closes par un point-virgule) sont exécutées les unes à la suite des autres, de façon linéaire, dans l’ordre où elles sont présentées et sans jamais revenir en arrière.

Dans ce programme il y a neuf instructions. Du haut vers le bas, chaque ligne donne :

ligne 1 : Au départ déclaration de deux variables de type int a et b 
ligne 2 : a prend la valeur 10, a vaut 10  
ligne 3 : b prend la valeur 0, b vaut 0  
ligne 4 : a prend la valeur de b, a vaut 0  
ligne 5 : b prend la valeur 555, b vaut 555  
ligne 6 : b prend la valeur de a, b vaut 0  
ligne 7 : a prend la valeur 3, a vaut 3  
ligne 8 : b prend la valeur de a, b vaut 3  
ligne 9 : à l'issue, au moment du return, a vaut 3 et b vaut 3. 

Évidemment, dans ce cas, si l’on veut uniquement connaître les valeurs de a et de b à l’issue, il est plus aisé de commencer par la fin : b=a et a=3, d’où a et b qui valent 3.

Autre exemple avec des flottants :

int main()  
{  
float f1=8.78654, f2=7.77;  
    f1=f2;  
    f1=0.999;  
   ...

Mise en pratique : manipulations des variables

Exercice 1

Écrire un programme qui déclare trois int, deux float, un double et deux char. Affecter une valeur à chaque variable, afficher le résultat.

Exercice 2

Dans un programme, déclarer un char et lui affecter une valeur choisie au hasard. Afficher la valeur entrée en utilisant les deux formats %d et %c, qu’est-ce que cela donne ? Réessayer en demandant cette fois une valeur comprise entre 97 et 122. Que remarque-t-on ? Quelles valeurs permettent d’afficher les caractères *, @, , , ,  ?

Exercice 3

La fonction putchar(char c) permet d’afficher un caractère tout seul.

Dans un programme, utiliser cette fonction pour afficher le mot "TataFaitDuZele" caractère par caractère, en allant à la ligne au moins trois fois.

Exercice 4

Afficher lettre par lettre le mot "fourchette" en ajoutant ou soustrayant ce qu’il faut à chaque lettre du mot "contrainte" (utiliser les opérateurs arithmétiques + ou -).

Exercice 5

Dans un programme, crypter un mot à partir d’une clé (une valeur) entrée par l’utilisateur. Le mot crypté est affiché lettre par lettre (utiliser les opérateurs arithmétiques + ou -).

Exercice 6

Dans un programme, déclarer quatre variables de type int. Afficher pour chacune son adresse...

Les constantes

1. Définition, mot-clé const

Une constante est une variable qui ne varie pas ! Elle est obligatoirement initialisée avec une valeur à sa déclaration et ensuite il n’est plus possible de la modifier, elle n’est accessible qu’en lecture uniquement. Elle se distingue des autres avec le mot-clé const, par exemple :

const int NBELEMENT = 20 ; 

ou encore :

const float ZOOM = 1.576f ; 

Ces deux variables conserveront leur valeur pendant tout le programme. Essayer de changer leur valeur provoque une erreur à la compilation.

C’est bien utile pour stocker et identifier des valeurs qui ne varient pas dans le programme. Par exemple, nous pourrions délimiter une zone de jeu à 80 pour l’horizontale et 20 pour la verticale grâce à deux constantes :

const int TX = 80 ;  
const int TY = 20 ; 

Il est plus clair ensuite d’utiliser TX que 80 et si d’aventure on décide de changer la taille de la zone de jeu, il suffit de modifier la valeur initiale de la constante et de recompiler le programme.

2. Macro-constantes #define

Une alternative aux constantes est l’utilisation d’une directive macroprocesseur #define. C’est un usage très fréquent en C mais un peu moins en C++ et encore moins en C# où les constantes const sont préférées. Cette directive est détaillée...

Comprendre les variables

1. Codage et mesure de l’information

La RAM ou mémoire vive est nécessaire pour le fonctionnement d’un programme. Elle repose sur des puces mémoires ou "puces RAM". Une puce est un circuit intégré qui rassemble un grand nombre de conducteurs et composants électriques. C’est là où sont rangés les fameux "bits" en grande quantité. Le bit est un micro-interrupteur interprété  comme 0 lorsqu’il est fermé et 1 lorsqu’il est ouvert. C’est la plus petite unité de mesure de l’information.

1 bit      peut stocker 2 informations :   
           (0) ou (1) soit 21 informations  
  
2 bits     peut stocker 4 informations :   
           (0,0)(0,1)(1,0)(1,1) soit 22 informations  
  
3 bits     peut stocker 8 informations :   
           (0,0,0)(0,0,1)(0,1,0)(0,1,1)  
           (1,0,0)(1,0,1)(1,1,0)(1,1,1) soit 23 informations  
  
n bits     peut stocker 2n informations 

Si le bit est l’unité élémentaire d’information, l’octet est la plus petite unité de mémoire adressable c’est-à-dire qui a sa propre adresse (un char en C). Et c’est à partir de l’octet (8 bits, 28 informations) que sont construites les quantités d’information :

1 octet     (o)     vaut     8 Bits (28 informations) 

En C, les variables simples ne dépassent pas encore 8 octets (un double), mais il est prévu pour les années à venir le type long double sur 16 octets

Par ailleurs, la mesure des grandes quantités d’information pour les fichiers en tous genres est établie de la façon suivante :

1 kilo-octet (Ko)   vaut     210  octets    soit    1024 octets  
1 Mega-octet (Mo)   vaut    ...

Expérimentation : variables simples, déclaration, affectation, affichage, saisie

// des librairies de fonctions  
#include <stdio.h>  
#include <stdlib.h>  
  
int main()  
{  
   //--------------------------------------------------------  
   //avoir des variables : <type> <identificateur> < ; >  
   //le type définit une taille et des propriétés (virgule ou pas)  
     
   // les instructions  
   int toto; // réserve un emplacement mémoire (une adresse) pour un int 
   toto = 10; // affecte la valeur 10 à la variable toto,  
  
   // remarque :  
   // expression (int toto, toto=10) et instruction (int toto; toto=10;) 
  
   //--------------------------------------------------------  
   // les autres types en variables simples du C  
   char c = 'A';     // 1 octet, codage ASCII des caractères  
   short s = 10;     // 2 octets  
   int i = 20;       // 2 ou 4 octets  
   long l = 456;     // 4 octets  
  ...

Mise en pratique : codage des informations numériques

Exercice 1

Combien d’informations est-il possible de coder sur 2 bits ? sur 4 bits ? sur 8 bits ?

Quels sont les codes binaires associés à ces informations ?

Quelles sont les valeurs décimales associées à ces codes ? En signé ? En non-signé ?

Combien de bits faut-il pour coder un alphabet (chinois) de 4344 lettres ? Combien d’octets ?

Exercice 2

Donner en binaire le codage des nombres -32, -77, 104, 258 sur 8 bits.

Exercice 3

Si dans un programme :

  • j’affecte la valeur 266 à un char et que je l’affiche, quel est le résultat ?

  • j’affecte la valeur 384 à un char et que je l’affiche, quel est le résultat ?

  • j’affecte la valeur 768 à un char et que je l’affiche, quel est le résultat ?

  • j’affecte la valeur 23277 à un char et que je l’affiche, quel est le résultat ?

  • combien donne sur un char -120+250 ?

  • combien donne sur un char -120-120 ?

Tester ou trouver les réponses avec un programme et expliquer les résultats.