Programmation Structuée - Chapitre 1 PDF
Document Details
ENSA de Marrakech
2023
Pr Bekkari
Tags
Summary
Ce document est un cours sur la programmation structurée en langage C, couvrant des sujets comme l'introduction au langage, les opérateurs, les structures de contrôle et les fonctions d'entrées/sorties. Il est destiné aux cycles préparatoires de l'ENSA de Marrakech pour l'année universitaire 2023-2024.
Full Transcript
Programmation Structurée Pr Bekkari 1 Cycle préparatoire de l’ENSA de Marrakech Année universitaire 2023 - 2024 21/09/2023 Présentation Prérequis Des connaissances de base en algorithmique et en programmation. Ob...
Programmation Structurée Pr Bekkari 1 Cycle préparatoire de l’ENSA de Marrakech Année universitaire 2023 - 2024 21/09/2023 Présentation Prérequis Des connaissances de base en algorithmique et en programmation. Objectifs Ecrire des programmes dans un langage de programmation procédurale « langage C » Consolider les connaissances en algorithmique. Développer la capacité de résoudre des problèmes informatiques. Maitriser les techniques de la programmation structurée. 2 21/09/2023 Informations pratiques Evaluation: 2 contrôles (70% de la note final) + 30 % autres et appréciations TD et devoirs Références Programmation en C Anne CANTEAUT INRIA Le programmeur: Le Langage C , Peter Aitken et Bradley L. Jones , édition Pearson Education France 3 21/09/2023 Plan du semestre I. Introduction au langage C II. Opérateurs et expressions III. Les structures de contrôles IV. Les types composés V. Les fonctions VI. Les pointeurs VII. L’allocation dynamique de la mémoire. VIII. Gestion des fichiers 4 21/09/2023 Chapitre I: Introduction au langage C Pr Bekkari 5 Cycle préparatoire de l’ENSA de Marrakech Année universitaire 2023 - 2024 21/09/2023 Contenu du chapitre 1. Introduction générale 2. Structure générale d’un programme 3. Composants élémentaires du langage C 4. Fonctions d’entrées/sorties 5. Les directives du préprocesseur 6 21/09/2023 Langage de programmation Deux types de langages de programmation: Procéduraux (C, Cobol, Pascal, Fortran, …) Orientés « objet » (C++, Java,…) Langage de programmation: Outil / moyen permettant d’ordonner des suites consécutives d’instructions à la machine dans un but précis Chaque instruction correspond à une action du processeur - casser les œufs, Liste Exemple: Mon but: - les battre avec le sucre, d’instructions faire un gâteau - ajouter la farine, - … Le langage de programmation capture le besoin humain dans une syntaxe précise avant d’être traduit en langage machine 7 21/09/2023 Langage machine est un langage binaire = langage à 2 états: 0 ou 1 L’information est exprimée en suite de bit (binary digit) Un bit est une unité de stockage de l’information dans la mémoire 1 bit = 2 valeurs possibles: 0 ou 1 2 bits = 4 possibilités de valeurs: 00 01 000 100 10 001 101 11 010 110 3 bits = 8 possibilités de valeurs différentes : 011 111 1 octet = 8 bits = 28 possibilités →256 valeurs différentes Ces valeurs permettent de coder tous les caractères numériques (1, 2, 3…), alphanumériques (a, b, C,…), les symboles (?, &, …), les opérations logiques et arithmétiques (=, + , - , /,…), etc. Le code ASCII (American Standard Code for Information Interchange) permet l’encodage de tous les caractères avec cette norme → permet le stockage de caractères sur 8 bits 8 21/09/2023 Langage machine Exemple: Caractère Représentation en bit Équivalent en Code ASCII A 01000001 65 a 01100001 97 1 00110001 49 Le code ASCII permet le stockage de 256 caractères possibles: De 0 à 31: caractères de contrôle (retour à ligne, tabulation, shift, cancel, escape, …) De 48 à 57 : les chiffres (de 1 à 9) De 65 à 90 : les majuscules (A, B, C, …) De 97 à 122: les minuscules (a, b, c, …) Pour plus d’information: http://www.tableascii.com/ 9 21/09/2023 De l’assembleur vers les langages évolués Le langage machine est complexe → l’humain ne peut pas coder avec le langage binaire Apparition de l’assembleur: langage comprenant des instructions élémentaires (mots clés) qui correspondent à certains processus du langage machine Exemples d’instructions LOAD A Les instructions sont ensuite traduite en ADD A, 2 langage machine L’assembleur est plus compréhensible par l’être humain mais assez limité: n’est pas portable (dépend du type de la machine), trop simple (n’est pas adapté aux applications complexes) 10 D’où l’apparition des langages structurés et évolués (C, Fortran, Cobol, Pascal, Basic, …) 21/09/2023 Historique du langage C Le langage C a été conçu en 1972 par Dennis Ritchie et Brian Kernighan de « Bell laboratories » pour le développement d’un système d’exploitation Unix En 1978, Kernighan et Ritchie publie une définition classique et standard du C dans un livre intitulé « The C programming language » (version également appelée K&R 78) Le langage C devint de plus en plus populaire, des développeurs et fournisseurs mirent sur le marché des compilateurs comportant des extensions particulières (non conforme à K&R) En 1983, l’ANSI (American National Standards Institute) décida de normaliser le langage C. Le résultat en fut la norme ANSI C achevée en 1989. Cette norme fut adoptée telle quelle en 1990 par l’ISO (International Standards Organization) en tant que standard ISO. 11 21/09/2023 Caractéristiques du langage C Structuré, déclaratif et récursif Universel: n’est pas orienté vers un domaine d’application particulier (à l’instar du Cobol qui est orienté applications commerciales) Portable: un programme C peut être exécuté à partir de la même source sur d’autres systèmes d’exploitation possédant un compilateur C Proche du langage machine: offre des opérateurs de manipulation de la mémoire, allocation d’adresses, etc. → efficience et rapidité Modulaire: un programme C peut être découpé en modules qu’on peut utiliser séparément Extensible: en plus de sa bibliothèque standard, d’autres bibliothèques de fonctions diverses existent 12 21/09/2023 Etapes de programmation en C 1) Compréhension du problème = Quel est mon objectif 2) Décomposition du problème en sous problèmes puis en étapes de solutions 3) Ecriture de l’algorithme: science qui permet de passer d’un problème à sa résolution Problème complexe : décomposition en sous problèmes / sous objectifs Exemple: développer une application de gestion de données Ajout de Mise à jour Suppression données Problème simple : décrire les différentes étapes de la solution 13 21/09/2023 Etapes de programmation en C Exemple : Calculer la somme de 2 chiffres Liste d’instructions: Algorithme en langage naturel Algorithme en langage C - Afficher à l’écran « entrer #include chiffre 1 » int main () { - Lire la valeur de chiffre 1 int a, b, somme; - Afficher à l’écran « entrer printf(″entrer la valeur de a ″); chiffre 2 » scanf(″%d″, &a); - Lire la valeur de chiffre 2 printf(″entrer la valeur de b″); - Somme = chiffre 1 + chiffre 2 scanf(″%d″, &b); - Afficher Somme somme = a + b; printf(″La somme est: %d″, somme); } 14 Il faut respecter la syntaxe du langage de programmation utilisé 21/09/2023 Choix de l’éditeur Les éditeurs de programme / environnements de développement aident à écrire des programmes informatiques Fonctionnalités: mise en évidence de la syntaxe (mots clés, mots réservés), détection d’erreurs, auto-complétion, indentation, compilation et exécution, etc. Exemples d’éditeurs / d’environnements de développement: ConTEXT : supporte plusieurs langages de programmation mais permet uniquement l’écriture de programme Notepad++ : éditeur pour l’écriture de programme uniquement Dev-C++ : environnement de développement pour le C et C++ Code::Blocks : environnement de développement C/C++ 15 21/09/2023 La compilation Un programme C est décrit par un fichier texte appelé fichier source. Ce fichier n’est pas exécutable par le processeur →il faut le traduire en langage machine C’est le rôle du compilateur Compilation = traduction du fichier source en langage machine La compilation se déroule en 3 grandes phases successives: Fichier source Fichier source bis Fichier objet Programme exécutable Traduction Programme C Traitement En code Préprocesseur assembleur Edition de liens (suite Remplacement de Conversion du d’instruction du caractères, inclusion fichier objet en microprocesseur) d’autres fichiers un fichier 16 puis en fichier sources, etc. exécutable binaire 21/09/2023 De la compilation à l’exécution Extension des fichiers utilisés et générés:.c (fichier source).i (fichier prétraité par le préprocesseur).s (fichier assembleur).o (fichier objet).a (fichier objet correspondant aux librairies précompilées) Par défaut le fichier de sortie (produit) s’appelle: a.out Le compilateur du langage C est : GCC (du projet GNU) créé à la base pour le système Linux, mais il existe des versions spécifiques du compilateur GCC conçues pour Windows (à utiliser avec un IDE tel que CodeBlocks ou DevC++) Remarques: Ne pas utiliser d’espace, de symboles ou de caractères spécifiques dans le nom des fichiers À chaque modification du fichier source, il faut recompiler à 17 nouveau 21/09/2023 Structure générale d’un programme Un programme en langage C est généralement composé de: a) Les directives du préprocesseur (#include, #include #define, …) b) Les créations de types (struct, int main() { int a, b, somme; union, enum, typedef) printf(″entrez la valeur de a ″); c) Les déclarations de variables scanf(″%d″, &a); externes (ou globales) et de printf(″entrez la valeur de b″); fonctions scanf(″%d″, &b); d) Fonction main() somme = a + b; printf(″La somme est: %d″, somme); 1) Déclaration de variables internes return 0; 2) Instructions } 18 21/09/2023 Structure générale d’un programme Les entêtes de fichiers sont obligatoires quand on fait des appels de fonctions de la bibliothèque standard (librairie) Exemple: stdio.h est un fichier entête de la bibliothèque standard (contient les fonctions de lecture et d’écriture) L’appel du fichier se fait avec la directive #include La fonction main() : fonction principale d’un programme C doit se trouver obligatoirement dans le fichier source int main(){ La fonction main() retourne la … valeur 0: indique que le programme return 0; s’est terminé avec succès } Chaque instruction simple se termine par un point-virgule ; 19 21/09/2023 Composants élémentaires Variables et identificateurs Les mots clés Les types fondamentaux Les constantes Les commentaires 20 21/09/2023 Variables et identificateurs Les variables servent à stocker les données utilisées pendant l’exécution du programme (stockage temporaire) Exemples: a, b, x, y, i, j, var12 Une variable doit toujours être déclarée avant d’être utilisée Elle est déclarée avec un type et un identificateur: [type] [identificateur] Un identificateur est un nom donné à une variable ou à une entité du programme (fonction, type prédéfini, constante) Il est constitué de: lettres sans accent (alphabet anglais) en majuscule ou en minuscule, chiffres, et du caractère _ 21 21/09/2023 Variables et identificateurs Remarque: éviter de commencer le nom de la variable par _ pour éviter toute confusion avec les identificateurs qui se trouvent dans la bibliothèque standard Règles à respecter pour les identificateurs: Ne pas utiliser d’espaces Ne pas utiliser de tirés (-), de symboles (&, @, $, « » …) Ne pas utiliser d’opérateurs arithmétiques et logiques (+, -, *, =…) Ne pas utiliser de. (réservés aux extensions de fichiers) Ne pas commencer le nom d’une variable par un chiffre Ne pas utiliser de mots clés réservés au langage Exemples corrects Exemples incorrects nomvar, nom_var, NOM_VAR nom var, nom-var, nom.var 22 var1 1var, var$ 21/09/2023 Mots clés réservés Le langage C compte environ 32 mots clés réservés aux: instructions de contrôles (break, case, while, if, …) spécifications de types (int, float, short, …) qualifications de types (const, volatile, …) spécifications de stockage (register, typedef, static, …) … 23 21/09/2023 Les types fondamentaux C est un langage typé: toute variable, constante ou fonction est d’un type précis Le type d’une variable définit l’ensemble des valeurs qu’elle peut prendre et le nombre d’octets à lui réserver en mémoire La mémoire est composée d’une suite continue d’octets et chaque octet a une adresse qui est un entier Quand une variable est déclarée, une adresse lui est attribuée dans la mémoire. L’adresse correspond à une zone mémoire dont la longueur est fixée par le type RAM Variable v1 … 3810 4710 … Adresse 3400 3400 … 4718 … 3404 … … … … 24 … 21/09/2023 Les types fondamentaux Il existe deux catégories de types de base en langage C: Les entiers Les flottants int float char double short long double long … Chaque catégorie contient des dérivés 25 21/09/2023 Les types entiers int: entier standard. Il peut être de type short ou long: Type Taille Valeurs représentées short int 2 octets - 32 768 à 32 767 long int 4 octets - 2 147 483 648 à 2 147 483 647 unsigned short 2 octets 0 à 65 535 unsigned long 4 octets 0 à 4 294967 296 char: type caractère. Ce type est un dérivé de l’entier car un caractère en C est identifié par son code ASCII qui est un nombre entier (exemple: code ASCII de A: 65) Type Taille Valeurs représentées char 1 octet (8 bits) - 128 à 127 unsigned char 1 octet 0 à 255 26 21/09/2023 Les types flottants Ils représentent les nombres en virgules. Chaque dérivé correspond à une précision possible Type Description Taille float Simple précision 4 octets double Double précision 8 octets long double Quadruple précision 10 octets Un nombre flottant peut représenter : Un nombre entier décimal: exemple: 142 Un nombre comportant un point décimal: exemple: 12.34 Un nombre exponentiel (éventuellement à virgule): exemple: 4.3-2, 56.8210 27 21/09/2023 Déclaration de variables Syntaxe de la déclaration d’une variable: [type] [nomVariable]; Exemple: int a; Il est possible de déclarer et initialiser la variable en même temps: int somme = 0; double r = 3.54; Il est possible de déclarer plusieurs variables dans la même ligne (séparées par des virgules) float f1, f2, f3; int x, y = 2; Le type char : char c1; char c2 = ‘D’; Chaîne de caractères: voir chapitre IV 28 21/09/2023 Les constantes Une constante est une valeur / donnée utilisée dans le programme Elle peut être utilisée pour initialiser une variable ou pour lui affecter une valeur 3 types de constantes: Les constantes entières Les constantes réelles Les constantes caractères 29 21/09/2023 Les constantes entières Elles peuvent être représentées de 3 manières différentes: Forme Description Exemple décimale forme usuelle d’un entier 0, 35, 274 forme d’un entier en base 8: chiffre 0 → 00 octale commence par 0 chiffre 27 → 033 forme d’un entier en base 16: chiffre 27 → 0x1B hexadécimale commence par 0x ou 0X suivi de chiffre 255 → 0xff chiffre hexadécimaux (0-9 et a-f) Par défaut, le type d'une constante entière est le plus petit type dans lequel sa valeur peut être représentée Pour la forme décimale: int, sinon long, sinon unsigned long Certains suffixes forcent l’utilisation d’unsigned et de long L ou l : pour le type long (ex: 123456789L) UL ou ul: pour le type unsigned long (ex: 035ul) 30 21/09/2023 Les constantes réelles Peuvent avoir deux notations: Notation usuelle de nombres réels: 14.56 , 3.4567 Notation exponentielle: utilisation de e ou E pour l’exposant: Exemple: 12.3e-4 , 13.5E+2 Les constantes réelles sont par défaut de type double On peut forcer l’utilisation du float et du long double avec les suffixes suivants: F ou f pour le type float (ex: 2.26f) L ou l pour le type long double (ex: 12.35L) 31 21/09/2023 Les constantes caractères Un caractère imprimable est désigné par 2 apostrophes: exemple: ‘a’ , ‘R’ Une chaîne de caractère est désignée par des guillemets: exemple: ″ceci est une chaine de caractère ″ L’apostrophe, les guillemets et le back slash sont désignés par un autre back slash : \’ \″ \\ Cas particuliers: les caractères non imprimables \n nouvelle ligne Exemple: ″Plan du cours \n Introduction \n \t tabulation horizontale Chapitre 1 \n Chapitre 2″ \v tabulation verticale \b retour arrière \r retour chariot Plan du cours \f saut de page Introduction Chapitre 1 32 \a signal sonore Chapitre 2 21/09/2023 Les commentaires Les commentaires sont pratiques pour expliquer le code de votre programme ou pour ignorer une partie du code sans le supprimer Pour insérer une ligne de commentaire: //voici mon commentaire Pour insérer une ou plusieurs lignes de commentaires: Attention: Les commentaires ne s’imbriquent pas: chaine*/ → écriture erronée 33 21/09/2023 Les fonctions d’entrées/sorties Les fonctions d’entrées/sorties permettent à la machine de communiquer avec l’utilisateur Fonction d’entrée = lecture de données par le programme: lit les valeurs entrées par l’utilisateur grâce au clavier Fonction de sortie = écriture de données par le programme: affiche des données et valeurs à l’écran Les fonctions de lecture et d’écriture sont définies dans le fichier de la bibliothèque standard: il suffit de les appeler par leur nom dans le code de votre programme et de respecter leur syntaxe 34 21/09/2023 La fonction de sortie: printf Sa syntaxe peut contenir : du texte (caractère ou chaîne de caractères), des variables (ou expressions de variables) et des séquences d’échappement (\n, \t, …) Syntaxe de printf (): printf(″texte spécificateurs de format″, expressions); Le spécificateur de format permet de préciser le format de données à afficher. Sa syntaxe: % suivi d’un caractère prédéfini pour le format souhaité Par exemple: %d désigne le type entier Dans printf() il est possible de combiner plusieurs textes (s’il y en a) avec plusieurs spécificateurs de format: printf(″texte spécificateur de format1 texte spécificateur de format2″, 35 exp1, exp2); 21/09/2023 La fonction de sortie: printf , float , float , float 36 21/09/2023 La fonction de sortie: printf Exemples: Code Résultat à l’écran printf(″voici un exemple″); voici un exemple int x = 5; La valeur de x est 5 printf(″La valeur de x est %d″, x); int a = 12, b = 3; printf(″La somme de %d et %d est: %d″, La somme de 12 et 3 est: 15 a, b, a+b); float prix= 32.5; Le prix de cet article est 32.5 printf(″Le prix de cet article est %f \n Il Il s’agit du prix HT s’agit du prix HT″, prix); double prix = 27.16; 2.716000e+001 printf(″%e″, prix); char c1 = ‘A’, c2= ‘B’; 37 AB printf(″%c %c″, c1, c2); 21/09/2023 La fonction de sortie: printf Pour les types flottants, il est possible de préciser la largeur minimale de la valeur à afficher et le nombre de chiffres après le point décimal La précision par défaut des types flottants est fixée à 6 décimales Exemples: printf("%f", 100.123); → 100.123000 printf("%.2f", 100.123); → 100.12 38 21/09/2023 La fonction d’entrée: scanf Permet de lire les données saisies au clavier par l’utilisateur Syntaxe: scanf(″spécificateurs de format″, &variable); Les spécificateurs de format sont les mêmes utilisés dans printf(): %d, %f, %c, … ex: scanf(″%f″, &a); &a fait référence à l’adresse de la variable a Exception: pour utiliser le type double: %lf ou %le Exemple: #include int main () { int a, b; printf(″entrez la valeur de a :″); scanf(″%d″, &a); printf(″entrez la valeur de b :″); scanf(″%d″, &b); printf(″La somme de %d et %d est: %d″, a, b, a+b); 39 } 21/09/2023 Les directives au préprocesseur Le préprocesseur est un programme exécuté lors de la première phase de compilation Il effectue des modifications textuelles sur le fichier source à partir de directives Les directives commencent par le caractère #. Elle peuvent servir à: l’inclusion d’autres fichiers sources (#include) la définition de constantes et de macros (#define) la compilation conditionnelle (#if, #ifdef ,…) Remarque: pas de ; à la fin de la directive car il ne s’agit pas d’une instruction 40 21/09/2023 Les directives au préprocesseur La directive #include: permet d’inclure les fichiers « entête » de la bibliothèque standard (contiennent des fonctions prédéfinies pour le langage C) Exemples de fichiers: stdio.h, math.h, string.h (l’extension.h fait référence à header) La directive #include est toujours introduite en début du programme Syntaxe: #include pour les fichiers de la bibliothèque #include ″nom-de-fichier″ pour les fichiers créés par l’utilisateur Exemples: #include #include ″users/projet/etudiant/monfichier.h″ 41 #include ″users/projet/etudiant/monfichier.c″ 21/09/2023 Les directives au préprocesseur La directive #define: l’objectif est de donner un nom parlant à une constante qui ne changera pas pendant l’exécution du programme Syntaxe: #define nomconstante contenu Le contenu peut être une valeur, un caractère, un symbole ou une expression Exemples: #define PI 3.14 #define NB_COLONNES 10 #define NB_LIGNES (2 * NB_COLONNES) #define DEBUT { #define FIN } 42 21/09/2023