Généralité sur le langage C
Introduction :
Dans ce chapitre, nous vous proposons une première approche d'un programme en langage C, basée sur
un exemple commenté. Vous y découvrirez comment s'expriment les instructions de base Nous
dégagerons ensuite quelques règles générales concernant l'écriture d'un programme.
Pour commencer voici un exemple de programme en langage C, accompagné d'un exemple d'exécution.
#include < stdio.h>
main()
{
printf("Premier programme\n ");
}
L’exécution donne :
Analyse du premier programme :
La directive # include
La ligne :
#include < stdio.h>
Est une directive du préprocesseur : Pour compiler correctement un fichier, le compilateur a besoin
d'informations concernant les déclarations de structures de données et de variables externes ainsi que de
l'aspect (on dira prototype) des fonctions prédéfinies. Toutes ces informations sont contenues dans des
fichiers avec l'extension .h. Ces fichiers doivent être inclus dans le fichier que l'on veut compiler.
En générale le langage C offre la directive du préprocesseur.
#include < nom de fichier >
Par exemple, pour utiliser la fonction printf, il faut inclure le fichier stdio.h (standard input output)
La fonction main
La ligne :
main()
Est un "en-tête", elle précise que ce qui sera décrit à sa suite est le programme principal.
Un programme en C apparaît comme une fonction qui porte le nom main(), le programme doit être
délimité par des accolades « { » pour le début, et « } » pour la fin.
On dit que les instructions situées entre ces accolades forment un "bloc".
La fonction printf
La linge :
printf(“Premier programme \n”);
Est une instruction qui appelle une fonction "prédéfinie" nommée printf., cette fonction reçoit un
argument qui est :
"Premier programme \n"
Les guillemets servent à délimiter une "chaîne de caractères". La notation \n est conventionnelle: elle
représente un caractère de fin de ligne, c'est-à-dire un caractère qui, lorsqu'il est envoyé à l'écran,
provoque le passage à la ligne suivante.
Nous verrons que, de manière générale, le langage C prévoit une notation de ce type (\ suivi d'un
caractère) pour un certain nombre de caractères dits "de contrôle".
Quelques règles d’écriture.
Ce paragraphe vous expose un certain nombre de règles d'écriture d'un programme en langage C. Nous y
parlerons précisément de ce que l'on appelle les "identificateurs" et les "mots clés", du format libre dans
lequel on écrit les instructions, de l'usage des séparateurs et des commentaires.
Les identificateurs
Les identificateurs servent à désigner les différents "objets" manipulés par le programme: variables,
fonctions, etc. Ils sont formés d'une suite de caractères (lettres ou les chiffres), le premier d'entre eux étant
nécessairement une lettre.
Noter que :
• le symbole '_' est considéré comme une lettre.
• C distingue les majuscules et les minuscules, ainsi: 'Nom__var est différent de 'nom_var'
• La longueur des identificateurs n'est pas limitée, mais C distingue seulement les 31 premiers
caractères.
Les séparateurs
Dans un programme, deux identificateurs successifs entre lesquels la syntaxe n'impose aucun signe
particulier doivent impérativement être séparés soit par un espace, soit par une fin de ligne. Par contre,
dès que la syntaxe impose un séparateur quelconque, il n'est alors pas nécessaire de prévoir d'espaces
supplémentaires (bien qu'en pratique cela améliore la lisibilité du programme). Ainsi, vous devrez
impérativement écrire :
int x,y :
et non :
int x,y
En revanche, vous pourrez écrire indifféremment :
int n,compte,total ;
Ou plus lisiblement :
int n, compte, total ;
Les commentaires
Un commentaire c’est un texte explicatif destiné aux lecteurs du programme et qui n'a aucune incidence
sur sa compilation. Il est formé de caractères quelconques placés entre les symboles /* et */.
Voici quelques exemples de commentaires:
// Mon premier Programme
Ou :
/* commentaire s'étendant
sur plusieurs lignes
de programme source */.
Les types et les variables
Introduction:
Nous allons, tout au long de ce chapitre, étudier l'ensemble des types que fournit le langage C ainsi que
l'utilisation des variables.
La notion de type
La mémoire centrale est un ensemble de "positions binaires" nommées bits. Les bits sont regroupés en
octets (8bits), et chaque octet est repéré par son adresse.
L'ordinateur, ne sait représenter et traiter que des informations exprimées sous forme binaire. Toute
information, quelle que soit sa nature, devra être codée sous cette forme. Dans ces conditions, il ne suffit
pas de connaître le contenu d'un emplacement de la mémoire pour être en mesure de lui attribuer une
signification.
Par exemple, si un octet contient la valeur binaire suivant :1000 1101 alors ça peut représenter un
nombre entier positif ou négatif, comme elle peut représenter un nombre réel ou un caractère, ou même
une instruction de programme, ou un graphique …..
Donc il n'est pas possible d'attribuer une signification à une information binaire tant que l'on ne connaît
pas la manière dont elle a été codée et son type.
C manipule deux types de base: les entiers et les nombres flottants.
Les entiers
En C, on dispose de divers types d'entiers qui se distinguent par la place qu'ils occupent en mémoire :
o sur 1 octet, les entiers signés et non signés (char) et (unsigned char).
o sur 2 octets, les entiers signés et non signés (short) et (unsigned short).
o sur 4 octets, les entiers signés et non signés (long) et (unsigned long).
o le type int (unsigned int) est selon les machines synonymes de short (unsigned short) ou de long
(unsigned long)
Le type char
Le type char désigne un entier signé codé sur 1 octet. Il en découle que toutes les opérations autorisées sur
les entiers peuvent être utilisées sur les caractères. Aussi surprenant que cela puisse paraître, on peut
ajouter ou soustraire deux caractères, ajouter ou soustraire un entier à un caractère.
Une utilisation classique de cette souplesse d'utilisation est la conversion d'un caractère c désignant un
chiffre en sa valeur v correspondante:
v = c - '0'
Les types short, long ou int
Le type short représente un entier signé codé sur 2 octets (de -32768 à 32767) et le type unsigned short
représente un entier non signé codé sur 2 octets (de 0 à 65535). Le type long (ou int pour nos machines)
représente un entier signé codé sur 4 octets (de -2147843648 à 2147843647) et le type unsigned long (ou
unsigned int pour nos machines) représente un entier non signé codé sur 4 octets (de 0 à 4294967295).
Le type réel
Les nombres à virgule flottante (abusivement appelés réels) servent à coder de manière approchée lesnombres réels. Un nombre à virgule flottante est composé d'un signe, d'une mantisse et d'un exposant. On
dispose de trois types de nombres à virgule flottante, les types float, double et long double.
Les floats
Un float est codé sur 4 octets avec 1 bit de signe, 23 bits de mantisse et 8 bits d'exposant (valeurscomprises entre 3.4 * 10-38 et 3.4 * 1038).
Les doubles
Un double est codé sur 8 octets avec 1 bit de signe, 52 bits de mantisse et 11 bits d'exposant (valeurscomprises entre 1.7 * 10-308 et 1.7 * 10308).
Les long doubles
Un long double est codé sur 10 octets avec 1 bit de signe, 64 bits de mantisse et 15 bits d'exposant(valeurs comprises entre 3.4 * 10-4932 3.4 * 104932 ).
LLEESS CCOONNSSTTAANNTTEESS
Nous avons présenté les divers types de données élémentaires du langage C sans dire comment écrire une
constante de l'un de ces types dans un programme C. Nous allons à présent donner la syntaxe utilisée dans
le langage C pour désigner des constantes littérales.
Les constantes entières
Les constantes entières peuvent s'exprimero en notation décimale: 123, -123, etc...
o en notation octale avec un 0 en première position: 0123
o en notation hexadécimale avec les caractères 0x ou 0X en première position : 0x1b 0X2c, 0X1B,
0X2C, etc...
Le type d'une constante entière est le << plus petit >> type dans lequel il peut être représenté :
o notation décimale : int, sinon long, sinon unsigned long
o notation octale ou décimale : int, sinon unsigned int, sinon unsigned long
Des suffixes permettent de changer cette classification :
o U, u : constante de type unsigned
o L, l : constante de type long
Exemple:
1L, 0x7FFU, 16UL, etc...
Les constantes flottantes
Une constante flottante se présente sous la forme d'une suite de chiffres (partie entière), un point qui jouele rôle de virgule, une suite de chiffres (partie fractionnaire), une des deux lettres e ou E, éventuellement
le signe + ou - suivi d'une suite de chiffres (valeur absolue de l'exposant)
La partie entière ou la partie fractionnaire peut être omise (pas les deux); de même le point ou l'exposant
peut être omis (pas les deux).
Une constante flottante est supposée être de type double. Le suffixe F indique qu'elle est de type float. Le
suffixe LF indique qu'elle est de type long double.
Exemple.
.5e7, 5.e6, 5e6, 5000
Les constantes de type caractère
Les constantes de type caractère se note entre apostrophes: 'a' '2' '"'
Le caractère ' se note '\'' et le caractère \ se note '\\'.
On peut également représenter des caractères non imprimables à l'aide de séquences d'échappement.
Voici une liste non exhaustive de caractères non imprimable:
char valeur
\n nouvelle ligne
\t tabulation horizontale
\v tabulation verticale
\b retour d'un caractère en arrière
\r retour chariot
\f saut de page
\a beep
\' apostrophe
\" guillemet
\\ anti-slash
\ddd code ASCII en notation octale
\xddd code ASCII en notation hexadécimale
Les variables
Une variable est un emplacement en mémoire identifié par un identificateur, contenant une valeur d'untype donné et dont la valeur peut être modifiée durant l'exécution du programme.
Avant d’utiliser une variable on doit la déclarer c à d spécifier son type et lui associer un identificateur.
Les déclarations suivantes :
char Terme ; int nombre ; double nombr_2;
sont des déclarations de variables ainsi Terme est défini comme une variable de type char, nombre
comme une variable de type int et nombr_2 comme une variable de type double.
Noter que toute déclaration de variable se termine par un point-virgule et qu'une déclaration peut se
trouver n'importe où sur une ligne. Plusieurs variables de même type peuvent bien sûr être déclarées en
une seule fois. Le type est alors suivi d'une liste d'identificateurs séparés par des virgules. Ainsi :
short a, b, c;
Déclare trois variables a, b, c de type short.
Les variables peuvent être initialisées à la déclaration avec des constantes. On utilise pour cela le symbole
« = ». Les exemples suivants sont des initialisations de variables correctes :
int max = 0; float som = 0.5 ;
Les opérateurs et les expressions
Introduction
Le langage C est certainement l'un des langages les plus fournis en opérateurs. Cette richesse se manifestetout d'abord au niveau des opérateurs classiques (arithmétiques, relationnels, logiques) ou moins
classiques (manipulations de bits)
LLEESS OOPPÉÉRRAATTEEUURRSS
Les opérateurs arithmétiques :
• - : changement de signe
• * : Multiplication
• / : Division
• % : Modulo (reste de la division de deux entiers)
• + : Addition
• - : Soustraction
Les opérateurs unaires + et - ont la priorité la plus élevée. On trouve ensuite, à un même niveau, les
opérateurs *, / et %. Enfin, sur un dernier niveau, apparaissent les opérateurs binaires + et -. En cas de
priorités identiques, les calculs s'effectuent de "gauche à droite". On dit que l'on a affaire à une
"associativité de gauche à droite".
Remarque :
Une valeur de type caractère peut être considérée de deux façons:
- comme le caractère concerné: a, Z, fin de ligne....- comme le code ASCII de ce caractère par exemple le caractère A est représenté par 69 ainsi :c =’A’ ;
b=c+1 ; affecte 70 à b.
Les opérateurs relationnels :
Ces opérateurs binaires (vrai ou faux) permettent d’établir des conditions logiques en comparant leurs
deux opérandes.
• == test si égal
• != test si différent
• < test si inférieur
• <= test si inférieur ou égal
• > test si supérieur
• >= test si supérieur ou égal
Les opérateurs logiques:
Ces opérateurs permettent les opérations booléennes classiques sur des conditions logiques.
• ! Négation logique d’une condition
• && ET logique de conditions
• || OU logique de conditions
Opérateur d’incrémentation
Incrémentation préfixée/postfixée.
• a++ est équivalent à a=a+1;
• b=a++; est équivalent à b=a; puis a=a+1;
• b=++a; est équivalent à a=a+1; puis b=a;
On dit que ++ est :
-un opérateur de pré incrémentation lorsqu'il est placé à gauche de la "lvalue" sur laquelle il porte,
-un opérateur de post incrémentation lorsqu'il est placé à droite de la "lvalue" sur laquelle il porte
Les opérateurs d’affectation élargie
C dispose d'opérateurs encore plus puissants. Ainsi, vous pourrez remplacer:• i = i + k par : i += k
• a = a*b par : a *= b.
D'une manière générale, C permet de condenser les affectations de la forme :
lvalue = lvalue opérateur expression en : lvalue opérateur= expression
Cette possibilité concerne tous les opérateurs binaires arithmétiques. Voici la liste complète de tous ces
nouveaux opérateurs nommés "opérateurs d'affectation élargie": += -= *= /= %= |= ...
Opérateur conditionnel
a?b:c Vaut la valeur de b si a est vrai, c sinon.
Exemples :
• a = 2+3o valeur de a: 5
• r = 3%2
o valeur de a: 1
• a = (3= =3)
o valeur de a: 1
• a = (6= =5)
o valeur de a: 0
• a = (2!=3)
o valeur de a: 1
• a = (6<=3)
o valeur de a: 0
• a = !1
o valeur de a: 0
• a =((3= =3) || (6<=3))
o valeur de a: 1
• a =((3==3) && (6<=3))
o valeur de a: 0
• i=1; a=i++;
o valeur de a: 1 et de i :2
• i=1; a=++i;
o valeur de a: 2 et de i :2
Aucun commentaire:
Enregistrer un commentaire