Académique Documents
Professionnel Documents
Culture Documents
Langage C
[Leçon 2]
M. Djiba Kourouma
ELEMENTS DE BASE
I VARIABLES
En langage C, les noms des variables peuvent être aussi long que l'on désire, toutefois le
compilateur ne tiendra compte que des 32 premiers caractères. De plus, elles doivent
répondre à certains critères :
Les noms de variables ne peuvent pas être les noms suivants (qui sont des mots
réservés) :
Il est à noter que les mots réservés sont en minuscules alors que les constantes sont
généralement en majuscule (PI par exemple)
1. TYPES DE VARIABLES
D. Kourouma 1
Différents types de données ont également différentes plages dans lesquelles ils peuvent
stocker des nombres. Ces plages peuvent varier d'un compilateur à l'autre.
Type de donnée Signification Taille (en octets) Plage de valeurs acceptée Format
Caractère %c
unsigned char 1 0 à 255
non signé
2 (sur processeur 16 %d
-32768 à 32767
bits)
int Entier -2 147 483 648 à 2 147 483
4 (sur processeur 32
647
bits)
2 (sur processeur 16 %u
Entier non bits) 0 à 65 535
unsigned int
signé 4 (sur processeur 32 0 à 4 294 967 295
bits)
flottant %f
float 4 3.4*10-38 à 3.4*1038
(réel)
flottant %lf
double 8 1.7*10-308 à 1.7*10308
double
flottant
long double 10 3.4*10-4932 à 3.4*104932 %Lf
double long
D. Kourouma 2
Base décimale: L'entier est représenté par une suite de chiffres unitaires (de 0 à
9) ne devant pas commencer par le chiffre 0
Base hexadécimale: L'entier est représenté par une suite d'unités (de 0 à 9 ou de
A à F (ou a à f)) devant commencer par 0x ou 0X
Base octale: L'entier est représenté par une suite d'unités (incluant uniquement
des chiffres de 0 à 7) devant commencer par 0
D. Kourouma 3
Caractère (char)
Le type char permet de stocker la valeur ASCII (American Standard Code for Information
Interchange) d'un caractère, c'est-à-dire un nombre entier !
Il n'existe pas de type de données pour les chaînes de caractères (suite de caractère) en
langage C. Pour créer une chaîne de caractère on utilisera des tableaux contenant dans
chacune de ses cases un caractère.
D. Kourouma 4
Exemple :
int x;
x = (int)8.324;
x contiendra après affectation la valeur 8
D. Kourouma 5
2. OPERATEURS
Opérateurs arithmétiques
+ addition
- soustraction
* multiplication
/ Division (entière et rationnelle !)
% modulo (reste d'une div. entière)
Opérateurs logiques
&& et logique (and)
|| ou logique (or)
! négation logique (not)
Opérateurs de comparaison
= = égal à
!= différent de
<, <=, >, >= plus petit que, ...
Les résultats des opérations de comparaison et des opérateurs logiques sont du type int:
La valeur 1 correspond à la valeur booléenne vrai
La valeur 0 correspond à la valeur booléenne faux
Les opérateurs logiques considèrent toute valeur différente de zéro comme vrai et zéro
comme faux :
32 && 2.3 1
!65.34 0
0||!(32 > 12) 0
+= -= *= /= %=
VARIABLE = VARIABLE OPERTATEUR VALEUR
VARIABLE OPERATEUR=VALEUR
Exemple
x+=5 // x+=5
D. Kourouma 6
x-=5 // x=x*5
Les opérateurs d'incrémentation
I = I + 1 et I = I - 1
En C, nous disposons de deux opérateurs inhabituels pour ces affectations :
I++ ou ++I pour l'incrémentation (augmentation d'une unité)
I-- ou --I pour la décrémentation (diminution d'une unité)
Les opérateurs ++ et -- sont employés dans les cas suivants :
Incrémenter/décrémenter une variable (par exemple dans une boucle) ; Dans ce cas il
n'y a pas de différence entre la notation préfixe (++I --I) et la notation postfixe (I++ I--
);
Incrémenter/décrémenter une variable et en même temps affecter sa valeur à une
autre variable. Dans ce cas, nous devons choisir entre la notation préfixe et postfixe:
X = I++ passe d'abord la valeur de I à X et incrémente après
X = I-- passe d'abord la valeur de I à X et décrémente après
X = ++I incrémente d'abord et passe la valeur incrémentée à X
X = --I décrémente d'abord et passe la valeur décrémentée à X
Exemple
Supposons que la valeur de N est égale à 5 :
Incrém. postfixe: X = N++; Résultat: N=6 et X=5
Incrém. préfixe: X = ++N; Résultat: N=6 et X=6
Résultat (avec
Opérateur Dénomination Effet Syntaxe
x valant 7)
9 & 12
Retourne 1 si les deux bits de même
& ET bit-à-bit (1001 & 8 (1000)
poids sont à 1
1100)
Retourne 1 si l'un ou l'autre des deux
9 | 12
| OU bit-à-bit bits de même poids est à 1 (ou les 13 (1101)
(1001 | 1100)
deux)
Retourne 1 si l'un des deux bits de
OU bit-à-bit 9 ^ 12
^ même poids est à 1 (mais pas les 5 (0101)
exclusif (1001 ^ 1100)
deux)
D. Kourouma 7
Ces opérateurs traitent ces données selon leur représentation binaire mais retournent des
valeurs numériques standard dans leur format d'origine. Les opérateurs suivants effectuent
des rotations sur les bits.
Résultat
Opérateur Dénomination Effet Syntaxe (avec x
valant 7)
Décale les bits vers la gauche
(multiplie par 2 à chaque décalage).
Rotation à 6 << 1 (110 <<
<< Les zéros qui sortent à gauche sont 12 (1100)
gauche 1)
perdus, tandis que des zéros sont
insérés à droite
Décale les bits vers la droite (divise
Rotation à
par 2 à chaque décalage). Les zéros
droite avec 6 >> 1 (0110
>> qui sortent à droite sont perdus, 3 (0011)
conservation >> 1)
tandis que le bit non-nul de poids
du signe
plus fort est recopié à gauche
L'opérateur sizeof(type) renvoie le nombre d'octets réservés en mémoire pour
chaque type d'objet.
Exemple:
n = sizeof(char); /* n vaut 1 */
Les priorités
Lorsque l'on associe plusieurs opérateurs, il faut que le navigateur sache dans quel ordre les
traiter, voici donc dans l'ordre décroissant les priorités de tous les opérateurs :
Classes de priorités
Priorité 1 (la plus forte): ()
Priorité 2: ! ++ --
Priorité 3: * / %
Priorité 4: + -
Priorité 5: < <= > >=
Priorité 6: == !=
Priorité 7: &&
Priorité 8: ||
Priorité 9 (la plus faible): = += -= *= /= %=
Dans chaque classe de priorité, les opérateurs ont la même priorité. Si nous avons une suite
d'opérateurs binaires de la même classe, l'évaluation se fait en passant de la gauche vers la
droite dans l'expression.
Pour les opérateurs unaires (!,++,--) et pour les opérateurs d'affectation (=,+=,-=,*=,/=,%=),
l'évaluation se fait de droite à gauche dans l'expression.
D. Kourouma 8
3. DECLARATIONS DE CONSTANTES
Fonctions arithmétiques
Les fonctions suivantes sont prédéfinies dans la bibliothèque standard <math.h>. Pour
pouvoir les utiliser, le programme doit contenir la ligne : #include <math.h>
Les arguments et les résultats des fonctions arithmétiques sont du type double.
D. Kourouma 9
II ENTREES/SORTIES
D. Kourouma 10
2. SAISIE DE NOMBRE ET DE CARACTERE AU CLAVIER
La fonction scanf
La fonction scanf, appartenant à la bibliothèque stdio.h, permet la saisie clavier de n'importe
quel type de variable.
Exemples:
char alpha;
int i;
float r;
scanf("%c",&alpha); /* saisie d'un caractère */
scanf("%d",&i); /* saisie d'un nombre entier en
décimal */
scanf("%x",&i); /* saisie d'un nombre entier en
hexadécimal*/
scanf("%f",&r); /* saisie d'un nombre réel */
Remarque : Si l'utilisateur ne respecte pas le format indiqué dans scanf, la saisie est ignorée.
Aucune erreur n'est générée.
Exemple :
char alpha;
scanf("%d",&alpha);
Si l'utilisateur saisie 97 tout va bien, alpha devient le caractère dont le code ASCII vaut 97.
Si l'utilisateur saisie a, sa saisie est ignorée.
La fonction getch()
La fonction getch, appartenant à la bibliothèque conio.h permet la saisie clavier d' un
caractère alphanumérique, sans écho écran. La saisie s'arrête dès que le caractère a été
frappé.
On peut utiliser getch de deux façons :
- sans retour de variable au programme :
Exemple :
printf("POUR CONTINUER FRAPPER UNE TOUCHE ");
getch();
D. Kourouma 11
- avec retour de variable au programme :
Exemple:
char alpha;
printf("ENTRER UN CARACTERE (ATTENTION PAS DE RETURN) ");
alpha = getch();
printf("\nVOICI CE CARACTERE: %c",alpha);
La fonction getchar
La fonction getchar permet la saisie d'un caractère (char). Elle appartient à la bibliothèque
stdio.h.
Les 2 écritures suivantes sont équivalentes :
char c; char c;
printf("ENTRER UN CARACTERE: "); printf("ENTRER UN CARACTERE: ");
scanf("%c",&c); c = getchar();
Non formatée, la fonction getchar est moins gourmande en place mémoire que scanf. Il vaut
mieux l'utiliser quand cela est possible ; getchar utilise le flux d'entrée exactement comme
scanf.
Exemple 1:
Premiers programmes en C
Programme qui affiche sur l’écran « Bonjour le monde »
#include <stdio.h>
int main()
{
printf (“Bonjour le monde”);
}
Les instructions du langage C sont séparées par un point-virgule (;)
D. Kourouma 12