ebook img

Programmation procédurale du C-ANSI au C++ Programmation procédurale du C-ANSI au C++ PDF

121 Pages·2005·0.63 MB·French
by  
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Programmation procédurale du C-ANSI au C++ Programmation procédurale du C-ANSI au C++

IIUUTT AA LLyyoonn 11 IIUUTT AA LLyyoonn 11 IInnffoorrmmaattiiqquuee IInnffoorrmmaattiiqquuee PPPPPPrrrrrrooooooggggggrrrrrraaaaaammmmmmmmmmmmaaaaaatttttitiiiiooioooonnnnnn pp pppprrrrrrooooooccccccéééééédddddduuuuuurrrrrraaaaaallllleeleeee dddddduuuuuu CC CCCC-----A-AAAAANNNNNNSSSSSSIIIII I aa aaaauuuuuu CC CCCC++++++++++++ CC ~~ AA.. PP.. ~~ AAnnnnééee 22000033 ~~22000044 UUCCBB ~~ AA.. PP.. ~~ AAnnnnééee 22000033 ~~22000044 UULLBB LL Université LYON I ~ IUT-A Département Informatique ~ A.P. ~ Programmation procédurale: du C-ANSI au C++ 0 Programmation procédurale - du C-ANSI au C++ Chapitre 1 Eléments du langage C-ANSI page 1 Chapitre 2 Les types construits page 23 Chapitre 3 Les fonctions page 43 Chapitre 4 Les fichiers page 51 Chapitre 5 Compléments page 63 Chapitre 6 Les programmes multi-fichiers page 69 Chapitre 7 Du C-ANSI au C++ en programmation procédurale page 83 Annexe A La bibliothèque standard page 93 Annexe B Squelette d'un programme en langage C page 115 Annexe C Table ASCII page 117 Annexe D Bibliographie succincte page 119 Avertissement: Le présent document constitue le support papier du cours de programmation du premier semestre de première année. L'auteur n'autorise pas son utilisation ou sa diffusion en dehors du Département Informatique de l'IUT-A de l'Université Lyon-I. Merci de signaler les erreurs ou fautes constatées. Bonne lecture. A. P. Université LYON I ~ IUT-A Département Informatique ~ A.P. ~ Programmation procédurale: du C-ANSI au C++ 1 CHAPITRE 1 - ELEMENTS DE BASE DU LANGAGE C-ANSI 1 Introduction: Ce polycopié s’adresse aux étudiants en première année du département Informatique de l’IUT-A de l’Université LYON-I. Il a pour but de présenter les éléments du langage C dans l’environnement système Unix, mais n’a pas pour vocation d’être un cours sur les concepts et méthodes de programmation. Il existe à ce propos, d’autres documents au département auxquels il faut se référer. Il en est de même pour le développement de programme C ou C++ avec l'outil Visual Studio. Le lecteur trouvera en annexe une bibliographie indicative, sachant que le manuel qui fait autorité reste l’ouvrage de KERNIGHAN et RITCHIE intitulé " C-ANSI " publié aux éditions MASSON. En particulier sont évoqués dans l’ouvrage cité, l’historique et les évolutions du langage C. 2 L’organisation d’un programme C : Le langage C est dédié à la programmation procédurale. Un programme est un ensemble de séquences d’opérations sur des structures de données qui se déroulent suivant un schéma établi par un algorithme. La philosophie de la programmation procédurale est de décomposer et de structurer un programme pour faciliter sa construction et sa maintenance. Les niveaux de décomposition en C sont dans l’ordre hiérarchique décroissant: • le module : c’est un fichier texte comprenant la définition de fonctions • la fonction : c’est un ensemble de blocs • le bloc : c'est un ensemble d'instructions; un bloc est délimité par les caractères { et } • l'instruction: une instruction est une structure de contrôle ou une expression; une expression se termine par la caractère; La décomposition dépend de la complexité du problème à traiter. Ainsi suivant le cas, un programme peut être obtenu à partir : • d’un seul module qui ne comprend qu’une seule fonction (cas rare) • d’un seul module comprenant plusieurs fonctions • de plusieurs modules comprenant eux-mêmes une ou plusieurs fonctions. Parmi l’ensemble des fonctions qui constituent un programme, il en existe une particulière qui constitue le point d’entrée du programme et qui s’appelle main(). Il ne doit y avoir qu’une seule fonction main() par programme, même s'il est composé de plusieurs modules. Université LYON I ~ IUT-A Département Informatique ~ A.P. ~ Programmation procédurale: du C-ANSI au C++ 2 3 Production d’un exécutable : Un programme exécutable est donc le résultat de la compilation et de l’édition des liens entre modules. La compilation donne à partir d’un fichier texte appelé source un module objet. L’édition des liens est la phase qui permet à partir de plusieurs modules objets créés par l’utilisateur ou déjà existants dans une bibliothèque, d’obtenir un exécutable. On obtient dans l'environnement Unix donc le schéma de production suivant : Fichier texte: le nom du fichier comprend l’extension .c Fichier source Compilation Phase de traduction par le compilateur Fichier objet : le nom est identique au fichier source mais l’extension est maintenant .o Fichier objet Autre fichier objet Bibliothèque de fichiersobjects Edition des liens Fic hier Fichier exécutable d’extension .e exécutable Université LYON I ~ IUT-A Département Informatique ~ A.P. ~ Programmation procédurale: du C-ANSI au C++ 3 Afin de faciliter la phase de compilation pour les premiers TP qui ne nécessitent pas la réalisation de plusieurs modules, il existe au département, une procédure de compilation appelée ccomp. Pour invoquer cette procédure il suffit de passer la commande : ccomp tp1.c Cette procédure génère soit un fichier exécutable d’extension .e (tp1.e dans l’exemple), soit un fichier des erreurs d’extension .err (tp1.err ici). La compilation séparée de plusieurs modules en vue de l’obtention d’un exécutable est abordée au chapitre 6 du présent document. 4 Structure d’un fichier texte C : Nous ne nous intéressons dans un premier temps qu’aux programmes C ne comprenant qu’un seul module texte; les principes de la programmation modulaire sont décrits au chapitre 6. Dans cette optique, le niveau de décomposition d'un programme est alors la fonction avec une fonction particulière appelée main(). Une fonction est paramètrable de sorte que le traitement qu’elle effectue soit généralisable. La fonction main() n’échappe pas à cette règle, mais dans un premier temps, on considérera qu’il s’agit d’une fonction particulière qui ne reçoit aucun argument et qui ne retourne rien. Un programme constitué à partir d’un seul module comprend donc : Des définitions générales La fonction main fonction 1 fonction 2 Exemple : Soit le programme qui souhaite la bienvenue aux nouveaux étudiants : #include <stdio.h> char pnom[25] ; void main(void) { printf("\n Entrez votre prenom : " ) ; scanf("%s",pnom) ; printf("\n\n Bienvenue a l’IUT %s",pnom) ; } Université LYON I ~ IUT-A Département Informatique ~ A.P. ~ Programmation procédurale: du C-ANSI au C++ 4 Ce programme amène plusieurs remarques : 1. même un programme très simple invoque des fonctions qui ont déjà été écrites et qui sont archivées en tant que modules objet dans une bibliothèque. Ici les fonctions d’entrée-sortie scanf et printf sont des fonctions de la bibliothèque standard fournie avec le compilateur C. 2.pour utiliser des fonctions de la bibliothèque standard, il faut annoncer le type de paramètres qu’elles attendent et le type de valeur retournée s’il y en a. Cette annonce est réalisée par un prototype de la fonction qui indique ces renseignements. C’est le rôle de la directive #include d’inclure les fichiers où se trouvent les prototypes des fonctions de la bibliothèque qui vont être utilisées. 3.la directive #include n’est pas destinée au compilateur, mais au préprocesseur. Le préprocesseur effectue une analyse du texte source avant le compilateur et effectue l’inclusion du texte indiqué chaque fois qu’il rencontre cette directive. Ici on inclut un texte appelé <stdio.h>. Ce fichier est appelé un fichier d’en-tête (ou headers d’ou le .h). Tous les headers se trouvent sous le répertoire /usr/include/ ou dans /usr/local/include. Il s’agit donc de fichiers texte contenant des définitions et des prototypes de fonctions. 4. pour indiquer qu’une fonction ne reçoit pas d’argument, on met (void) après son identificateur. Pour indiquer qu’elle ne retourne rien on met void devant son identificateur. 5 Eléments du langage C : 5-1 Identificateurs, symboles, mots réservés : Un identificateur est un nom donné à une variable, une constante ou une fonction. Il est défini par le programmeur, et peut être constitué à partir de lettres (minuscules et majuscules étant différentes), du caractère de soulignement _ et de chiffres. Cependant un identificateur ne doit pas commencer par un chiffre. Les implémentations récentes du C-ANSI admettent des identificateurs pouvant aller jusqu'à 31 caractères. Les symboles sont des caractères ou groupe de caractères utilisés principalement pour représenter des opérateurs ou des caractère spéciaux. & ~ " # { } ( ) [ ] | \ / * - + % , ; . < > = ! ? Université LYON I ~ IUT-A Département Informatique ~ A.P. ~ Programmation procédurale: du C-ANSI au C++ 5 Les mots réservés sont des identificateurs servant de mots-clés au langage C. auto break case char const continue default do double else enum extern float for goto if int long register return short sizeof static struct switch typedef union unsigned void volatile while Les commentaires dans un programme C commencent par la séquence /* et se terminent par la séquence */ quel que soit le nombre de lignes entre les deux. On ne peut pas inclure un commentaire dans un commentaire. 5-2 Les objets manipulés : Un objet au sens de la programmation procédurale est caractérisé par : 1) un identificateur 2) un type qui impose : • une représentation interne • des opérateurs associés 3) une valeur variable ou constante a) Les types de base : type char : codé sur un octet et considéré comme un entier sur 8 bits signés ou non (unsigned); un caractère est représenté par le code ASCII donné en annexe type int : entier en représentation interne en complément à 2; ils sont signés ou non signés(unsigned) . On distingue : short :codés sur 2 octets long :codés sur 4 octets int :codés sur 2 ou 4 octets suivant la machine cible type float : nombre réel en représentation interne suivant la norme IEEE 754. On distingue : float : simple précision codé sur 4 octets double : double précision codés sur 8 octets Université LYON I ~ IUT-A Département Informatique ~ A.P. ~ Programmation procédurale: du C-ANSI au C++ 6 b) Mécanisme de construction de type : En dehors des types de base, il existe également le type tableau, le type structure, le type union, et le type pointeur. Ces types sont étudiés au chapitre 2. Enfin le langage C offre la possibilité au programmeur de construire lui-même ses propres types grâce à la directive typedef. Il s'agit en fait de renommer un type existant (soit un type de base soit un type construit) afin d'en améliorer la compréhension suivant le contexte. La syntaxe pour définir un type nouveau est la suivante: typedef type Nouveautype; Exemple: typedef int Age; /* Age est maintenant un type nouveau */ Age anciennete; /* anciennete est une variable de type Age */ c) Les constantes : constantes entières : on les exprime généralement en décimal ou en hexadécimal précédées alors de 0x.Une constante correspondant à un entier long est suffixée par la lettre L Exemple : 127 constante en base 10 0x7F constante en base 16 127L constante entier long en base 10 0177 constante entier long en base 8 constantes réelles : on les exprime soit avec une partie fractionnaire, soit sous forme mantisse plus exposant Exemple : 25.8 forme fractionnaire 1.03e-2 forme avec exposant constantes chaînes : en C, il n’existe pas de type primitif chaîne. Une chaîne est traitée comme une suite d’octets se terminant par le caractère '\0' (octet au 0 binaire). On peut définir une constante chaîne de caractères en donnant sa valeur encadrée par les caractères spéciaux " "; il s’agira d’une suite d’octets terminée par '\0'. On peut aussi utiliser le mécanisme de substitution de texte offert par le préprocesseur, mais il ne s’agira alors que de définir des constantes symboliques qui ne pourront pas être utilisées en tant que chaîne constante. Université LYON I ~ IUT-A Département Informatique ~ A.P. ~ Programmation procédurale: du C-ANSI au C++ 7 Exemple : "ceci est un message" chaîne constante terminée par '\0' #define TAILLE 10 substitution dans le texte de TAILLE par 10 constantes caractère : une constante caractère est de type entier mais codée sur un octet. Le codage peut se faire de plusieurs façons: • on écrit le caractère entre apostrophes • on code le caractère en donnant la valeur décimal de con code ASCII • on code le caractère sous la forme '\ooo' ou la séquence ooo est la représentation en base 8 du code ASCII du caractère à coder • on code le caractère sous la forme '\xhhh' où la séquence hhh est la représentation en base 16 du code ASCII du caractère à coder Exemple : c='A' c est le caractère A c=65 idem mais on donne le code ASCII de A en décimal c='\101' code ASCII de A est en octal c='\x41' code ASCII de A est en hexadécimal Il existe également des caractères spéciaux permettant de coder des caractères courants. Ces caractères sont notés sous la forme '\lettre'. On donne ici les caractères spéciaux les plus usuels. '\b' caractère backspace (retour arrière) '\n' caractère saut de ligne (new line) '\t' caractère de tabulation horizontale '\\' caractère \ d) Les variables : On définit une variable en précisant son type et son identificateur. On ne peut pas utiliser une variable non définie. Il est possible en langage C d’initialiser une variable au moment de sa définition. Exemple: int x=3; /* definition de la variable x comme entier initialisé à la valeur 3 */ Université LYON I ~ IUT-A Département Informatique ~ A.P. ~ Programmation procédurale: du C-ANSI au C++ 8 Les termes de déclaration et de définition sont souvent confondus. Ils ne sont pourtant pas porteur du même sens. Une définition implique une allocation mémoire, celle ci étant faite au moment de la traduction du source, alors qu'une déclaration ne constitue que l'association d'un identificateur à un type. Il n'y a pas alors de réservation mémoire; nous verrons ainsi qu'un objet peut être déclaré plusieurs fois dans le cas de la programmation modulaire, alors qu'il ne doit être défini qu'une seule fois. La définition d'un objet implique également des règles de visibilité (c'est à dire où cet objet peut être atteint). Les règles de portée des variables sont étudiées au chapitre 3. Le C-ANSI permet de préciser au moment de la définition d'un objet que ce dernier ne devra pas être modifié. On utilise pour cela le qualificatif const. Etant donné que l'objet ne pourra plus être modifié par la suite, il doit donc être initialisé au moment de sa définition. Exemple: const int x=3; 5-3 Les opérateurs : Les opérateurs permettent de construire des expressions. Ils spécifient les calculs à effectuer sur leurs arguments appelés opérandes qui sont soit des objets (variables ou constantes) soit des sous-expressions. a) Les expressions : Une expression est construite à partir d'opérandes ou d'expressions, reliés par un opérateur. Un opérateur ne peut s'appliquer que sur un certain type d'opérande. En conséquence une expression a elle même un type résultant suivant les types des opérandes et de l'opérateur qui la composent et en fonction de certaines conversions étudiées plus loin. Exemples: • l'expression x + y est constitué de l'opérateur + et des opérandes x et y qui peuvent être de type int ou float. Le résultat est de type int si x et y sont de type int; il est de type float si x et/ou y sont de type float. • l'expression x + (y*z) est constituée de l'opérande x et de la sous-expression (y*z). Le type du résultat est soit int soit float suivant le type des opérandes. Université LYON I ~ IUT-A Département Informatique ~ A.P. ~ Programmation procédurale: du C-ANSI au C++ 9

Description:
Chapitre 7 Du C-ANSI au C++ en programmation procédurale page 83. Annexe A La Le langage C est dédié à la programmation procédurale. Un programme est un Pour assurer la comptabilité des types, on passe par
See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.