Professional Documents
Culture Documents
Prof. Mohamed Massour El Aoud massour@ymail.com cole Nationale des Sciences Appliques Khouribga
Plan
Gnralits Historique du langage Cration dun programme C Bibliothques de fonctions prdfinies Les composants dun programme C Les bases de la programmation en C Types de donnes Structures de contrle Structures de donnes Fonction et paramtres de fonctions Les fichiers
Langage C
Langage de programmation
Langage : Ensemble de caractres, de symboles et de rgles permettant de les assembler, utilis pour donner des instructions lordinateur. (Larousse) Programme : Squence dinstructions et de donnes enregistres sur un support et susceptible dtre traite par un ordinateur (Larousse)
Langage C
Langage C
Historique du langage C
Le C a t conu en 1972 par Dennis Richie et Ken Thompson, chercheurs aux Bell Labs, afin de dvelopper un systme d'exploitation UNIX. Le C devenant de plus en plus populaire dans les annes 80. En 1983, l'ANSI (American National Standards Institute) dcida de normaliser le langage ; ce travail s'acheva en 1989 par la dfinition de la norme ANSI C. Celle-ci fut reprise telle quelle par l'ISO (International Standards Organization) en 1990.
Langage C
Historique du langage C
Avantages
Rpandu Plat au programmeur Il a marqu toute une gnration Il a inspir dautres langages (C++, Java)
Langage C
Compilation
Le traitement par le prprocesseur (dsigner le programme ralisant le prtraitement) : qui effectue des transformations purement textuelles. La compilation : la compilation proprement dite traduit le fichier gnr par le prprocesseur en assembleur L'assemblage: cette opration transforme le code assembleur en un fichier binaire directement comprhensibles par le processeur. L'dition de liens : un programme est souvent spar en plusieurs fichiers source, L'dition de liens produit alors un fichier dit excutable.
Langage C
Compilation
Langage C
Langage C
Programme
Programme = ensemble de modules
inclusions (objets, donnes prdfinis) types (nouveaux types dobjets) variables ( cases mmoires rserver) liste de fonctions Fonctions en-tte (vue de lextrieur) mode opratoire : liste dinstructions simples : termines par ;
Premier programme
Instructions Inclusion
fonction
Langage C
Les identificateurs
Le rle d'un identificateur est de donner un nom une entit du programme. Plus prcisment, un identificateur peut dsigner un nom de variable ou de fonction, un type dfini par typedef, struct, union ou enum, une tiquette. Un identificateur est une suite de caractres parmi : les lettres (minuscules ou majuscules, mais non accentues), les chiffres, le blanc soulign'' (_).
Langage C
Les mots-clefs
Un certain nombre de mots, appels motsclefs, sont rservs pour le langage lui-mme et ne peuvent pas tre utiliss comme identificateurs. L'ANSI C compte 32 mots clefs :
Langage C
Les commentaires
Un commentaire dbute par /* et se termine par */ Par exemple, /* Ceci est un commentaire */ On ne peut pas imbriquer des commentaires. Quand on met en commentaire un morceau de programme, il faut donc veiller ce que celui-ci ne contienne pas de commentaire Pourquoi commenter un code ? par quelquun qui reprend le projet par vous aprs une longue interruption Du texte est plus parlant que du code
Langage C
Langage C
Langage C
Exemple
type
Variable globale
Langage C
10
Exemple
En tte Dclaration variable Instruction simple
Langage C
11
Type caractre
Le mot-clef char dsigne un objet de type caractre. Un char peut contenir n'importe quel lment du jeu de caractres de la machine utilise. Une des particularits du type char en C est qu'il peut tre assimil un entier . Par exemple, si c est de type char, l'expression c + 1 est valide. main() { char c = 'A'; printf("%c", c + 1); } Suivant les implmentations, le type char est sign ou non.
Langage C
12
Type caractre
? Correcte
Langage C
Constante
Une constante est une valeur qui apparat littralement dans le code source d'un programme, le type de la constante tant dtermin par la faon dont la constante est crite. Les constantes peuvent tre de 4 types :
entier, flottant (nombre rel), caractre, numration. Ces constantes vont tre utilises, par exemple, pour initialiser une variable.
Langage C
13
Constante
Une constante entire peut tre reprsente de 3 manires diffrentes suivant la base dans laquelle elle est crite : dcimale Octale hexadcimale : la reprsentation hexadcimale d'un entier correspond sa dcomposition en base 16. Les lettres de a f sont utilises pour reprsenter les nombres de 10 15. Les constantes hexadcimales doivent commencer par 0x ou 0X. Par exemple, les reprsentations hexadcimales de 14 et 255 sont respectivement 0XE et 0XFF.
Langage C
\r \f
tabulation verticale \a retour arrire '\'' barre ('\' serait ambigu) '\"' Question
Langage C
14
Les littraux
notation dcimale : 12, -3, 47 notation octale : 014, -03, 057 notation hexadcimale : 0xC, -0X3, 0x2f
Il s'agit des fonctions de la librairie standard <stdio.h> utilises avec les units classiques d'entres-sorties, qui sont respectivement le clavier et l'cran. La sortie formate
La fonction printf est une fonction l'impression formate, ce qui signifie que les donnes sont converties selon le format particulier choisi. Sa syntaxe est
printf("chane de contrle ",expression-1, ..., expression-n); Langage C
15
Langage C
Scanf
Scanf Permet de lire des lments formats sur le clavier. On utilise le % pour indiquer le type de valeur quon veut lire. Exemples : int i; scanf( "%d", &i ); remarquer la prsence du & car la fonction va modifier la valeur de i
Langage C
16
Les donnes entrer au clavier doivent tre spares par des blancs ou des <RETURN> sauf s'il s'agit de caractres. On peut toutefois fixer le nombre de caractres de la donne lire. Par exemple %3s pour une chane de 3 caractres, %10d pour un entier qui s'tend sur 10 chiffres, signe inclus
Langage C
Exemple
Exemple: #include <stdio.h> main() { int i; printf("entrez un entier sous forme hexadecimale i "); scanf("%x",&i); printf("i = %d\n",i); Return 0 }
Langage C
17
Type entier
C supports different kinds of integers maxima and minima defined in limits.h
type char signed char unsigned char short [int] unsigned short int unsigned int long [int] unsigned long Langage C format %c %c %c %hi %hu %i %u %li %lu bytes 1 1 1 2 2 2 or 4 2 or 4 4 4 minimum CHAR_MIN SCHAR_MIN 0 SHRT_MIN 0 INT_MIN 0 LONG_MIN 0 maximum CHAR_MAX SCHAR_MAX UCHAR_MAX SHRT_MAX USHRT_MAX INT_MAX UINT_MAX LONG_MAX ULONG_MAX
#include <stdio.h> #include <limits.h> int main(void) { unsigned long printf("minimum printf("maximum printf("maximum printf("maximum printf("maximum return 0; }
big = ULONG_MAX;
int = %i, ", INT_MIN); int = %i\n", INT_MAX); unsigned = %u\n", UINT_MAX); long int = %li\n", LONG_MAX); unsigned long = %lu\n", big);
int = -32768, maximum int = 32767 unsigned = 65535 long int = 2147483647 unsigned long = 4294967295
Langage C
18
Langage C
conversion en int long int unsigned int unsigned long int unsigned int unsigned long int unsigned int unsigned long int double long double double long double double long double unsigned char char*
criture dcimale signe dcimale signe dcimale non signe dcimale non signe octale non signe octale non signe hexadcimale non signe hexadcimale non signe dcimale virgule fixe dcimale virgule fixe dcimale notation exponentielle dcimale notation exponentielle dcimale, reprsentation la plus courte parmi %f et %e dcimale, reprsentation la plus courte parmi %lf et %le caractre chane de caractres
Langage C
19
Langage C
C supports different kinds of reals maxima and minima are defined in float.h
bytes 4 8 10
Langage C
20
Exemple
#include <stdio.h> #include <float.h> int main(void) { double f = 3.1416, g = 1.2e-5, h = 5000000000.0; printf("f=%lf\tg=%lf\th=%lf\n", f, g, h); printf("f=%le\tg=%le\th=%le\n", f, g, h); printf("f=%lg\tg=%lg\th=%lg\n", f, g, h); printf("f=%7.2lf\tg=%.2le\th=%.4lg\n", f, g, h); return 0; }
f=3.141600 f=3.141600e+00 f=3.1416 f= 3.14 g=0.000012 g=1.200000e-05 g=1.2e-05 g=1.20e-05 h=5000000000.000000 h=5.000000e+09 h=5e+09 h=5e+09
Langage C
constante
#include <stdio.h> creates an integer constant int main(void) { const long double pi = 3.141592653590; const int days_in_week = 7; const sunday = 0; days_in_week = 5; error! return 0; }
Langage C
21
Constante
Constante dfinie par le Preprocessor
day = SUNDAY;
Langage C
Type logique
En C, il nexiste pas de type logique on peut en dfinir un avec typedef enum {false, true} bool; Ds lors, dclarer : bool var; faux : var = false;
Langage C
22
Les variables
Une variable est un nom reprsentant une zone mmoire fixe pouvant accueillir un type prcis de valeurs dont le contenu peut changer tout au long du programme Exemples
int i; char c = 'A'; int a, b = 1, d;
Langage C
Langage C
23
Exemple
int main(void) { int i; i = 0; { int i; i = 1; } printf("%d\n",i); return 0; } Quel rsultats va afficher le programme?
Langage C
Assignation
dclarer une variable ne lui donne pas de valeur par dfaut Il faudra donc assigner une valeur une variable
avant de pouvoir lutiliser. Soit la dclaration Soit par assignation
Langage C
24
Assignation
Lors dune assignation, la variable et lexpression doivent tre de mme type
Si ce nest pas le cas, on peut demander une conversion de lexpression. ex : double d; d = (double) 2;
Langage C
conversion
On ne peut pas convertir tout en nimporte quoi
ex: convertir une chane en entier na pas de sens (mme si cest accept par C !!!) Une conversion explicite nest pas toujours ncessaire car il y a parfois une conversion implicite mais on limpose pdagogiquement.
Langage C
25
Conversion de type
#include <stdio.h> int main(void) { short a = 256, b = 10; printf("Type a number: "); scanf("%c", &a); printf("a = %hi, b = %f\n", a, b); return 0; } Type a number: 1 a = 305 b = 0.000000
Langage C
Oprateur dans C
Les oprateurs d'affectation compose Les oprateurs d'incrmentation et de dcrmentation L'oprateur virgule L'oprateur conditionnel ternaire L'oprateur de conversion de type L'oprateur adresse
Langage C
26
Langage C
27
Exemple
i et j sont integer La division des int donne, 1 affct k f sont g sont double, la division des float donne 1.25 affect h int main(void) { int i = 5, j = 4, k; double f = 5.0, g = 4.0, h; k = i / j; h = f / g; h = i / j; return 0; }
La division des int i meme si h est double. Valeure affect est 1.00000
Langage C
return 0; }
Langage C
28
Langage C
Exemple
Exemple:
#include <stdio.h> int main(void) { int i = 0; if(i = 0) printf("i is equal to zero\n"); else printf("i is not zero\n"); return 0; } i is not zero
Langage C
29
l'valuation se fait de gauche droite et s'arrte ds que le rsultat final est dtermin. Exemple: int i;int p[10]; if ((i >= 0) && (i <= 9) && !(p[i] == 0)) la dernire clause ne sera pas value si i n'est pas entre 0 et 9. Langage C
Langage C
30
& 0 1
0 0 0
1 0 1
| 0 1
0 0 1
1 1 1
^ 0 1
0 0 1
1 1 0
Langage C
Langage C
31
Le dcalage droite et gauche effectuent respectivement une multiplication et une division par une puissance de 2. Notons que ces dcalages ne sont pas des dcalages circulaires (ce qui dpasse disparat).
Langage C
Considrons 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.
expression a b a&b a|b a^b ~a b << 2 b << 5 b >> 1
binaire 01001101 00010111 00000101 01011111 01011010 10110010 01011100 11100000 00001011
Langage C
32
Incrmentation et dcrementation
Les oprateurs d'incrmentation ++ et de dcrmentation -- s'utilisent aussi bien en suffixe (i++) qu'en prfixe (++i). Dans les deux cas la variable i sera incrmente, toutefois dans la notation suffixe la valeur retourne sera l'ancienne valeur de i alors que dans la notation prfixe se sera la nouvelle.
Langage C
Incrmentation et dcrementation
#include <stdio.h> int main(void) { int i, j = 5; i = ++j; printf("i=%d, j=%d\n", i, j); j = 5; i = j++; printf("i=%d, j=%d\n", i, j); return 0; } i=6, j=6 i=5, j=6 equivalent to: 1. j++; 2. i = j;
Langage C
33
L'oprateur virgule
Une expression peut tre constitue d'expressions spares par des virgules : expression-1, expression-2, ... , expression-n
main() { int a, b; b = ((a = 3), (a + 2)); printf("\n b = %d \n",b); } imprime b = 5.
d'une
suite
Langage C
L'oprateur conditionnel ?
L'oprateur conditionnel ? est un oprateur ternaire. Sa syntaxe est la suivante : condition ? Expression 1 : expression 2 Cette expression est gale expression-1 si condition est satisfaite, et expression-2 sinon. Exemple :
int i, j = 100, k = -1; i = (j > k) ? j : k; if(j > k) i = j; else i = k; int i, j = 100, k = -1; i = (j < k) ? j : k; if(j < k) i = j; else i = k;
Langage C
34
Assignation
Autres oprateur dassignation:
+= &= <<= -= |= >>= *= ^= /= %=
Syntaxe:
expression1 op= expression2
is equivalent to:
(expression1) = (expression1) op (expression2)
a += 27; a = a + 27; f /= 9.2; f = f / 9.2; i *= j + 2; i = i * (j + 2);
Langage C
j = 18
Langage C
35
C traite les oprateurs selon leur degr de priorit Le tableau suivant classe les oprateurs par ordres de priorit dcroissants. Les oprateurs placs sur une mme ligne ont mme priorit. Si dans une expression figurent plusieurs oprateurs de mme priorit, l'ordre d'valuation est dfinie par la flche de la seconde colonne du tableau. On prferera toutefois mettre des parenthses en cas de doute...
Langage C
Langage C
36
Langage C
Langage C
37
Langage C
Langage C
38
printf("input an integer: "); scanf("%i", &j); if(j > 0); printf("a positive number was entered\n"); input an integer: -6
Langage C
39