Vous êtes sur la page 1sur 11

Support langage C

Chapitre I. ELEMENTS DU LANGAGE C

1. Introduction
Le langage C a été conçu afin de réécrire de façon portable et en langage évolué le système
d'exploitation UNIX. En 1972, Dennis Ritchie, s'inspirant d'Algol 60 et du langage B de Ken
Thompson, donne ainsi naissance au langage C. En 1973, UNIX est réécrit en langage C par
D. Ritchie et K. Thompson.

Bien que le langage C n'ai pas été développé à la base pour concurrencer les langages existant
à l'époque (Fortran et Pascal, par exemple), le succès qu'a connu UNIX, notamment auprès
des universités, a fortement contribué à sa popularité. Il s'est vite imposé comme LE langage
de programmation par excellence d'UNIX.

En 1978, Brian Kernighan et Dennis Ritchie publient une définition du langage C qui restera
pour longtemps la norme de référence.

La plupart des fonctionnalités sont réalisées à partir de la librairie standard. Le C est


sémantiquement proche du matériel : les structures de données sont exprimées en fonction de
l'architecture de la machine (mot, registre, adresse, ...) Ainsi les programmes ont pour
avantage d'être efficaces, le code généré est rapide et compact.

2. Mise en oeuvre d’un programme C


La réalisation d'un programme commence par la traduction en C des algorithmes. Cette phase
de rédaction se fait à l'aide d'un éditeur de texte. Le programme source ainsi rédigé est ensuite
traité par le préprocesseur qui, suivant les directives de compilation, substitue des symboles,
inclut des fichiers sources etc... Le fichier source d'origine est retravaillé et présenté au
compilateur.

Polytec Sousse Page 1


Support langage C

Le compilateur examine chaque ligne, vérifie la syntaxe et génère un code intermédiaire.

Il reste alors à rassembler les codes intermédiaires (dans le cas où le programme est découpé
en plusieurs fichiers sources) et à les lier aux diverses librairies. C'est le rôle de l'éditeur de
liens (linker) qui produit le code exécutable du programme.

3. Structure d’un programme C


Un programme C se présente de la façon suivante :

Déclarations des bibliothèques


main() /* Programme principale */
{ /* Début du programme */
Déclarations de variables internes ; /* Corps du programme */
Instructions ;
} /* Fin du programme */

Le langage C distingue les minuscules, des majuscules. Les mots réservés du langage C
doivent être écrits en minuscules.

Le langage C possède assez peu d'instructions, il fait par contre appel à des bibliothèques,
fournies avec le compilateur.

Exemples : math.h : bibliothèque de fonctions mathématiques


stdio.h : bibliothèque d'entrées/sorties standard (Lire, Ecrire)

4. Les différents types de variables

4.1. Les entiers

Le langage C distingue plusieurs types d'entiers :


Type Description Taille mémoire
int entier standard signé 4 octets : - 231 ≤ n ≤231-1
unsigned int entier positif 4 octets : 0 ≤ n ≤ 232
short entier court signé 2 octets : - 215 ≤ n ≤ 215-1
unsigned short entier court non signé 2 octets : 0 ≤≤n ≤ 216
char caractère signé 1 octet : - 27 ≤≤n ≤ 27-1
unsigned char caractère non signé 1 octet : 0 ≤n ≤ 28

Numération: En décimal les nombres s'écrivent tels que, précédés de 0x en hexadécimal.


Exemple: 127 (décimal) = 0x7f (hexadécimal).

Polytec Sousse Page 2


Support langage C

Remarque: En langage C, le type char est un cas particulier du type entier : un caractère est
un entier de 8 bits. Les caractères alphanumériques s'écrivent entre ‘ ‘.

Exemples:
Le caractère 'a' a pour valeur 97 (son code ASCII).
Le caractère 'A' a pour valeur 65 (son code ASCII).

4.2. Les réels

Un réel est composé : d'un signe, d'une mantisse et d'un exposant. Le langage C distingue 3
types de réels:
Type Description Taille mémoire
Float réel standard 4 octets
Double réel double précision 8 octets
long double réel quadruple précision 16 octets

Remarque : L'opérateur sizeof(type) renvoie le nombre d'octets réservés en mémoire pour


chaque type d'objet.
Exemples : n = sizeof(char); /* n = 1 */
m = sizeof(int); /* m = 4 */

5. Les constantes
Une constante est une valeur qui apparaît littéralement dans le code source d'un programme,
le type de la constante étant déterminée par la façon dont la constante est écrit.

Le langage C autorise 2 méthodes pour définir les constantes.

1ère méthode: déclaration d'une variable, dont la valeur sera constante pour tout le programme.
Exemple : main()
{
const float PI = 3.14159;
float perimetre, rayon = 8.7;
perimetre = 2 * rayon * PI;
....
}

2ème méthode: définition d'un symbole à l'aide de la directive de compilation #define.


Exemple : #define PI = 3.14159
main()
{
float perimetre, rayon = 8.7;
perimetre = 2 * rayon * PI;
....
}

Quelques constants caractères :


\n interligne \r retour charriot

Polytec Sousse Page 3


Support langage C

\t tabulation horizontale \f saut de page


\v tabulation verticale \a signal d'alerte (bip sonore)
\b retour arrière

6. Les initialisations
Le langage C permet l'initialisation des variables dans la zone des déclarations :

char c; ≡ char c = 'A';


c = 'A';

int i; ≡ int i = 50;


i = 50;

7. Les opérateurs
Opérateurs arithmétiques sur les réels : + - * / avec la hiérarchie habituelle.

Opérateurs arithmétiques sur les entiers : + - * / (quotient de la division) % (reste de la


division) avec la hiérarchie habituelle.
Exemple : char c, d;
c = 'G';
d = c + 'a' - 'A';

Les caractères sont des entiers sur 8 bits, on peut donc effectuer des opérations. Dans
l’exemple ci-dessus, on transforme la lettre majuscule G en la lettre minuscule g.

Opérateurs relationnels :

> strictement supérieur


>= supérieur ou égal
< strictement inférieur
<= inférieur ou égal
== égal
!= différent

Attention à ne pas confondre l'opérateur de test d'égalité "==" avec l'opérateur d'affection
"=".
Opérateurs logiques booléens :

&& ET logique
|| OU logique
! négation logique

Opérateurs logiques sur les entiers bit à bit :

Polytec Sousse Page 4


Support langage C

& ET
| OU
^ OU exclusif
~ Complément à un
<< Décalage à gauche
>> Décalage à gauche

Exemple 1:
n = 23 ; /* n = 00010111 en binaire */
p = n << 2; /* p = n décalé de 2 bits à gauche = 01011100 = 92 */
q = n >> 1; /* q = n décalé de 1 bit à droite = 00001011 = 11 */

Exemple 2:
Considérons par exemple les entiers a =77 et b = 23 de type unsigned char (i.e. 8 bits). En
base 2 il s'écrivent respectivement 01001101 et 00010111.

Valeur
Expression Binaire Décimale
a 01001101 77
b 00010111 23
a&b 00000101 5
a|b 01011111 95
a^b 01011010 90
~a 10110010 178
b << 2 01011100 92 multiplication par 4
b << 5 11100000 224 ce qui dépasse disparaît
b >> 1 00001011 11 division entière par 2

8. Incrémentation et décrémentation
Le langage C autorise des écritures simplifiées pour l'incrémentation et la décrémentation de
variables :

i = i+1; ≡ i++;
i = i-1; ≡ i--;

Le langage C autorise des écritures simplifiées lorsqu'une même variable est utilisée de
chaque côté du signe = d'une affectation. Ces écritures sont à éviter lorsque l'on débute l'étude
du langage C car elles nuisent à la lisibilité du programme.

a = a+b; ≡ a+= b;
a = a-b; ≡ a-= b;
a = a & b; ≡ a&= b;

Polytec Sousse Page 5


Support langage C

a = a / b; ≡ a/= b;

9. Les conversions de types


L'opérateur de conversion de type, appelée cast ( ), permet de modifier explicitement le type
d'un objet. On écrit : (type) objet

Exemple :
int i = 3, j = 2;
float x;
x = (float) i/j; ==> x = 1.5

int i=0x1234, j ;
float s, r=86.7 ;
j = (int) r ;
s = (float) i ;

10. Quelques fonctions

sqrt : racine carré d’un entier ou d’un réel, bibliothèque math.h.


Exemple : sqrt(16) = 4

floor et ceil : arrondissement d’un réel, bibliothèque math.h.


Exemple : floor(2.3) = 2
floor(4.7) = 4
ceil (2.3) = 3
ceil (4.7) = 5

pow : la puissance nième de x (xn) , bibliothèque math.h.


Exemple : pow(2, 3) = 23 = 8
pow(5, 4) = 54 = 625

Rq : La fonction sqr (carré) n’existe pas dans le langage C.


Mise en oeuvre d’un programme C

Polytec Sousse Page 6


Support langage C

Code ASCII :

HEX DEC CHR HEX DEC CHR HEX DEC CHR HEX DEC CHR
00 0 NUL 20 32 SP 40 64 @ 60 96 `
01 1 SOH 21 33 ! 41 65 A 61 97 a
02 2 STX 22 34 " 42 66 B 62 98 b
03 3 ETX 23 35 # 43 67 C 63 99 c
04 4 EOT 24 36 $ 44 68 D 64 100 d
05 5 ENQ 25 37 % 45 69 E 65 101 e
06 6 ACK 26 38 & 46 70 F 66 102 f
07 7 BEL 27 39 ' 47 71 G 67 103 g
08 8 BS 28 40 ( 48 72 H 68 104 h
09 9 HT 29 41 ) 49 73 I 69 105 i
0A 10 LF 2A 42 * 4A 74 J 6A 106 j
0B 11 VT 2B 43 + 4B 75 K 6B 107 k
0C 12 FF 2C 44 , 4C 76 L 6C 108 l
0D 13 CR 2D 45  4D 77 M 6D 109 m
0E 14 SO 2E 46 . 4E 78 N 6E 110 n
0F 15 SI 2F 47 / 4F 79 O 6F 111 o
10 16 DLE 30 48 0 50 80 P 70 112 p
11 17 DC1 31 49 1 51 81 Q 71 113 q
12 18 DC2 32 50 2 52 82 R 72 114 r
13 19 DC3 33 51 3 53 83 S 73 115 s
14 20 DC4 34 52 4 54 84 T 74 116 t
15 21 NAK 35 53 5 55 85 U 75 117 u
16 22 SYN 36 54 6 56 86 V 76 118 v
17 23 ETB 37 55 7 57 87 W 77 119 w
18 24 CAN 38 56 8 58 88 X 78 120 x
19 25 EM 39 57 9 59 89 Y 79 121 y
1A 26 SUB 3A 58 : 5A 90 Z 7A 122 z
1B 27 ESC 3B 59 ; 5B 91 [ 7B 123 {
1C 28 FS 3C 60 < 5C 92 \ 7C 124 |
1D 29 GS 3D 61 = 5D 93 ] 7D 125 }
1E 30 RS 3E 62 > 5E 94 ^ 7E 126 ~
1F 31 US 3F 63 ? 5F 95 _ 7F 127 DEL

Polytec Sousse Page 7


Support langage C

Chapitre II. LES FONCTIONS D’AFFICHAGE ET DE SAISIE

1. Fonctions d’affichage

1.1. La fonction printf

Ce n'est pas une instruction du langage C, mais une fonction de la bibliothèque stdio.h.

Syntaxe :
printf( " chaine de caractère " , paramètres );

Exemple :
printf("La valeur de x est %d ", x );

Message Format Paramètre

Exemple : affichage d'un texte

printf("BONJOUR"); /* pas de retour à la ligne du curseur après l'affichage */


printf("BONJOUR\n"); /* affichage du texte, puis retour à la ligne du curseur */

Formats des variables :

%d, %i : int, short int


%u : unsigned int (entier non-signé)
%f : float
%lf : double
%e, %a, %g : float ou double
%c : caractère
%s : chaîne de caractères
%o : entier non-signé en Octal
%x : entier non-signé en Hexadécimal

Exemple :
#include <stdio.h>
#include <conio.h>
main()
{
char c;
c = 65; /* c = caractère alphanumérique ‘A’ (65 = code ASCII de ‘A’) */
printf("%d\n", c); /* affichage du code ASCII en décimal et retour à la ligne */
printf("%o\n", c); /* affichage du code ASCII en base huit et retour à la ligne */
printf("%x\n", c); /* affichage du code ASCII en hexadécimal et retour à la ligne */
printf("%c\n", c); /* affichage du caractère ‘A’ et retour à la ligne */
getch();
}

Polytec Sousse Page 8


Support langage C

Exemple :
Algorithmique C
Variables #include<stdio.h>
x, a, b : entier #include<conio.h>
r : réel
ch : caractère main()
Début {
x2 int x = 2, a = 47, b = 123 ;
r  3.57 float r = 3.57 ;
a  47 char ch = ‘m’ ;
ch  ‘m’
b  123 printf(" x = %d ", x);
écrire("x = ", x) printf(" r = %f ", r);
écrire("r = ", r) printf(" a = %d ", a);
écrire("a = ", a) printf(" ch = %c ", ch);
écrire("ch = ", ch) printf(" b = %d ", b);
écrire("b = ", b) getch();
Fin }

Affichage multiple de variables :


printf("%format1 %format2 .... %formatn", variable1, variable2, ..., variablen);

printf("x = %d , r = %f , a = %d , ch = %c et b = %d ", x , r , a , ch , b );

1.2. La fonction putchar

La fonction putchar permet d'afficher un caractère. Elle appartient à la bibliothèque stdio.h.


Exemple :
char c
putchar(c); ≡ printf("%c\n",c);

1.3. La fonction puts

La fonction puts permet d'afficher un texte. Elle appartient à la bibliothèque stdio.h.


Exemple :
puts("bonjour"); ≡ printf("bonjour\n");

2. Fonctions de saisie

2.1. La fonction getch

La fonction getch, appartenant à la bibliothèque conio.h, permet la saisie clavier d'un


caractère alphanumérique. La saisie s'arrête dès que le caractère a été frappé.

Polytec Sousse Page 9


Support langage C

On peut utiliser getch de deux façons: sans et avec retour de variable.

a) sans retour de variable au programme.


Exemple : printf("Pour continuer frapper une touche ");
getch();

b) avec retour de variable au programme.


Exemple : char alpha;
printf("Entrer un caractère");
alpha = getch();
printf("\nVoici ce caractère: %c", alpha);

2.2. La fonction scanf

La fonction scanf, appartenant à la bibliothèque stdio.h, permet la saisie clavier de n'importe


quel type de variable.

Les variables à saisir sont formatées, le nom de la variable est précédé du symbole &
désignant l'adresse de la variable.

La saisie s'arrête avec "RETURN" (c'est à dire LF, son code ASCII = 10 = 0x0A), les
éléments saisis s'affichent à l'écran. Tous les éléments saisis après un caractère d'espacement
(espace, tabulation) sont ignorés.

Syntaxe :
scanf( " format " , paramètres );

Exemple :
scanf(" %d ", &x );

Format Paramètre

Saisit de multiples de variables :


scanf("%format1 %format2 .... %formatn", &variable1, &variable2, ..., &variablen);

scanf("%d %f %d %c %d ", &x , &r , &a , &ch , &b );

Exemples : char alpha;


int i;
float r;
scanf("%c", &alpha); /* saisie d'un caractère */
scanf("%d", &i); /* saisie d'un entier en décimal */
scanf("%x", &i); /* saisie d'un entier en hexadécimal */
scanf("%f", &r); /* saisie d'un réel */

Exemple : char alpha;

Polytec Sousse Page 10


Support langage C
scanf("%d", &alpha);

Si l'utilisateur saisie 97 tout va bien, alpha devient le caractère dont le code ASCII vaut 97,
c.a.d. le caractère ‘a’. Par contre, si l'utilisateur saisie ‘a’, sa saisie est ignorée.

2.3. La fonction getchar

La fonction getchar permet la saisie d'un caractère (char). Elle appartient à la bibliothèque
stdio.h. Les deux écritures suivantes sont équivalentes :

char c; char c;
printf("entrer un caractère: "); printf("entrer un caractère: ");
scanf("%c", &c); c = getchar();

Polytec Sousse Page 11

Vous aimerez peut-être aussi