2

Les Variables

Les données qu'utilise un programme peuvent varier au cours de son exécution. On les appelle alors des variables. Les valeurs de ces variables peuvent être modifiées au moyen d'une série d'opérations. Toute variable utilisée par le programme doit posséder un type. En déclarant la variable, on précise donc le type de valeur qu'elle va contenir. Toute déclaration de variable doit être de la forme :

Remarque :

    int i;
    int j;

    est équivalent à

    int i,j;


Les Différents Types

Identificateur deType

Exemples

Nom de l'Identificateur de Type

Entier

-5, 0, 13

int

Décimal

-15.9, 0.03, 3.1416

float

Caractère

'A', '#', 's'

char

Entier

Ce type représente les données entières. La déclaration d'une variable entière doit être sous la forme :

C permet aussi de préciser si les entiers doivent être de types longs (long int) ou de types courts (short int). Ces extensions permettent de choisir les valeurs maximales et minimales que peuvent contenir les variables.

Type

int

long int

unsigned int

unsigned long int

Minimum

-32768

-2147483648

0

0

Maximum

32767

2147483647

65535

4294967295

Exemple :

Décimal

Ce type représente les données numériques réelles. La déclaration d'un tel type de variables sera de la forme :

Il y a également comme pour les entiers une extension de type float, il s'agit du type double.

Type

float

double

Minimum

-3.4E+38

-1.7E+308

Maximum

3.4E+38

1.7E+308

Le type double permet une plus grande précision.

Exemple :

Caractère

C permet d'utiliser des variables caractères. La déclaration d'une variable caractère doit être de la forme :

Les valeurs possibles pour ce type de variable correspondent aux caractères ASCII. Nous pouvons remarquer qu'une valeur caractère doit toujours être entourée par des apostrophes ' '.

Exemple :


2 fonctions utiles :


La fonction getchar()
Cette fonction lit un caractère unique. La valeur renvoyée par la fonction correspond au caractère lu.

Exemple :


La fonction putchar
Cette fonction écrit un caractère. Son format est le suivant :

où item est une variable de type caractère ou un valeur caractère.

Exemple :


Exemple utilisant getchar et puchar :

Déroulement de ce programme :


Assigner une valeur à une variable

Il est possible d'assigner une valeur à une variable à l'aide du signe =. On peut le faire de deux manières différentes : soit lors de la déclaration de la variable, soit après ces déclarations.

Exemples :


Les conversions

Si mathématiquement les entiers constituent un sous-ensemble des nombres fractionnaires, on ne saurait dire la même chose des int, par rapport aux float.
Ces deux types représentent en fait, informatiquement, deux ensembles disjoints.
Par exemple, le nombre 1 avec le type int est différent du nombre 1 avec le type float.
Si on veut associer, en une même opération arithmétique un int et un float, il est nécessaire que les deux opérandes aient un type commun. On atteint ce type commun à partir d'une conversion généralement implicite.

Expression mixte

Les opérateurs arithmétiques ne sont définis que lorsque leurs deux opérandes sont de même type. Mais on peut écrire ce que l'on nomme des "expressions mixtes" dans lesquelles interviennent des opérandes de types différents.

Exemple :

n * x + p (avec n et p de type int et x de type float)
Dans ce cas, le compilateur sait, compte tenu des règles de priorité, qu'il doit d'abord effectuer le produit n*x. Pour que ce soit possible, il va convertir n dans le type float (car on considère que le type float permet de représenter un int, l'inverse étant faux). La multiplication portera donc sur deux opérandes de type float et elle fournira un résultat de type float. Pour l'addition, on se retrouve à nouveau en présence de deux opérandes de types différents. Le même mécanisme sera mis en place et, le résultat final sera de type float.

  n     *     x     +     p
  |             |             |
 int         float        int
    |             |             |  
float         |             |
  |     *      |             |
  ---------              |
        |                     |
        float               float
         |         +         |
        --------------
         |
          float

Conversions implicites

Dans l'affectation, la valeur de l'expression à droite du signe égal est convertie, avant affectation, selon le type de la variable réceptrice située à gauche du signe égal.

Exemple :

Conversions explicites

L'opérateur cast permet toutes les conversions explicites, ayant un sens.

Syntaxe :

Exemple :


Opérateurs Arithmétiques

Les opérateurs de cette catégorie procèdent à des opérations arithmétiques sur leurs opérandes. Outre les opérateurs de calculs élémentaires, il existe un opérateur de changement de signe, et un opérateur pour calculer le reste entier d'une division (modulo).

L'opérateur En C Exemple Renvoie
x PLUS y x+y 5+2 7
x MOINS y x-y 5-2 3
x FOIS y x*y 5*2 10
x DIVISE PAR y x/y 10/5 2
x MODULO y x%y 5%2 1
MOINS x -x -(-2) 2


Opérateurs Relationnels

Les opérateurs de comparaison en C font partie des opérateurs binaires et comparent les valeurs de leurs opérandes. Ils testent, ce faisant, la nature de la relation entre les deux opérandes. Le résultat d'une comparaison est, d'un point de vue logique, une assertion de type VRAI ou FAUX.

Remarque : un entier est estimé VRAI si sa valeur est différente de 0, FAUX si elle vaut 0.

L'opérateur En C Exemple 1 Renvoie Exemple 2 Renvoie
x EGAL y x= =y (3= =(2+1)) VRAI (5= =(2+1)) FAUX
x DIFFERENT de y x!=y (5!=(2+1)) VRAI (3!=(2+1)) FAUX
x INFERIEUR OU EGAL A y x<=y (3<=3) VRAI (3<=2) FAUX
x SUPERIEUR OU EGAL A y x>=y (5>=5) VRAI (5>=7) FAUX
x INFERIEUR A y x<y (3<5) VRAI (5<5) FAUX
x SUPERIEUR A y x>y (2>1) VRAI (3>3) FAUX


Opérateurs Logiques

Les opérateurs logiques en C effectuent les opérations classiques de la logique des prédicats : ET (AND), OU (OR), NON (NOT). Grâce à eux, il est possible de relier logiquement des instructions. Il y a trois opérateurs logiques, deux d'entre eux sont binaires, et l'autre est unaire. Comme avec les opérateurs relationnels, l'évaluation des expressions comportant des opérateurs logiques donne un résultat de type VRAI, FAUX, exprimé en tant que grandeur de type int. Ce résultat peut prendre les valeurs 0 (FAUX) ou 1 (VRAI).

Remarque : un entier est estimé VRAI si sa valeur est différente de 0, FAUX si elle vaut 0.

L'opérateur En C Exemple 1 Renvoie Exemple 2 Renvoie
x ET y x&&y (3<5)&&(5>2) VRAI (3==5)&&(5>3) FAUX
x OU y x||y (3<5)||(5<2) VRAI (3==5)||(5<3) FAUX
NON x !x !(3>5) VRAI !(5>3) FAUX


Opérateurs de Bits

Ces opérateurs, semblables aux opérateurs logiques, permettent de réaliser des opérations sur les bits de données. Outre les opérations logiques ET, OU, NON, sur les bits, on peut également effectuer des opérations de décalage. Toutes opérations de bits exigent des opérandes entiers.

L'opérateur En C Exemple 1 Renvoie
x ET y x&y; 110&011 010
x OU y x|y; 110|011 111
x OU EXCLUSIF y x^y; 110^011 101
Complément à 1 de x ~x; ~110 001
Décalage de x, de y bits vers la droite x>>y; 11011001>>3 00011011
Décalage de x, de y bits vers la gauche x<<y; 11011001<<3 11001000


Opérateurs d'Affectation

L'affectation des entiers est l'opération la plus fondamentale de tout langage de programmation. Cette opération est matérialisée par le signe "=". La valeur qui se trouve à la droite de ce signe est mise dans la variable située à sa gauche. Elle constitue également la valeur résultat de l'expression.

Exemple :

Les affectations combinées mélangent une opération d'affectation avec une opération arithmétique ou logique.

Façon 1 est équivalent à Façon 2
x++; est équivalent à x=x+1;
x--; est équivalent à x=x-1;
x+=y; est équivalent à x=x+y;
x-=y; est équivalent à x=x-y;
x*=y; est équivalent à x=x*y;
x/=y; est équivalent à x=x/y;
x%=y; est équivalent à x=x%y;
x>>=y; est équivalent à x=x>>y;
x<<=y; est équivalent à x=x<<y;
x&=y; est équivalent à x=x&y;
x|=y; est équivalent à x=x|y;
x^=y; est équivalent à x=x^y;