Programmation en langage C c/o Faber Frédéric (https://www.ltam.lu/cours-c/) 2

Programmation en langage C c/o Faber Frédéric (https://www.ltam.lu/cours-c/) 2 Sommaire INTRODUCTION ................................................................................................................................................. 3 Chapitre 1: L'ENVIRONNEMENT ET LES BIBLIOTHEQUES .................................................................................. 8 Chapitre 2: NOTIONS DE BASE ......................................................................................................................... 18 Chapitre 3: TYPES DE BASE, OPÉRATEURS ET EXPRESSIONS ........................................................................... 26 Chapitre 4: LIRE ET ÉCRIRE DES DONNÉES ...................................................................................................... 48 Chapitre 5: LA STRUCTURE ALTERNATIVE ....................................................................................................... 60 Chapitre 6: LA STRUCTURE REPETITIVE ........................................................................................................... 68 Chapitre 7: LES TABLEAUX ............................................................................................................................... 77 Chapitre 8: LES CHAÎNES DE CARACTÈRES ....................................................................................................... 97 Chapitre 9: LES POINTEURS ........................................................................................................................... 116 Chapitre 10: LES FONCTIONS ......................................................................................................................... 147 Chapitre 11: LES FICHIERS SEQUENTIELS ....................................................................................................... 195 ANNEXES ........................................................................................................................................................ 219 Solutions des exercices de programmation en C .......................................................................................... 236 Chapitre 2: NOTIONS DE BASE ....................................................................................................................... 236 Chapitre 3: TYPES DE BASE, OPÉRATEURS ET EXPRESSIONS ......................................................................... 239 Chapitre 4: LIRE ET ÉCRIRE DES DONNÉES .................................................................................................... 243 Chapitre 5: LA STRUCTURE ALTERNATIVE ..................................................................................................... 248 Chapitre 6: LA STRUCTURE REPETITIVE ......................................................................................................... 253 Chapitre 7: LES TABLEAUX ............................................................................................................................. 262 Chapitre 8: LES CHAÎNES DE CARACTÈRES ..................................................................................................... 285 ***Chapitre 9: LES POINTEURS**** ............................................................................................................. 299 *****Chapitre 10: LES FONCTIONS***** ..................................................................................................... 316 Chapitre 11: LES FICHIERS SEQUENTIELS ....................................................................................................... 344 3 INTRODUCTION  NOTATIONS ET SYMBOLES  C, la naissance d'un langage de programmation portable ... NOTATIONS ET SYMBOLES Dans les textes explicatifs du manuel, les parties de programmes en langage algorithmique sont mis en évidence par la police d'écriture: Courier (mots réservés soulignés) Les parties de programmes en C sont écrites à l'aide de la police d'écriture: Courier (gras) Les modules (fonctions, procédures, programmes principaux) sont marqués par un trait vertical dans la marge gauche. Explication des symboles utilisés dans le texte: Conseil ! Mauvaise solution ! Bonne solution ! Attention ! Piège dangereux ! Attention ! Piège fréquent ! ou Remarque importante ! 4 Solution incorrecte ! Peut mener à des erreurs. Solution correcte ! Remarque avancée. Pour ceux qui veulent en savoir plus. C, la naissance d'un langage de programmation portable ...  (1) efficience et compréhensibilité :  (2) portabilité et bibliothèques de fonctions  (3) discipline de programmation Historique Entre les années 1980 et 2000, aucun langage de programmation n'a pu se vanter d'une croissance en popularité comparable à celle de C et de son frère C++. Ce n'est que vers l'an 2000 où le langage C doit passer sa première place au langage Java - l'un de ses petit-fils. Même en 2011, C occupe toujours la seconde place dans le classement de la popularité, entouré de Java, C++, C# et PHP qui sont tous en quelque sorte des dérivés de C. Le langage C trouve ses sources en 1972 dans les 'Bell Laboratories': Pour développer une version portable du système d'exploitation UNIX, Dennis M. Ritchie a conçu ce langage de programmation structuré, mais très 'près' de la machine. K&R-C En 1978, le duo Brian W. Kernighan / Dennis M. Ritchie a publié la définition classique du langage C (connue sous le nom de standard K&R-C ) dans un livre intitulé 'The C Programming Language'. ANSI-C 5 Le succès des années qui suivaient et le développement de compilateurs C par d'autres maisons ont rendu nécessaire la définition d'un standard actualisé et plus précis. En 1983, le 'American National Standards Institute' (ANSI) chargeait une commission de mettre au point 'une définition explicite et indépendante de la machine pour le langage C', qui devrait quand même conserver l'esprit du langage. Le résultat était le standard ANSI-C. La seconde édition du livre 'The C Programming Language', parue en 1988, respecte tout à fait le standard ANSI-C et elle est devenue par la suite, la 'bible' des programmeurs en C. C++ En 1983 un groupe de développeurs de AT&T sous la direction de Bjarne Stroustrup a créé le langage C++. Le but était de développer un langage qui garderait les avantages de ANSI-C (portabilité, efficience) et qui permettrait en plus la programmation orientée objet. Depuis 1990 il existe une ébauche pour un standard ANSI-C++. Entre-temps AT&T a développé deux compilateurs C++ qui respectent les nouvelles déterminations de ANSI et qui sont considérés comme des quasi-standards (AT&T-C++ Version 2.1 [1990] et AT&T-C++ Version 3.0 [1992]). Avantages Le grand succès du langage C s'explique par les avantages suivants; C est un langage: (1) universel : C n'est pas orienté vers un domaine d'applications spéciales, comme par exemple FORTRAN (applications scientifiques et techniques) ou COBOL (applications commerciales ou traitant de grandes quantités de données). (2) compact : C est basé sur un noyau de fonctions et d'opérateurs limité, qui permet la formulation d'expressions simples, mais efficaces. (3) moderne : C est un langage structuré, déclaratif et récursif; il offre des structures de contrôle et de déclaration comparables à celles des autres grands langages de ce temps (FORTRAN, ALGOL68, PASCAL). (4) près de la machine : comme C a été développé en premier lieu pour programmer le système d'exploitation UNIX, il offre des opérateurs qui sont très proches de ceux du langage machine et des fonctions qui permettent un accès simple et direct aux fonctions internes de l'ordinateur (p.ex: la gestion de la mémoire). (5) rapide : comme C permet d'utiliser des expressions et des opérateurs qui sont très proches du langage machine, il est possible de développer des programmes efficients et rapides. (6) indépendant de la machine : bien que C soit un langage près de la machine, il peut être utilisé sur n'importe quel système en possession d'un compilateur C. Au début C était surtout le langage des systèmes travaillant sous UNIX, aujourd'hui C est devenu le langage de programmation standard dans le domaine des micro- ordinateurs. 6 (7) portable : en respectant le standard ANSI-C, il est possible d'utiliser le même programme sur tout autre système (autre hardware, autre système d'exploitation), simplement en le recompilant. (8) extensible : C ne se compose pas seulement des fonctions standard; le langage est animé par des bibliothèques de fonctions privées ou livrées par de nombreuses maisons de développement. Désavantages Evidemment, rien n'est parfait. Jetons un petit coup d'oeil sur le revers de la médaille: (1) efficience et compréhensibilité : En C, nous avons la possibilité d'utiliser des expressions compactes et efficientes. D'autre part, nos programmes doivent rester compréhensibles pour nous-mêmes et pour d'autres. Comme nous allons le constater sur les exemples suivants, ces deux exigences peuvent se contredire réciproquement. Exemple 1 Les deux lignes suivantes impriment les N premiers éléments d'un tableau A[], en insérant un espace entre les éléments et en commençant une nouvelle ligne après chaque dixième chiffre: for (i=0; i<n; i++) printf("%6d%c", a[i], (i%10==9)?'\n':' '); Cette notation est très pratique, mais plutôt intimidante pour un débutant. L'autre variante, plus près de la notation en Pascal, est plus lisible, mais elle ne profite pas des avantages du langage C: for (I=0; I<N; I=I+1) { printf("%6d", A[I]); if ((I%10) == 9) printf("\n"); else printf(" "); } Exemple 2 La fonction copietab() copie les éléments d'une chaîne de caractères T[] dans une autre chaîne de caractères S[]. Voici d'abord la version 'simili-Pascal' : void copietab(char S[], char T[]) { int I; I=0; while (T[I] != '\0') { S[I] = T[I]; I = I+1; } S[I] = '\0'; } 7 Cette définition de la fonction est valable en C, mais en pratique elle ne serait jamais programmée ainsi. En utilisant les possibilités de C, un programmeur expérimenté préfère la solution suivante: void copietab(char *S, char *T) { while (*S++ = *T++); } La deuxième formulation de cette fonction est élégante, compacte, efficace et la traduction en langage machine fournit un code très rapide...; mais bien que cette manière de résoudre les problèmes soit le cas normal en C, il n'est pas si évident de suivre le raisonnement. Conclusions Bien entendu, dans les deux exemples ci-dessus, les formulations 'courtes' représentent le bon style dans C et sont de loin préférables aux deux autres. Nous constatons donc que: la programmation efficiente en C nécessite beaucoup d'expérience et n'est pas facilement accessible à des débutants. sans commentaires ou explications, les programmes peuvent devenir incompréhensibles, donc inutilisables. (2) portabilité et bibliothèques de fonctions Les limites de la portabilité La portabilité est l'un des avantages les plus importants de C: en écrivant des programmes qui respectent le standard ANSI-C, nous pouvons les utiliser sur n'importe quelle machine possédant un compilateur ANSI-C. D'autre part, le répertoire des fonctions ANSI-C est assez limité. Si un programmeur désire faire appel à une fonction spécifique de la machine (p.ex: utiliser une carte graphique spéciale), il est assisté par une foule de fonctions 'préfabriquées', mais il doit être conscient qu'il risque de perdre la portabilité. Ainsi, il devient évident que les avantages d'un programme portable doivent être payés par la restriction des moyens de programmation. (3) discipline de programmation Les dangers de C Nous voici arrivés à un point crucial: C est un langage près de la machine, donc dangereux et bien que C soit un langage de programmation structuré, il ne nous force pas à adopter un certain style de programmation (comme p.ex. Pascal). Dans un certain sens, tout est permis et la tentation de programmer du 'code spaghetti' est grande. (Même la commande uploads/Litterature/ programmation-en-langage-c.pdf

  • 46
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager