Académique Documents
Professionnel Documents
Culture Documents
- Le Langage C -
Sommaire
◼ Histoire du langage C
1. Introduction au langage
3. Les variables
4. Opérateurs et expressions
8. Les Fonctions
9. Les pointeurs
Histoire du C
◼ Origines
C a trois ancêtres : les langages CPL, BCPL et B.
BCPL : (pour Basic CPL) Cambridge en 1966 par Martin Richards. Version
simplifiée → Ecriture d’un 1er Compilateur et de divers systèmes
d’exploitations
B : Ken Thompson vers 1970 dans les laboratoires Bell → Version simplifiée
du BCPL
Histoire du C
C: développé par un collègue de Ken Thompson, Dennis Ritchie qui ajouta les
tableaux, les pointeurs, les nombres à virgule flottante, les structures...
1972 fut l'année de développement la plus productive et sans doute l'année
de baptême de C. En 1973, C fut suffisamment au point pour que 90% de
UNIX puisse être récrit avec.
Exemple: le nombre 5 est reconnu par une machine par la succession des symboles 101
(c'est la représentation du nombre en base 2).
De même, les opérations qu'une machine est capable d'exécuter sont codées par des
nombres, c'est-à-dire une succession de 0 et 1. Par exemple, l'instruction Machine
00011010 0001 0010 demande à la machine d'effectuer l'opération 1+2.
Ce langage est le seul qui soit compris par l'ordinateur, Est-il alors le seul moyen pour
communiquer avec celui-ci???
Il fut suivi par des langages plus sophistiqués et de plus en plus proche du langage
humain
1. Introduction au langage C
Compilateur
1. Introduction au langage C
Qu’est ce qu’un programme C?
C’est un texte écrit avec un éditeur de texte, respectant une certaine syntaxe et
stocké sous forme d'un ou plusieurs fichiers (généralement avec l'extension .c). A
l'opposé du langage assembleur, les instructions du langage C sont obligatoirement
encapsulées dans des fonctions et il existe une fonction privilégiée appelée main qui
est le point de départ de tout programme.
Exemple:
#include<stdio.h>
int main()
{
printf(’’Bonjour!’’);
return 0;
}
Source.c Compilation Objet.o Edition des liens Exécutable
2. Éléments de base
2.1 les fichiers include
Exemple:
# include <stdio.h>
void main()
{
printf(’’Bonjour!’’);
}
Exemple:
# include <stdio.h> //pour pouvoir utiliser la fonction printf
void main()
{
printf(’’Bonjour!’’);
}
/*Ce programme imprime la chaine de
caractère ‘’Bonjour!’’ à l’écran*/
2. Éléments de base
2.3 Présentation de quelques instructions du langage C
2. Éléments de base
2.3 Présentation de quelques instructions du langage C
Exemple 2 :
2. Éléments de base
2.4 Les identificateurs
Les mots suivants sont réservés. Leur fonction est prévue par la syntaxe de C et ils ne
peuvent pas être utilisés dans un autre but :
Ils peuvent être signés ou non signés : signed ou unsigned (unsigned int x;)
2. Éléments de base
a. Les Types Entiers
◼ long int ou long (entier sur 32 bits ou 64 bits, selon les machines)
Chacun des 3 peut être nuancé par l’utilisation du qualificatif unsigned pour ne
Float : codé sur 4 octets avec 1 bit de signe, 23 bits de mantisse et 8 bits
d'exposant
Double : codé sur 8 octets avec 1 bit de signe, 52 bits de mantisse et 11
bits d'exposant
Long : codé sur 10 octets avec 1 bit de signe, 64 bits de mantisse et 15 bits
d'exposant
NOTATION RESULTAT
\a cloche ou bip (alert ou audible bell)
\b Retour arrière (Backspace)
\f Saut de page (Form Feed)
\n Saut de Ligne (Line Feed)
\r Retour chariot (Carriage Return)
\t Tabulation horizontaLe (HorizontaL Tab)
\v Tabutation verticale (VerticaL Tab)
\\ \
\' ‘
\ '' ‘’
\? ?
2. Éléments de base
A propos du type booléen :
Pas de type booléen en C. Le type booléen est représenté par un entier. Il se comporte
comme la valeur booléenne vraie si cette valeur entière est non nulle.
Dans un contexte qui exige une valeur booléenne (comme les tests, par exemple), un
entier non nul équivaut à vrai et la valeur zero équivaut à faux
3. Les Variables
3.1 Declaration
Exemple:
• int nb;
• float x = 2.34;//déclaration et initialisation
• char c = 'x';
• long a, b, c;
• double r = 7.1974851592;
Constante
◼ Une constante identifie (avec les variables) les donnée
manipulées dans un algorithme.
◼ Une constante est une donnée dont la valeur reste fixe au
cours de l’exécution d’un programme.
Exemple:
Pi=3.14
Tva=0.18
En C Exemple
23
4. Opérateurs et Expressions
24
Opérateurs arithmétiques
Opérateur Opération Exemple
= affectation x=7
+ addition x+3
- soustraction x-3
* produit x*3
/ division x/3
% reste de division x%3
26
Opérateurs logiques
Opérateur Opération
27
Opérateurs d’incrémentation/décrémentation
29
Priorité des opérateurs
Priorité Opérateurs
+ + + + + ++ () []
++++++++ -- ++ !
+++++++ * / %
++++++ + -
+++++ < <= >=
++++ == !=
+++ &&
++ ||
+ = += -= *= /=
30
4. Opérateurs et Expressions
Conversions implicites :
◼ On peut écrire des expressions mixtes dans lesquelles interviennent des opérandes
de types différents:
int n,p; float x; n*x + p
(int * float) + int
Conversion implicite: int → float ( float*float) + int
float + int
On parle de conversion d’ajustement de type: int→long→float→double→long double
L’opérateur de CAST :
Affichage à l’écran
◼ Fonction de la bibliothèque stdio (Standard Input/Output)
Syntaxe 1 : printf("texte ") ;
Syntaxe 2 : printf("texte1 %x1 texte2 %x2... ",<expr1>,<expr2>,...) ;
◼ printf("format de l’affichage", var) permet d'afficher la valeur de la
variable var (c'est l'équivalent de écrire en pseudo code).
◼ printf("chaine") permet d'afficher la chaîne de caractères qui est
entre guillemets " "
◼ int a=1, b=2;
printf("a vaut :%d et b vaut:%d \n ", a, b); //a vaut 1 et b vaut 2
◼ float r= 7.45; printf(" le rayon =%f \n ",r);
5. Les Entées-Sorties
Saisie au clavier
◼ Fonction de la bibliothèque stdio (Standard Input/Output)
Syntaxe : scanf("%x1 %x2...", &<variable1>, &<variable2>,...) ;
Exemple:
int n;
printf("n=");
scanf("%d",&n);
Formats de représentation
Symbole Type Description
%d ou %i int entier relatif
%u unsigned int entier naturel
%o int entier exprimé en octal
%x ou %X int entier exprimé en hexadécimal
%f double, float réel en notation décimale
%e ou %E double, float réel en notation exponentielle
%c char caractère
%s char* chaîne de caractères
34
Application
35
Structures de contrôle
◼ Les structures de contrôle définissent la façon avec laquelle
les instructions sont effectuées. Elles conditionnent l'exécution
d'instructions à la valeur d'une expression
◼ On distingue :
➢ Les structures alternatives (tests) : permettent
d’effectuer des choix càd de se comporter différemment
suivant les circonstances (valeur d'une expression). En C,
on dispose des instructions : if…else et switch.
➢ Les structures répétitives (boucles) : permettent de
répéter plusieurs fois un ensemble donné d’instructions.
Cette famille dispose des instructions : while, do…while et
for
L’instruction if…else
◼ Syntaxe : If (expression)
bloc-instruction1
else
bloc-instruction2
• bloc-instruction peut être une seule instruction terminée par un
point-virgule ou une suite d’instructions délimitées par des
accolades { }
•expression est évaluée, si elle est vraie (valeur différente de 0),
alors bloc-instruction1 est exécuté. Si elle est fausse (valeur 0)
alors blocinstruction2 est exécuté
if (A>B)
MAX=A;
else MAX=B; (interprétation 1 : si N=0 alors MAX prend la
valeur B)
➢ if (N>0)
if (A>B)
MAX=A;
else MAX=B; (interprétation 2 : si N=0 MAX ne change pas)
◼ En C un else est toujours associé au dernier if qui ne possède pas
une partie else (c’est l’interprétation 2 qui est juste)
Imbrication des instructions if
◼ Conseil : pour éviter toute ambiguïté ou pour forcer une certaine
interprétation dans l’imbrication des if, il vaut mieux utiliser les
accolades
➢ if(a<=0)
{if(a==0)
printf("a est nul ");
else
printf(" a est strictement négatif ");}
else
printf(" a est strictement positif " );
➢ Pour forcer l’interprétation 1: if (N>0)
{ if (A>B)
MAX=A;}
else MAX=B;
L’instruction d’aiguillage switch :
◼ Permet de choisir des instructions à exécuter selon la valeur d’une
expression qui doit être de type entier
◼ la syntaxe est :
switch (expression) {
case expression_constante1 : instructions_1; break;
case expression_constante2 : instructions_2; break;
…
case expression_constante n : instructions_n; break;
default : instructions;
}
◼ expression_constante i doit être une expression constante entière
◼ Instructions i peut être une instruction simple ou composée
◼ break et default sont optionnels et peuvent ne pas figurer
Fonctionnement de switch
◼ expression est évaluée
◼ si sa valeur est égale à une expression_constante i, on se
branche à ce cas et on exécute les instructions_i qui lui
correspondent
➢ On exécute aussi les instructions des cas suivants jusqu’à
la fin du bloc ou jusqu’à une instruction break (qui fait
sortir de la structure switch)
▪ si la valeur de l'expression n'est égale à aucune des
expressions constantes
➢Si default existe, alors on exécute les instructions qui le
suivent
➢Sinon aucune instruction n’est exécutée
Switch : exemple
main( )
{ char c;
switch (c) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
case 'y': printf("voyelle\n"); break ;
default : printf("consonne\n");
}
}
Les boucles while et do ..
while
while (condition) Do
{ {
Instructions instructions
} }
while (condition);
▪ la condition (dite condition de contrôle de la boucle) est évaluée
à chaque itération. Les instructions (corps de la boucle) sont
exécutés tant que la condition est vraie, on sort de la boucle dès
que la condition devient fausse
▪dans la boucle while le test de continuation s'effectue avant
d'entamer le corps de boucle qui, de ce fait, peut ne jamais
s'exécuter
▪ par contre, dans la boucle do-while ce test est effectué après le
corps de boucle, lequel sera alors exécuté au moins une fois
Boucle while : exemple
Un programme qui détermine le premier nombre entier N tel que
la somme de 1 à N dépasse strictement 100
main( )
{ int i, som;
i =0; som= 0;
while (som <=100)
{ i++;
som+=i;
}
printf (" La valeur cherchée est N= %d\n ", i);
}
Boucle do .. while : exemple
Contrôle de saisie d'une note saisie au clavier jusqu’à ce que
la valeur entrée soit valable
main()
{ int N;
do {
printf (" Entrez une note comprise entre 0 et 20 \n");
scanf("%d",&N);
} while (N < 0 || N > 20);
}
La boucle for
for (expr1 ; expr2 ; expr3)
{
instructions
}
◼ L'expression expr1 est évaluée une seule fois au début de
l'exécution de la boucle. Elle effectue l’initialisation des
données de la boucle
◼ L'expression expr2 est évaluée et testée avant chaque
passage dans la boucle. Elle constitue le test de continuation
de la boucle.
◼ L'expression expr3 est évaluée après chaque passage. Elle
est utilisée pour réinitialiser les données de la boucle
Boucle for : remarques
équivaut à:
for (expr1 ; expr2 ; expr3) expr1;
{ instructions while(expr2)
instructions {
} expr3;
}