La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Langage de Programmation: I - Le Langage C - M. Khalid EL HACHEMI I.N.S.E.A 2007 - 2008.

Présentations similaires


Présentation au sujet: "Langage de Programmation: I - Le Langage C - M. Khalid EL HACHEMI I.N.S.E.A 2007 - 2008."— Transcription de la présentation:

1 Langage de Programmation: I - Le Langage C - M. Khalid EL HACHEMI I.N.S.E.A

2 Sommaire Histoire du langage C 1.Introduction au langage 2.Éléments de base (règles décriture, types…) 3.Les variables 4.Opérateurs et expressions 5.Les entrées-Sorties (printf, scanf) 6.Les structures de contrôle

3 Sommaire 7.Classification des variables 8.Les objets structurés (tableaux, structures) 9.Les Fonctions 10.Les pointeurs 11.Les fichiers 12.Le préprocesseur (#include, #define…)

4 Histoire du C Origines C a trois ancêtres : les langages CPL, BCPL et B. CPL : (pour Combined Programming Language) a été conçu au début des années universités de Cambridge et de Londres. Fortement typé mais trop complexe disparition dans las année 70 BCPL : (pour Basic CPL) Cambridge en 1966 par Martin Richards. Version siplifiée Ecriture dun 1 er Compilateur et de divers systèmes dexploitations B : Ken Thompson vers 1970 dans les laboratoires Bell Version simplifiée du BCPL

5 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 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. - Une 1 ère définition du langage est apparue en 1978 avec louvrage de Ritchie et Kernighan « The C programming language ». - Son succès international a contribué à sa normalisation: 1- ANSI (American National Standard Institute 2- ISO (International Standadization Organisation 3- CEN (Comité Européen de Normalisation) en 1993

6 1. Introduction au langage C - Le langage C est un langage de bas niveaux, dans le sens où il permet la manipulation de données que manipulent les ordinateurs (Bit, octet, adresse) Langages évolués (Pascal, Fortran, ADA) - Il est suffisamment général pour permettre de développer des application de type scientifique ou de gestion basée sur laccès aux bases de données (Word et Excel sont écrits à partir de C ou C++) - Il est un des 1 ers langages offrant des possibilités de programmation modulaire: Un programme peut être constitué de plusieurs module (module = fichier.c)

7 - Un langage de programmation a pour finalité de communiquer avec la machine. Le langage maternel de la machine n'utilise que deux symboles (0 et 1): c'est le langage machine. 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 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??? Réponse : Non, utilisation du langage assembleur : add $1 $2 Il fut suivi par des langages plus sophistiqués et de plus en plus proche du langage humain 1. Introduction au langage C

8 - La programmation structurée (Fortran, Pascal, C, Perl, Tcl ), - La programmation structurée et modulaire (Ada, Modula), - La programmation fonctionnelle (Lisp) - La programmation logique (Prolog) - La programmation objet (C++, Java, VB.net, C# …). Compilateur 1. Introduction au langage C

9 Quest ce quun programme C? Cest 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: main() { printf(Bonjour!); } Source.c Compilation Objet.o Edition des liens Exécutable 1. Introduction au langage C

10 2.1 les fichiers include Exemple: # include main() { printf(Bonjour!); } La directive #include inclu le fichier stdio.h au programme avant la compilation (pour pouvoir utiliser la fonction prédéfinie printf. On parle alors de préproceseur 2. Éléments de base

11 2.2 les Commentaires Exemple: # include //pour pouvoir utiliser la fonction printf main() { printf(Bonjour!); } /*Ce programme imprime la chaine de caractère Bonjour! à lécran*/ 2. Éléments de base

12 2.3 Présentation de quelques instructions du langage C 2. Éléments de base

13 2.3 Présentation de quelques instructions du langage C Exemple 2 : 2. Éléments de base

14 2.4 Les identificateurs Les identificateurs servent à désigner les différents objets manipulés par le programme:Variables, fonctions, … - Commence nécessairement par une lettre - une lettre majuscule est tenue pour différente de la lettre minuscule correspondante; - Au plus 31 caractère - Le caractère _ (appelé « blanc souligné ») est considéré comme une lettre ; il peut donc figurer à n'importe quelle place dans un identificateur: _Total2, Prix_unit 2. Éléments de base

15 2.5 Les Types dans C Les types de base du langage C se répartissent en 3 grande catégories en fonction de la nature des informations quils permettent de représenter: Nombres entiers (int) Nombres flottants (float ou double) Caractère (char): apparaît en C comme un cas particulier de int. Ils peuvent être signés ou non signés : signed ou unsigned (unsigned int x;) 2. Éléments de base

16 a. Les Types Entiers short int ou short (entier sur 16 bits : à ) int (entier sur 32 bits : à ) long int ou long (entier sur 32 bits ou 64 bits, selon les machines) Chacun des 3 peut être nuancé par lutilisation du qualificatif unsigned pour ne représenter que des nombres positifs: Exemple: unsigned short x; x peut aller de 0 à pas de bit réservé pour le signe - C accepte les constantes entière en notation décimale, hexadécimale ou octale 2. Éléments de base

17 b. Les Types Flottants 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 - C accepte les constantes flottante en notation décimale ou scientifique 3.5e Éléments de base

18 c. Le Type Char En C, un caractère est un entier signé codé sur 1 octet Notation des constantes caractères : a, $.. Important: a a Il existe des caractères non imprimables, tel que le changement de ligne, de Tabulation, … en voici un tableau récapitulatif

19 2. Éléments de base NOTATIONRESULTAT \acloche ou bip (alert ou audible bell) \bRetour arrière (Backspace) \fSaut de page (Form Feed) \nSaut de Ligne (Line Feed) \rRetour chariot (Carriage Return) \tTabulation horizontaLe (HorizontaL Tab) \vTabutation verticale (VerticaL Tab) \\\ \' \ '' \??

20 A propos du type booléen : 2. Éléments de base 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

21 2.6 Les Mots réservés 2. Éléments de base 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 : autobreakcasecharconstcontinuedefaultdo doubleelseenumexternfloatforgotoif intlongregisterreturnshortsignedsizeofstatic structswitchtypedefunionunsignedvoidvolatilewhile

22 3.1 Declaration 3. Les Variables Auto Register Static extern Const volatile Unsigned Signed Float Double Long double Char Short Int long identificateur= expression Exemple:int x, y=0, z; extern float a,b; static unsigned short n=1000;

23 3.2 Les variables statiques locale Le qualificatif static, placé devant la déclaration d'une variable locale, produit une variable qui est: -Pour sa visibilité, locale -Pour sa durée de vie, statique (Permanente) Elle n'est accessible que depuis l'intérieur du bloc ou elle est déclarée, mais elle est créée au début du programme et elle existe aussi longtemps que dure l'exécution de celui-ci. Exemple : void bizarre(void) { static int cpt = 1000; Appels consécutifs : printf("%d ", cpt); cpt++; } 3. Les Variables

24 C dispose d'un important éventail d'opérateurs originaux d'affectation et d'incrémentation. 4.1 Opérateurs arithmétiques en C Comme tous les langages, C dispose d'opérateurs classiques "binaires", à savoir l'addition (+), la soustraction (-), la multiplication (*) et la division (/), ainsi que d'un opérateur "unaire" correspondant à l'opposé noté - (comme dans -n ou -x+y). Les opérateurs binaires ne sont à priori définis que pour deux opérandes ayant le même type parmi: int, long int, float, double, long double et ils fournissent un résultat de même type que leurs opérandes. 4. Opérateurs et Expressions

25 4.1 Opérateurs arithmétiques en C De plus, il existe un opérateur de "modulo" noté % qui ne peut porter que sur des entiers et qui fournit le reste de la division de son premier opérande par son second. Par exemple, 11%4 vaut 3, 23%6 vaut 5 Remarque: le quotient de deux entiers fournit un entier. Ainsi 5/2 vaut 2; en revanche, le quotient de deux flottants (noté, lui aussi, /) est bien un flottant (5.0/2.0 vaut bien approximativement 2.5). Priorité des opérateurs : les règles sont "naturelles" et rejoignent celles de l'algèbre traditionnelle 4. Opérateurs et Expressions

26 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 Même mécanisme :float + float float On parle de conversion dajustement de type: int long float double long double 4. Opérateurs et Expressions

27 Promotions numériques : On a vu que les opérateurs numériques ne sont pas définis pour le types char et short : C prévoit que toute valeur char ou short soit dabord convertie en int. short n,p; float x; n * x + p (short * float) + short Conversion systématique: ( int * float) + int Conversion implicite :float * float + int float + float float 4. Opérateurs et Expressions

28 4.2 Opérateurs Relationnels Comme tout langage, C permet de "comparer" des expressions à l'aide d'opérateurs classiques de comparaison. exemple : 2*a > b +5 Par contre, C se distingue de la plupart des autres langages sur deux points: 1-le résultat de la comparaison est, non pas une valeur "booléenne" (on dit aussi "logique") prenant l'une des deux valeurs vrai ou faux, mais un entier valant: 0 si le résultat de la comparaison est faux, 1 si le résultat de la comparaison est vrai. Ainsi, la comparaison ci-dessus devient en fait une expression de type entier. Cela signifie qu'elle pourra éventuellement intervenir dans des calculs arithmétiques; 4. Opérateurs et Expressions

29 4.2 Opérateurs Relationnels 2-les expressions comparées pourront être de type quelconque et seront soumises au règles de conversion présentées précédemment. Liste des opérateurs: >= == != même priorité >même priorité Exemple: a < b == c < d (a < b) == (c < d) Remarque: les opérateurs relationnels sont moins prioritaires que les opérateurs arithmétiques ( x+y < a+2 (x+y) < (a+2) ) 4. Opérateurs et Expressions

30 4.3 Opérateurs Logiques C dispose de trois opérateurs logiques classiques: et (noté &&), ou (noté | |) et non (noté ! ). Par exemple: (a

31 4.3 Opérateurs Logiques Exemples: n et p sont des entiers, le compilateur accepte des expression telles que: n && p n | | p if ( !n ) if (n == 0) Remarque1: lopérateur ! a une priorité supérieur à celle de tous lés opérateurs arithmétiques et relationnels. La négation de a==b serait !(a==b) et non !a==b Remarque2: lopérateur | | est moins prioritaire que &&. Tous deux sont de priorité inférieure aux opérateurs arithmétique et relationnels a

32 4.4 Opérateur daffectation ordinaire Nous avons déjà eu l'occasion de remarquer que : i = 5 était une expression qui réalisait une action : l'affectation de la valeur 5 à i. Cet opérateur d'affectation (=) peut faire intervenir d'autres expressions comme dans : c=b + 3 Cet opérateur possède une associativité de droite à gauche : i = j = 5 4. Opérateurs et Expressions

33 4.5 Opérateurs dincrémentation et de décrémentation ( ) ++ i : expression qui incrémente de 1 la valeur de i, et sa valeur est celle de i après incrémentation si la valeur de i est 5, l'expression : n = ++i - 5 affectera à i la valeur 6 et à n la valeur 1. n = i (n==0, i++ vaut 5, i vaut 6) On dit que ++ est: -un opérateur de pré incrémentation lorsqu'il est placé à gauche -un opérateur de post incrémentation lorsqu'il est placé à droite 4. Opérateurs et Expressions

34 4.5 Opérateurs dincrémentation et de décrémentation ( ) Priorité: 3 * i++ * j-- + k++ équivaut à 3 * (i++) * (j--) + (k++) La priorité élevée de ces opérateurs unaires permet décrire des expression assez compliquées sans quil soit nécessaire demployer des ( ) 4.6 Opérateurs daffectation élargie: i=i+k i+=k a=a*b a*=b i=i-k i-=k a=a/b a/=b 4. Opérateurs et Expressions

35 4.7 Lopérateur de CAST : Exemple:n=10, p=3; (double) (n/p) aura comme valeur 3 (double) n/p aura comme valeur … 4.8 Lopérateur conditionnel : (seul opérateur ternaire en C) syntaxe : condition ? Valeur si vrai : valeur si faux z = (x=y) ? a : b ; on utilise la valeur de lexpression a>b ? i++ : i-- ; la valeur de lexpression nest pas utilisée 4. Opérateurs et Expressions

36 E X E R C I C E S E X E R C I C E S 4. Opérateurs et Expressions

37 Quelles sont les écritures autorisés pour des nombres fournis en données? Que se passe-t-il lorsque lutilisateur ne les respecte pas? Comment organiser les données lorsque lon mélange les types numériques et les types caractères? Que se passe-t-il lorsque, en réponse à scanf, on fournit trop ou peu dinformations? Comment agir sur la présentation des informations à lécran? 5. Les Entées-Sorties Conversationnelles

38 La fonction printf a comme 1 er argument une chaîne de caractères qui spécifie: Des caractères à afficher tels quels; Des code de format repérés par %. Un code de conversion (c, d, f..) précise le type de linformation à afficher. Un code de format peut contenir des informations complémentaires agissant sur le cadrage, le gabarit ou la précision. Exemple: printf("leur somme est : %d",n1+n2); 5.1 Les possibilités de la fonction printf

39 a. Les principaux codes de conversion: c : char: caractère affiché ''en clair" (convient aussi à short ou à int compte tenu des conversions systématiques) d : int (convient aussi à char, compte tenu des conversions systématiques) u : unsigned int (convient aussi à unsigned char ou à unsigned short, compte tenu des conversions systématiques) ld : long lu : unsigned long 5.1 Les possibilités de la fonction printf

40 a. Les principaux codes de conversion: f : double ou float écrit en notation "décimale" avec six chiffres après le point e : double ou float écrit en notation 'exponentielle'' (mantisse entre 1 et 9) avec six chiffres après le point décimal, sous la forme x.xxxxxxe+yyy ou x.xxxxxxe-yyy pour les nombres positifs et -x.xxxxxxe+yyy ou -x.xxxxxxe-yyy pour les nombres négatifs s : chaîne de caractères dont on fournit l'adresse (notion qui sera étudiée ultérieurement) 5.1 Les possibilités de la fonction printf

41 b. Action sur le gabarit daffichage: Les entiers sont affichés par défaut sans espaces avant ou après. Les flottants avec six chiffres après le point. Pour agir sur laffichage un nombre est placé après % et précise le nombre de caractère minimum à utiliser. Exemples: printf("%3d", n ); n = 20^20 n = 3^^3 n = n = Les possibilités de la fonction printf

42 b. Action sur le gabarit daffichage: Exemples:printf("%f", x ); x = x = printf("%10f", x ); x = ^^ x = E printf("%e", x ); x = e+000 x = e Les possibilités de la fonction printf

43 c. Actions sur la précision : pour les flottants, on peut préciser un nombre de chiffres après le point décimal Exemples:printf("%10.3f", x ); x = ^^^^^1.235 x = E3 ^^ x = E Remarques: Cadrage de laffichage à gauche printf("%-10.3f", x ); x = ^^^^^ - Le caractère * figurants à la place dun gabarit ou une précision signifie que la valeur effective est fournie dans la liste des arguments de printf: printf("%8.*f", n, x ); n=1; x= ^^^^^1.2 - La fonction printf fournit une valeur de retour (nombre de caractère affichés) 5.1 Les possibilités de la fonction printf

44 d. Les erreurs de programmation : Erreur 1 : Code de format en désaccord avec le type de lexpression à afficher: Conséquence : mauvaise interprétation si même taille (int en %u), sinon, conséquences plus désastreuses. Erreur 2: Nombre de code de format différents du nombre dexpressions de la liste Conséquence 1 : si des expressions de la liste nont pas de format, elles ne seront pas affichées ( printf("%d", n, p ); // valeur de p ne sera pas affiché ) Conséquence 2 : sil y a trop de code de format, printf cherchera à afficher nimporte quoi ( printf("%d %d", n ); n=8 8 2 ) 5.1 Les possibilités de la fonction printf

45 a. Les principaux codes de conversion : c : char d : int u : unsigned int hd : short int hu : unsigned short ld : long lu : unsigned long 5.1 Les possibilités de la fonction scanf

46 a. Les principaux codes de conversion : f ou e : float écrit en notation "décimale" ou 'exponentielle'' Lf ou le : double écrit en notation "décimale" ou 'exponentielle'' s : chaîne de caractères dont on fournit l'adresse (notion qui sera étudiée ultérieurement) b. Premières notion de tampon et de séparateurs : Lorsque scanf attend des données, linformation frappée au clavier est rangée temporairement dans lemplacement mémoire nommé « tampon ». Ce dernier est exploré caractère par caractère au fur et à mesure des besoins. Certains caractères jouent un rôle particulier: les séparateurs (lespace et la fin de ligne \n) 5.1 Les possibilités de la fonction scanf

47 c. Les premières règles utilisées par scanf : Les codes de format correspondant à un nombre entraînent lavancement du pointeur jusquau 1 er caractère différent dun séparateur, puis scanf prend en compte tous les caractères suivants jusquà la rencontre dun séparateur. Quand au code de format %c, il entraîne la prise en compte du caractère désigné par le pointeur (même un séparateur) et il est avancé sur le caractère suivant. 5.1 Les possibilités de la fonction scanf

48 c. Les premières règles utilisées par scanf : Exemples : (n et p sont de type int, c désigne une fin de ligne) scanf("%d%d", &n, &p ); = 12 p=25 = 12 ^25 n = 12 p=25 scanf("%d%c", &n, &c ); n = 12 c= 5.1 Les possibilités de la fonction scanf

49 d. On peut imposer un gabarit maximal : Le traitement dun code de format sinterrompe soit à la rencontre dun séparateur, soit lorsque le nombre de caractère indiqué a été atteint !! Exemples : (n et p sont de type désigne une fin de ligne) scanf("%3d%3d", &n, &p ); = 12 p=25 = 123 p=45 n = 12 p= Les possibilités de la fonction scanf

50 e. Rôle dun espace dans le format : Un espace entre deux codes de format demande à scanf de faire avancer le pointeur au prochain caractère différent dun séparateur !! Exemples : (n et p sont de type int, c désigne une fin de ligne) scanf("%d %c", &n, &c ); n = 12 c=a n = 12 c=a 5.1 Les possibilités de la fonction scanf

51 f. Arrêt prématuré de scanf : Compte = scanf("%d %d %c", &n, &p, &c ); = 12 p = 25c=bcompte = 3 = 12 p inchangéc inchangécompte = 1 indéfini p inchangéc inchangécompte = 0 Un arrêt prématuré de scanf a lieu dans le cas où scanf nest pas en mesur de fabriquer une valeur adéquate !! 5.1 Les possibilités de la fonction scanf

52 f. Problème de synchronisation entre lécran et le clavier : Examinons cet exemple: #include main() {int n, p; printf("donner une valeur pour n : "); scanf("%d",&n); printf("Merci pour %d\n",n); printf("donner une valeur pour p : "); scanf("%d",&p); printf("Merci pour %d\n",p); } exécutionexécution 5.1 Les possibilités de la fonction scanf

53 f. Problème de synchronisation entre lécran et le clavier : Le tampon nest pas vide à chaque nouvel appel de scanf g. Erreurs de programation : 1- Code de format en désaccord avec le type de lexpression: Si même taille introduction dune mauvaise valeur Si la variable a une taille inférieur écrasement dun emplacement mémoire consécutif à cette variable 2- Nombre de codes de format différent du nombre déléments de la liste: Scanf("%d",&n, &p); seule la valeur de n est lue Scanf("%d%d",&n); on affecte une valeur à un emplacement aléatoire de la mémoire 5.1 Les possibilités de la fonction scanf

54 6. Les instructions de contrôle


Télécharger ppt "Langage de Programmation: I - Le Langage C - M. Khalid EL HACHEMI I.N.S.E.A 2007 - 2008."

Présentations similaires


Annonces Google