Introduction au langage C et sa structure
Introduction au langage C et sa structure
ENIT - 1A GE
3
Structure d’un programme C
Un programme C comporte:
Une entête (header) constitué de méta-instructions ou
directives destinées au préprocesseur (Exp: Inclusion de
librairies de fonctions prédéfinies)
Un bloc Principal appelé main() qui représente la
fonction principale
Le corps des fonctions placées avant ou après le
main() dans un ordre quelconque, les unes après les
autres
Partout, les variables et les fonctions font l‟objet d‟une
déclaration précisant leurs types
4
Fichier C (extension .c)
/* exemple de programme C :
- somme des nb de 1 à 10 et affichage
de la valeur*/ En C le programme principal 1
#include <stdio.h> 0 s'appelle toujours main
void main () 1
déclarations de variables de
{ type entier (cases mémoire
2
int somme; int i; 2 pouvant contenir un entier)
somme = 0; 3 instruction d'affectation de 3
for (i = 1; i <= 10; i++) valeur à la variable somme
4 { instructions exécutées
somme = somme + i; en séquence
} l'instruction entre accolades 4
printf ("%d\n", somme); 5 est exécutée pour les valeurs
} de i allant de 1 à 10
affiche à l'écran la valeur de 5
l'entier contenu dans somme
5
Exemple: Calcul de la surface d’un cercle
En Pascal En C
6
Structure d’un programme C
Programme typique en C
include
Main() est toujours la
1ère fonction appelée
main()
instructions
7
1. Les éléments de base du langage C
Considérations Lexicales
Les Identificateurs
Un identificateur est constitué de lettres („a‟...„z‟, „A‟..„Z‟), de
chiffres („0‟...„9‟) et éventuellement du caractère souligné („_‟).
Un identificateur doit impérativement commencer par une
lettre ou un ‟_‟ et ne pas faire partie de la liste des mots
réservés.
Attention, une distinction est faite entre les caractères
majuscules et minuscules (NbLignes et nblignes sont deux
identificateurs différents).
La norme ANSI a fixé à 31 le nombre de caractères
significatifs d‟un identificateur bien que la longueur de ce
dernier puisse être plus importante.
9
Les mots clés
10
Les Commentaires
11
L’appel d’une bibliothèque : #include
12
Les éléments de base du langage C
Les Constantes
Définition Constante
14
Nombres Entiers
15
Nombres Flottants
Une constante littérale est l'expression d'un nombre flottant si elle présente, dans
l'ordre :
une suite de chiffes décimaux (la partie entière)
un point, qui joue le rôle de virgule décimale
une suite de chiffres décimaux (la partie fractionnaire)
une des deux lettres E ou e
éventuellement un signe + ou -
une suite de chiffres décimaux
Les trois derniers éléments forment l'exposant.
Exemple : 123.456E-78.
On peut omettre :
la partie entière ou la partie fractionnaire, mais pas les deux
le point ou l'exposant, mais pas les deux.
Exemples : .5e7, 5.e6, 5000000., 5e6
Une constante flottante est supposée de type double, à moins de comporter un suffixe
explicite :
les suffixes F ou f indiquent qu'elle est du type float
les suffixes L ou l indiquent qu'elle est du type long double
Exemples : 1.0L, 5.0e4f
16
Caractères et Chaînes de Caractères(1)
17
Caractères et Chaînes de Caractères(2)
18
Caractères et Chaînes de Caractères(3)
19
Déclaration Constante
20
Les éléments de base du langage C
22
C possède 4 types de base
Plage de
Type Signification Taille (bits)
valeurs
int Entier 16 (2 o) -32768 à +32767
Réel en double
double 64 (8 o) ±10-307 à ± 10+308
précision
char Caractère 8 (1 o)
23
Les littéraux entiers
Les notations utilisées pour écrire les littéraux entiers sont :
la notation décimale,
la notation octale, (doit commencer par 0)
et la notation hexadécimale. (doit finir par h et commencer par 0 si le
premier est une lettre).
Il existe la possibilité d‟ajouter un attribut (ou modificateur ) :
unsigned : entier ou caractère non signé, de 0 à 65535
long : entier double longueur, de -2.109 à +2.109
short : entier court, de -32768 à +32767
On peut omettre d‟écrire int avec un attribut.
24
Les littéraux réels
25
Les littéraux caractères(1)
Les littéraux caractères permettent de désigner les valeurs
entières correspondant aux code ASCII des caractères. Les
notations possibles sont :
la notation éditable : présentation du caractère entre apostrophes,
la notation décimale : valeur décimale du code ASCII correspondant,
la notation octale : valeur octale du code ASCII correspondant,
la notation hexadécimale : valeur hexadécimale du code ASCII
correspondant,
la notation symbolique : certains littéraux caractères possèdent des
notations symboliques, le tableau ci-dessous les résume :
26
Les littéraux caractères(2)
Notation Signification
'\a' Signal sonore
'\n' Passage à la ligne suivante
'\r' Retour du curseur en début de ligne
'\b' Déplacement du curseur d’un caractère vers la gauche
'\f' Déplacement vers la page suivante
'\t' Déplacement du curseur d’une tabulation vers la droite
27
Les littéraux chaînes de caractères
28
Définition de nouveaux types
29
Les éléments de base du langage C
Les Opérateurs
Les opérateurs
Symboles simples :
( ) [ ] . ! ~ < > ? :
= , + - * / % & ^
Symboles composés :
-> ++ -- <= >= == != && || << >>
+= -= *= /= %= <<= >>= |= &= ^=
Tous ces symboles sont reconnus par le compilateur comme des
opérateurs.
Il est interdit d'insérer des caractères blancs à l'intérieur d'un
symbole composé. En outre, il est conseillé d'encadrer par des
blancs (laisser des espaces) 0 toute utilisation d'un opérateur.
31
Classes d’opérateurs
32
Les opérateurs arithmétiques
+ : addition,
- : soustratction,
* : multiplication,
/ : division :
division entière : si les 2 opérandes sont entières,
division réelle : si au moins une des 2 opérandes est réel
% : reste de la division
Exp: float x;
x = 3 / 2; /*affecte à x la valeur 1 */
x = 3 / 2.0; /*affecte à x la valeur 1.5 */
L'opérateur % ne s'applique qu‟à des opérandes de type entier.
En C, il n‟y a pas d‟opérateur effectuant l‟élévation à la puissance.
Donc, il faut utiliser la fonction pow(x,y) de la librairie math.h pour
calculer xy
33
Les opérateurs relationnels
== : égal,
!= : différent,
> : Strictement supérieur,
>= : supérieur ou égal,
< : Strictement inférieur,
<= : inférieur ou égal.
34
Les opérateurs logiques
! : négation unaire,
&& : ET logique binaire
|| : OU logique binaire
Le type booléen n‟existe pas en C, la valeur
retournée par ces opérateurs est un entier
qui vaut 0 si la condition est faux.
35
Les opérateurs de traitement de bits
~ : complément à 1 0
1
0
1
1
0
36
Les opérateurs d’incrémentation et de décrémentation
37
L’opérateur d'affectation
38
Les opérateurs d'affectation composée
39
L'opérateur virgule
40
L'opérateur de conversion de type
41
L'opérateur de référencement &
42
Opérateur de déréférencement *
43
L’Opérateur SizeOf()
44
Priorité des opérateurs(1)
Exemple
45
Priorité des opérateurs(2)
Exemple
Dans l'instruction: X = 2*(A+3)*B+4*C;
(En reprenant les valeurs du dernier exemple, le résultat
sera 164)
46
Priorité des opérateurs(3)
Classes de priorités
Priorité 1 (la plus forte): ( )
Priorité 2: ! ++ --
Priorité 3: * / %
Priorité 4: + -
Priorité 6: == !=
Priorité 7: &&
Priorité 8: ||
47
Priorité des opérateurs(4)
48
Priorité des opérateurs(5)
Exemples
L'expression 10+20+30-40+50-60 sera évaluée comme suit:
10+20 ==> 30 - 30+30 ==> 60 - 60-40 ==> 20 - 20+50 ==> 70 - 70-60 ==> 10
49
Conversion Implicite de type(1)
50
Conversion Implicite de type(2)
Exemple
51
Conversion Implicite de type(3)
52
Les éléments de base du langage C
Les Variables
Déclaration de variables
54
Les fonctions d’E/S standards
Les fonctions d’E/S standards
scanf()
lecture formatée de données
putchar()
écriture d'un caractère
getchar()
lecture d'un caractère
56
Ecriture formatée de données(1)
Syntaxe
printf( "Chaine de format" {, argument});
57
Ecriture formatée de données(2)
Les spécifications de format commencent toutes par le
caractère pourcent (‟%‟), peuvent ensuite contenir une
indication de largeur (minimale), de précision (maximale)
et finalement un caractère code pour le type de
l’argument. Voici les codes de type essentiels
• d pour les entiers
• f pour les nombres flottants sous forme décimale
• e pour les nombres flottants sous forme scientifique
• c pour les caractères
• s pour une chaîne de caractères
• % pour afficher le caractère ‟%‟
58
Ecriture formatée de données(3)
Remarque :
Il doit y avoir au moins autant d‟arguments
qu‟il en est prévu dans la chaîne de format;
sinon, le résultat n‟est pas prévisible
59
Ecriture formatée de données(4)
Exercice:
Déclarer une constante contenant le nom d‟une
classe exemple "1AENIT"
Déclarer une var nom de type chaîne de caractère
et lui assigner une valeur exemple "ahmed"
Déclarer 2 variables test et exam de type réel et
leur assigner 2 valeurs quelconques exemple 12.5
et 17.0
Afficher à l‟écran le nom de la classe, le nom de
l‟étudiant, les notes de test et examen ainsi que sa
moyenne ( test * 0.4 + exam * 0.6 )
60
Ecriture formatée de données(5)
Remarques :
61
Lecture formatée de données(1)
62
Lecture formatée de données(2)
63
Lecture formatée de données(3)
64
Lecture formatée de données(4)
65
Lecture formatée de données(5)
Remarques:
On peut placer la longueur de la variable entre le signe
% et la lettre spécificateur. Par exemple « %3d »
indique qu‟on va lire un entier de 3 chiffres et le reste
des chiffres sont ignorés. scanf("%3d",&i) ;
Si l‟on sépare les spécificateurs de format par des
espaces ou par des virgules alors les valeurs à lire
seront séparées par les mêmes séparateurs.
Exercice:
Changer l‟Exercice précédent de telle façon que le nom de
l‟étudiant et ses notes seront demandés de l‟utilisateur.
66
La fonction putchar
67
La fonction getchar()
68
2. Les structures de contrôle
Contrôle de flux
70
Les structures conditionnelles
Elles permettent au programme de suivre
plusieurs chemins différents, en fonction de
conditions que l‟on teste en cours
d‟exécution. Le programme choisira un
chemin et n‟exécutera qu‟un sous-ensemble
des instructions données. Les structures
conditionnelles de C sont
• if ... else ... (si ... sinon ...)
• switch (choix multiple : Selon)
• l’opérateur ( ... )? ... : ...; (alternative)
71
Les structures de contrôle
L‟instruction if … else
if...else... (1)
Syntaxe
Sans alternative:
if ( expression )
instruction ou bloc d’instructions
Avec alternative:
if ( expression )
instruction1 ou bloc d’instructions 1
else
instruction2 ou bloc d’instructions 2
73
if...else... (2)
if (expression) action1 ;
else action2 ;
fin de l'instruction if
calcul …
Vrai "calcul juste" if (z == 3) {
z = z+10 printf("calcul juste");
z=3 ? z=z+10;
}
Faux else printf ("problème");
"problème" printf ("%d",z);
…
Imprimer z
74
if...else... (3)
75
if...else... (4)
Exp1:
if (A-B)
printf("A est différent de B\n");
else
printf("A est égal à B\n");
Exp2:
if (a==0)
printf("a est nul\n");
else if (a<0)
printf("a est strictement négatif\n");
else
printf("a est strictement positif\n");
76
if...else... (5)
Exemple: Lire un nombre à partir du clavier et tester si ce nombre est pair ou impair
#include <stdio.h>
void main() {
int nbr;
printf ("Entrez un nombre SVP ");
scanf ("%d", &nbr);
if (nbr > 0)
if (nbr % 2 == 0)
printf ("C\'est un nombre pair\n");
else
printf ("C'est un nombre impair\n");
else
printf ("C\'est un nombre negatif\n");
getch();
}
77
Opérateur (condition )? (vrai): (faux)
78
Opérateur (condition )? (vrai): (faux)
79
Les structures de contrôle
z? z=4
"PB1"
autres
"PB2"
Action 3
…
switch (z) {
case 3 : printf("ok"); break;
case 4 : printf("PB1"); break;
default : "printf ("PB2");
};
…
81
switch(2)
switch (expression )
{
case constante1: liste d'instructions 1
break;
case constante2: liste d'instructions 2
break;
...
case constanten: liste d'instructions n
break;
default: liste d'instructions
break;
}
82
Switch(3)
83
switch(4)
Exemple:
int mois ;
scanf(" %d" ,&mois) ;
switch ( mois )
{
case 1 : printf(" janvier" ) ;
break ;
case 2 : printf(" fevrier" ) ;
break ;
…
case 12 : printf(" décembre" ) ;
break ;
default : printf(“erreur”)
}
84
3. Les structures Répétitives
Les structures itératives
86
Les structures Répétitives
La boucle while
La boucle while(1)
Syntaxe
while ( expression )
instruction ou bloc d’instructions
Fonctionnement
Lorsque le programme atteint l‟instruction while, il évalue
l‟expression entre parenthèses.
Si le résultat est vrai (différent de zéro), alors il exécute
l‟instruction ou le bloc d‟instructions qui suit puis il
recommence. Il évalue une nouvelle fois l‟expression, etc.
Si le résultat est faux (au premier, deuxième,... ou Xème
passage) alors il n‟exécute pas l‟instruction et arrête de boucler,
passant à l‟instruction suivante.
88
La boucle while(2)
Remarques :
Le test s‟effectuant au début, il est très possible
que l‟instruction ne soit jamais exécutée.
L‟expression entre les parenthèses est
obligatoire.
Il est important que l‟instruction ou le bloc puisse
influencer sur l‟évaluation de l‟expression entre
les parenthèses (par exemple en modifiant une
variable de fin ou un compteur), sinon, le
programme bouclera indéfiniment (CTRL-C pour
l‟arrêter).
89
La boucle while(3)
Exemple1:
/* Afficher les nombres de 1 à 10 */
int I = 0 ;
while (I<10)
printf(“%d\n”,++I);
Exemple2:
/* calculer la somme des N premiers entiers naturels*/
int somme=0, i = 0;
while (i<N)
{
somme += i;
i++ ;
}
90
La boucle while(4)
91
Les structures Répétitives
do
{
bloc d’instructions;
} while ( expression );
Le bloc d'instructions est exécuté au moins une
fois et jusqu‟à ce que l'expression fournit une
valeur égale à zéro (false).
Les { } ne sont pas obligatoires, si le bloc
d‟instruction contient une seule instruction.
94
while.. et do…while(3)
do - while est comparable à la structure Repeat du
langage Pascal si la condition finale est inversée
logiquement.
La structure do - while est semblable à la structure
while, avec la différence suivante :
while évalue la condition avant d'exécuter le bloc d'instructions.
do - while évalue la condition après avoir exécuté le bloc
d'instructions. Ainsi le bloc d'instructions est exécuté au moins
une fois.
Une application typique de do - while est la saisie de
données qui doivent remplir une certaine condition.
95
La boucle do…while(4)
96
Les structures Répétitives
La boucle for…
La boucle for ... (1)
L‟instruction for est une sorte de while plus complexe
que l‟on utilise généralement dans le cas de boucles où
le nombre d‟itérations est connu. Son usage n‟est
toutefois pas limité à ce seul cas comme dans d‟autres
langages.
Syntaxe
for ( initialisation; continuation; progression )
instruction ou bloc d’instructions
initialisation, continuation et progression sont des
expressions C quelconques.
98
La boucle for ... (2)
Fonctionnement
Lorsque le programme arrive à une instruction for, l‟expression
initialisation est évaluée. Ensuite, l‟expression continuation est
évaluée, si elle est vraie, l‟instruction ou le bloc est exécuté et
l‟expression progression est évaluée. On revient ensuite à
l‟évaluation de l‟expression de continuation et on recommence
jusqu‟à ce qu‟elle soit fausse.
Il est possible que les expressions initialisation, continuation ou
progression soient vides; dans ce cas, il faut tout de même mettre
le bon nombre de points-virgule. Il manquera une des étapes et le
comportement sera différent. Si l‟expression continuation est
absente, la boucle ne s‟arrêtera jamais, à moins qu‟une instruction
de rupture appropriée soit rencontrée.
99
La boucle for ... (3)
Equivalence
Une instruction for peut
être transformée en son
équivalent while:
initialisation;
while ( continuation) {
instruction ou bloc d‟instructions
progression;
}
100
La boucle for ... (4)
101
Les ruptures
• goto (aller à)
• break (arrêter)
• continue (passer à l‟itération suivante)
• return (sortie de fonction)
• exit (fin du programme)
102