Vous êtes sur la page 1sur 13

2020-2021

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 :

 Un nom de variable doit commencer par une lettre (majuscule ou minuscule) ou un


caractère souligné « _ » (pas par un chiffre) ;
 Un nom de variables ne peut comporter que des lettres, des chiffres et caractère

auto double int struct break else long switch


case enum Register typedef char extern return union
continue for signed void do if static while
default goto sizeof volatile const float short unsigned
souligné «_»;

 Les noms de variables ne peuvent pas être les noms suivants (qui sont des mots
réservés) :

Le langage C est sensible à la casse, c’est-à-dire il fait la différence entre majuscule et


minuscule. Ainsi, double est différent de Double.

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

Les types de base en C sont :


 char (Caractère): Le type de données le plus fondamental en C. Il stocke un seul
caractère et nécessite un seul octet de mémoire dans presque tous les compilateurs.
 int (entier): permettant de stocker un entier (valeur sans virgule).
 float (réel simple): utilisé pour stocker des nombres décimaux avec une simple
précision.
 double : Il est utilisé pour stocker des nombres avec une double précision.

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

char Caractère 1 -128 à 127 %c

Caractère %c
unsigned char 1 0 à 255
non signé

short int Entier court 2 -32 768 à 32 767 %hd

unsigned short Entier court %hu


2 0 à 65 535
int 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)

-2 147 483 648 à 2 147 483 %ld


long int Entier long 4
647

Entier long %lu


unsigned long int 2 0 à 4 294 967 295
non signé

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

 Nombre entier (int)


Un nombre entier est un nombre sans virgule qui peut être exprimé dans différentes bases :

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

 Nombre à virgule (float)


Un nombre à virgule flottante est un nombre à virgule, il peut toutefois être représenté de
différentes façons :
 Un entier décimal : (895)
 Un nombre comportant un point (et non une virgule) : (845.32)
 Une fraction : (27/11)
 Un nombre exponentiel, c'est-à-dire un nombre (éventuellement à virgule) suivi
de la lettre e (ou E), puis d'un entier correspondant à la puissance de 10 (signé ou
non, c'est-à-dire précédé d'un + ou d'un -)
o 2.75e-2
o 35.8E+10
o .25e-2
 Les nombres de type float sont codés sur 32 bits dont :
 23 bits pour la mantisse
 8 bits pour l'exposant
 1 bit pour le signe
Les nombres de type double sont codés sur 64 bits dont :
 52 bits pour la mantisse
 11 bits pour l'exposant
 1 bit pour le signe
Les nombres de type long double sont codés sur 80 bits dont :
 64 bits pour la mantisse
 15 bits pour l'exposant
 1 bit pour le signe

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.

 Type de donnée défini


Il est possible en C de définir un nouveau type de données grâce au mot clé typedef. Celui-ci
admet la syntaxe suivante : typedef «Caracteristiques_du_type» «Nom_du_type» où
 «Caracteristiques_du_type» un type de données existant (par exemple float,
short int, ...)
 «Nom_du_type» : nom que vous donnez au nouveau type.
Exemple:
typedef char Ch // crée un type de donnée Ch identique au type char

 Conversion de type de données


 Conversion implicite : modification automatique du type de donnée par le
compilateur.
Si un opérateur a des opérandes de différents types, les valeurs des opérandes sont
converties automatiquement dans un type commun. Lors d'une affectation, la
donnée à droite du signe d'égalité est convertie dans le type à gauche du signe
d'égalité. Dans ce cas, il peut y avoir perte de précision si le type de la destination est
plus faible que celui de la source.
Exemple :
int x;
x = 8.324; //x contiendra après affectation la valeur 8
 Conversion explicite : Il est possible de convertir explicitement une valeur en un
type quelconque en forçant la transformation à l'aide de la syntaxe (<Type>)
<Expression>

Cette opération s’appelle le Casting (conversion de type forcée)

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

 Les opérateurs d'assignation (ou d’affectation composés)


Ces opérateurs permettent de simplifier des opérations telles qu’ajouter une valeur dans
une variable et stocker le résultat dans la variable.
expr1= expr1 op expr2 → expr1 op = expr2

+= -= *= /= %=
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

 Les opérateurs bit-à-bit


Les opérateurs suivants effectuent des opérations bit-à-bit, c'est-à-dire avec des bits de
même poids.

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)

 Les opérateurs de rotation de bit

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

Il existe deux façons de déclarer les constantes en C :


 Déclaration d'une variable, dont la valeur sera constante pour tout le programme :
Exemple :
const float PI = 3.14159;
 Définition d'un symbole à l'aide de la directive de compilation #define.
Exemple :
#define PI 3.14159

 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.

Syntaxe C Explication Observation


exp(X) fonction exponentielle eX
log(X) logarithme naturel ln(X), X>0
log10(X) logarithme à base 10 log10(X), X>0
pow(X,Y) X exposant Y XY
sqrt(X) racine carrée de X pour X>0
fabs(X) valeur absolue de X |X|
floor(X) arrondir en moins int(X)
ceil(X) arrondir en plus
fmod(X,Y) reste rationnel de X/Y (même signe que X) pour X différent de 0
sin(X) sinus
cos(X) cosinus
tan(X) tangente
asin(X) Arc sinus
acos(X) Arc cosinus
atan(X) arc tangente
sinh(X) Sinus hyperboliques
cosh(X) Cosinus hyperboliques
tanh(X) Tangente hyperboliques

D. Kourouma 9
II ENTREES/SORTIES

1. SORTIES DE NOMBRES OU DE TEXTE A L'ECRAN

 La fonction printf (bibliothèque stdio.h)


Cette fonction exige l'utilisation de formats de sortie, avec la syntaxe suivante :
printf("%format",nom_de_variable);
Exemple :
int nombre=10;
printf("%d",nombre)// permet d’afficher 10 contenu dans
nombre
Formats de sortie pour les entiers :
o %d : affichage en décimal (entiers de type int),
o %x : affichage en hexadécimal (entiers de type int),
o %u : affichage en décimal (entiers de type unsigned int).
Format de sortie pour les réels : %f
Format de sortie pour les caractères : %c
Format de sortie pour les chaines de caractères : %s
 Autres fonctions de sorties (non formatée) :
Affichage d'un caractère : putchar ()
Exemple :
char lettre=’a’;
putchar(lettre)// permet d’afficher «a»

Affichage d'une chaine de caractères : puts ()


Exemple :
char lettre=’a’;
puts ("Salut")// permet d’afficher «Salut»

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

Vous aimerez peut-être aussi