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

CINI – Li115 1 Introduction à la programmation impérative en langage C Module Li115 Semestre 2011fev Chargés de cours : Nicolas Sabouret Pierre Fouilhoux.

Présentations similaires


Présentation au sujet: "CINI – Li115 1 Introduction à la programmation impérative en langage C Module Li115 Semestre 2011fev Chargés de cours : Nicolas Sabouret Pierre Fouilhoux."— Transcription de la présentation:

1 CINI – Li115 1 Introduction à la programmation impérative en langage C Module Li115 Semestre 2011fev Chargés de cours : Nicolas Sabouret Pierre Fouilhoux Claude Dutheillet

2 CINI – Li115 2 Semaine 1 Introduction ● Objectifs et organisation du cours ● Langage C : historique ● Caractéristiques du langage C ● Compilation ● Structure minimale d'un programme ● Types et expressions ● Variables ● Fonctions ● Instructions ● Commentaires ● Bonnes pratiques

3 CINI – Li115 3 Objectifs et organisation du cours (1) ● Objectifs du cours : ● Apprendre à programmer en langage impératif ● Etre capable d'écrire des programmes en langage C ● Prendre de bonnes pratiques de programmation ● Découvrir quelques algorithmes ● Organisation : ● 12 semaines de cours (1h30) ● 12 semaines de TD et TME (2x1h45) ● Polys ● Cours : bâtiment Esclangon, RC14 (imprimerie centrale) ● TD/TME : distribués par les chargés de TD ● Mémo : distribués par les chargés de TD

4 CINI – Li115 4 Objectifs et organisation du cours (2) ● Contrôle des connaissances : ● Examen final : 70% ● Contrôle continu : 30% – - 10 % pour le partiel – - 10% pour le TP solitaire (semaine 8) – - 10% pour la présence en TD-TP, les interrogations de TD et l'évaluation des TP ● Site Web de l'UE : ● http://www-licence.ufr-info-p6.jussieu.fr/lmd/licence/2010/ue/LI115-2011fev/ http://www-licence.ufr-info-p6.jussieu.fr/lmd/licence/ ● Équipe enseignante ● Documents de cours, TD et TME ● Informations sur les dates d'examen ● Environnement Geany ● Annales

5 CINI – Li115 5 Objectifs et organisation du cours (3) ● Environnement : Geany ● Utilisable sous Linux, Windows, Mac OS X ● Téléchargeable depuis le site de l'UE

6 CINI – Li115 6 Langage C : historique ● Début des années 70 : ● Définition du langage C dans les laboratoires Bell (Kernighan et Ritchie) ● Objectif : portabilité ● A partir de 1974 : le langage C est utilisé pour la mise en oeuvre du système d'exploitation UNIX ● 1983 : Normalisation par l'ISO → C-ANSI et C89 ● 1988 : Normalisation POSIX puis 1999 : ISO/IEC9899 (C99) ● Le langage C aujourd'hui : ● Son utilisation dépasse celle du système UNIX. ● Les systèmes d'exploitation les plus répandus sont écrits en langage C. ● Un des langages les plus utilisés. ● Un langage de haut niveau efficace et portable.

7 CINI – Li115 7 Caractéristiques du langage C ● Langage impératif ● Langage basé sur l'exécution d'instructions ● Les instructions sont exécutées dans leur ordre d'apparition ● Utilisation de structures de contrôle pour répéter des instructions (boucles) ● Autres langages impératifs : Langage d'assemblage, Pascal, Fortran, Visual Basic,... ● Remarque : Scheme est un langage fonctionnel ● Langage typé ● Langage compilé ● Afin d'exécuter un programme en C, il faut tout d'abord traduire le code en langage machine → la compilation ● Cette traduction est réalisée par un compilateur ● Remarque : Scheme n'est pas un langage compilé mais interprété

8 CINI – Li115 8 Compilation (1) Les programmes source en C sont des fichiers contenant du texte et enregistrés avec l'extension.c. Un programme source en C doit respecter exactement la syntaxe du langage C. Un programme source est écrit par un programmeur. Pour écrire un programme source, le programmeur utilise un éditeur de texte (éditeur de Geany, Gedit, Emacs, Vi, NotePad,...). Ce programme source doit ensuite être traduit en langage machine. Le programmeur procède alors à la compilation de son programme source afin d'obtenir un programme (fichier) exécutable. Ce programme peut être exécuté directement, par un utilisateur n'ayant pas nécessairement la connaissance du langage C. (par double-clic sur le fichier ou passage à l'interpréteur de commandes) Programme Source (.c) Compilation Programme Exécutable

9 CINI – Li115 9 Compilation (2) La phase de compilation procède en 3 temps : ● 1- Le pré-processeur inclut les fichiers sources et les éléments référencés en tête de fichiers, dans le code source. ● 2- Le compilateur traduit ce fichier de code source (ou programme source) en langage machine. Ce code est sauvegardé dans un fichier de code objet avec l'extension.o ● 3- Le compilateur procède ensuite à l'édition des liens consistant à intégrer des fichiers annexes de code objet auquel le programme fait référence. ● Après la compilation, le programmeur obtient un fichier de code exécutable (programme exécutable) par la machine.

10 CINI – Li115 10 Compilation (3) ● Erreur de compilation : ● Si le programme source ne respecte pas exactement la syntaxe du langage C, le compilateur ne peut pas effectuer la traduction en code machine ● Il retourne une erreur spécifiant le numéro de la ligne et la cause de l'erreur ● Erreur d'exécution : ● Le programme compile sans erreur mais n'effectue pas ce qui était spécifié Programme source (.c) Fichier de code objet (.o) Préprocesseur Traduction en langage machine Edition des liens Programme Exécutable

11 CINI – Li115 11 Structure minimale d'un programme (1) #include int main(){ CINI_print_string("Hello World"); CINI_newline(); return 0; } ● Ce programme source, une fois transformé en programme exécutable, affiche la chaîne de caractères « Hello World » à l'écran et passe à la ligne (ajout d'un retour à la ligne). Inclusion de bibliothèques Instructions du programme

12 CINI – Li115 12 Structure d'un programme (2) ● Exécution dans Geany Compiler Exécuter Debugger

13 CINI – Li115 13 Structure minimale d'un programme (3) ● Pour l'UE LI115, toujours commencer le programme source par : ● #include ● Tout programme source C doit contenir une fonction « main » qui sera appelée lors de l'exécution du programme ● int main(){ ● } ● Instructions : ● La fonction « main » contient des instructions qui sont exécutées séquentiellement (une par une). ● Pour l'UE LI115, la fonction « main » se termine toujours par l'instruction : ● return 0;

14 CINI – Li115 14 Types et expressions (1) ● Les données manipulées en C sont typées. ● Pourquoi typer les données ? ● Connaître l'occupation mémoire de chaque donnée et les opérations possibles sur la donnée. ● Types de base en C (pour l'UE LI115) : ● Entiers : int ● Décimaux : float ● Booléens (true ou false) : bool ● Caractères : char ● Etendue des données : ● int →-2 147 483 648 à 2 147 483 647 ● float →- 3.4*10 -3 8 à 3.4*10 3 8 ● char →table ASCII (128 caractères)

15 CINI – Li115 15 Types et expressions (2) ● Opérations arithmétiques (sur les entiers et flottants) : ● Attention : Avant d'écrire une expression contenant une division ● 1- Vérifier le type de retour de la division. Si les données de la division sont représentées par des entiers, le résultat retourné sera celui de la division entière. – Par exemple : 3 / 2 retourne 1 et non 1.5 ● 2- Vérifier que le diviseur sera toujours différent de 0.

16 CINI – Li115 16 Types et expressions (3) ● Opérateurs arithmétiques de comparaison : ● Opérations booléennes :

17 CINI – Li115 17 Types et expressions (4) ● Les caractères : ● Pour spécifier un caractère, on l'entoure du symbole « ' » : – 'c' → le caractère c ● En C, les caractères sont considérés comme des entiers. – L'entier correspondant à un caractère est sa valeur pour le code ASCII. Dans ce code, tout caractère a une valeur entière dans l'intervalle [0, 127] – Par exemple : ● 'a' → 97'b' → 98'A' → 65 – Les lettres de l'alphabet sont rangées dans l'ordre ● → Les opérateurs arithmétiques peuvent être appliqués sur les caractères : – 'a' + 'b''z' – 'a''a' – 1 – 'a' + 1 → vaut 'b' (98)'F' – 2 → vaut 'D'

18 CINI – Li115 18 Types et expressions (5) ● Les chaînes de caractères : ● Plusieurs caractères → une chaîne de caractères ● Dans l'UE LI115, nous utiliserons le type string qui correspond aux chaînes de caractères. ● En C, une chaîne de caractères est entourée de guillemets : – "Bonjour" – "Le C c'est super" ● Attention : ● Dans l'UE LI115, les chaînes de caractères seront seulement utilisées dans les appels de fonctions. ● Dans l'UE LI115 (en raison de la bibliothèque cini.h), les chaînes de caractères sont limitées à 29 caractères. ● → Nous verrons plus tard comment sont réellement manipulées les chaînes de caractères en C

19 CINI – Li115 19 Variables (1) ● Une variable correspond à un emplacement dans la mémoire de l'ordinateur, représenté par un symbole (le nom de la variable). ● La valeur d'une variable correspond à la valeur stockée à cet emplacement. ● Toute variable possède un type permettant de déterminer la taille de l'emplacement mémoire nécessaire pour stocker la valeur. char → 1 octet (8 bits) ● int → 2 ou 4 octets ● float → 4 octets x int c cha r a float

20 CINI – Li115 20 Variables (2) ● Déclaration d'une variable : ● type nom_variable ; ● int a ; → déclare une variable de nom a et de type entier ● char c ; → déclare une variable de nom c et de type entier ● float x ; → déclare une variable de nom x et de type flottant ● bool v;→ déclare une variable de nom v et de type booléen ● Dans l'UE LI115, pas de déclaration de variables de type string. ● Nom d'une variable : ● Chaîne de caractères alphanumériques qui commence par une lettre ou le caractère '_'. ● Sensible à la casse (majuscules et minuscules diffèrent). ● Ne pas utiliser des mots réservés du langage.

21 CINI – Li115 21 Variables (3) ● Déclarations multiples de variables de même type : ● type nom_variable_1,..., nom_variable_n ; ● int a, b ; ● char c1, c2 ; ● ● float x, int a ; → NON ● float x; int a; → OUI

22 CINI – Li115 22 Variables (4) ● Attention : la déclaration d'une variable ne stocke aucune valeur dans l'emplacement mémoire ● int a ; ● Il faut donc affecter une valeur à la variable (initialiser la valeur de la variable) ● Affectation d'une valeur à une variable : nom_variable = expression ; ● La valeur affectée à la variable doit correspondre à son type. ● int a ; → déclaration ● a = 21; → affectation a int

23 CINI – Li115 23 Variables (5) ● char c ; ● c = 't' ; ● float x ; ● x = 7.2 ; ● int a, b, c ; ● a = 8/4 ; ● b = a; ● c = a + 1; ● c cha r x float a int b c

24 CINI – Li115 24 Variables (6) En C, un caractère est un entier positif : char c ; c = 65 ; → c aura pour valeur 'A' Les types numériques sont convertis sans erreur de compilation : ● int a ; ● a = 12.7 ; → a aura pour valeur 12 ● float f; ● f = 12 ;→ f aura pour valeur 12.0 ● float f = 12.4 ; int a = f ;→ a aura pour valeur 12

25 CINI – Li115 25 Variables (7) Déclaration et affectation : type nom_variable = expression ; int a = 12 ; char c = 't'; int x = 13, y = 16; bool b1 = true; bool b2 = false;

26 CINI – Li115 26 Variables (8) ● #include ● int main(){ ● a = 21; ● /* … affichage d'un résultat … */ ● return 0; ● } Attention : ● 1- Il faut toujours déclarer une variable avant de lui affecter une valeur. 2- Il faut toujours affecter une valeur à une variable avant de l'utiliser. 3- Toutes les variables utilisées dans la fonction « main » doivent être déclarées au début de celle-ci. → Erreur à la compilation : « erreur : 'a' undeclared » Erreurs classiques :

27 CINI – Li115 27 Variables (9) ● #include ● int main(){ ● int a; ● a = a+2; ● /* … */ ● return 0; ● } → Avertissement à la compilation : « attention : 'a' is used uninitialized in this function » ● #include ● int main(){ ● int a = 2; ● a = a+1; ● int b = 3; ● /* … */ ● return 0; ● } → la variable b doit être déclarée au début de la fonction « main » (pas de message d'erreur à la compilation) Erreurs classiques (suite) :

28 CINI – Li115 28 ● #include ● int main(){ ● int a, b; ● a = 2; ● b = 3; ● /* … affichage du résultat … */ ● return 0; ● } Variables (10) → OK Code correct :

29 CINI – Li115 29 Fonctions (1) ● Fonctions et bibliothèques : ● En C, on peut utiliser des fonctions définies dans des bibliothèques. ● Il existe un grand nombre de bibliothèques prédéfinies en C. ● Ces bibliothèques portent l'extension «.h ». ● Par exemple : ● Il existe des bibliothèques pour: - les fonctions mathématiques, ● - les fonctions permettant d'afficher des données à l'écran, ● - les fonctions permettant de saisir des données au clavier, ● - les fonctions pour les affichages graphiques, ● etc.

30 CINI – Li115 30 Fonctions (2) ● Signature d'une fonction : – type nom_de_la_fonction(type1 param1,...); ● Appel de fonctions : ● Pour utiliser une fonction, il faut inclure la bibliothèque dans laquelle elle est définie. ● Un appel de fonction a la forme suivante : – nom_de_la_fonction(param1,..., paramN); ● Si la fonction n'a pas de paramètre, la liste entre les parenthèses est vide : – nom_de_la_fonction() ; ● Si la fonction retourne un résultat, il peut être affecté à une variable : – var = nom_de_la_fonction(param1,..., paramN); Type du résultat, ou « void » si la fonction ne renvoie aucun résultat Chaque paramètre est caractérisé par son type et son nom

31 CINI – Li115 31 Fonctions (3) ● Signatures des fonctions d'affichage (sortie) : ● void CINI_newline(); ● void CINI_print_bool(bool b); ● void CINI_print_int(int n); ● void CINI_print_float(float f); ● void CINI_print_string(string s); ● void CINI_print_char(char c); ● Signatures des fonctions de saisie au clavier (entrée) : ● int CINI_read_int(); ● float CINI_read_float(); ● char CINI_read_char();

32 CINI – Li115 32 Fonctions (4) ● Exemple d'utilisation des fonctions d'affichage : ● #include ● int main(){ ● int a; ● CINI_print_string("Saisir un nombre"); ● CINI_newline(); ● a = CINI_read_int(); ● CINI_print_string("Vous avez saisi "); ● CINI_print_int(a); ● CINI_newline(); ● return 0; ● }

33 CINI – Li115 33 Fonction (5) ● Exécution sous Geany :

34 CINI – Li115 34 Commentaires ● Il est indispensable d'ajouter des commentaires à votre code. ● Ces commentaires doivent décrire ce que fait votre programme. ● Les commentaires sont écrits entre /* et */ /* Auteur : Alain Dupont, Groupe 7 */ #include /* Permutation de 2 nombres */ int main(){ int a = 2; int b = 3; int temp; /* affichage de a et b avant la permutation */ CINI_print_int(a); CINI_newline(); CINI_print_int(b); CINI_newline(); /* permutation */ temp = a; a = b; b = temp; /* affichage de a et b après la permutation */ CINI_print_int(a); CINI_newline(); CINI_print_int(b); CINI_newline(); return 0; }

35 CINI – Li115 35 L'outil debug de Geany

36 CINI – Li115 36 L'outil debug de Geany

37 CINI – Li115 37 L'outil debug de Geany

38 CINI – Li115 38 Bonnes pratiques ● Toujours commenter le code source. ● Indenter correctement le code source. ● Sauvegarder le code source dans un fichier ayant l'extension «.c ». ● Utiliser des noms de variables et de fonctions significatifs. ● Tester le code source au fur et à mesure de l'écriture (ne pas attendre d'avoir des dizaines de lignes de code pour vérifier que la compilation s'effectue correctement). ● Sauvegarder régulièrement son code source.

39 CINI – Li115 39 ● Fonction de débogage : ● void CINI_was_here(); ● Chaque fois que la fonction CINI_was_here est appelée, elle affiche la ligne et la fonction dans laquelle elle est appelée. ● Exemple : Fonctions (6) 1#include ● 2int main(){ ● 3int a = 2; ● 4CINI_was_here(); ● 5CINI_print_int(a); ● 6CINI_newline(); ● 7return 0; ● 8} Debug : appel à partir de la ligne 4, exDebug.c (fonction 'main').


Télécharger ppt "CINI – Li115 1 Introduction à la programmation impérative en langage C Module Li115 Semestre 2011fev Chargés de cours : Nicolas Sabouret Pierre Fouilhoux."

Présentations similaires


Annonces Google