Introduction au C INF /2018

Documents pareils
1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Introduction au langage C

Le prototype de la fonction main()

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Conventions d écriture et outils de mise au point

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Java Licence Professionnelle CISII,

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples


Bases de programmation. Cours 5. Structurer les données

Programmation C++ (débutant)/instructions for, while et do...while

Programmation système I Les entrées/sorties

Cours d initiation à la programmation en C++ Johann Cuenin

Algorithmique et Programmation, IMA

Recherche dans un tableau

as Architecture des Systèmes d Information

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Programmation en langage C

Plan du cours. Historique du langage Nouveautés de Java 7

INITIATION A LA PROGRAMMATION

COMPARAISONDESLANGAGESC, C++, JAVA ET

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

OS Réseaux et Programmation Système - C5

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

3IS - Système d'exploitation linux - Programmation système

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

Cours d Algorithmique et de Langage C v 3.0

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Chapitre 1 : La gestion dynamique de la mémoire

Programmer en JAVA. par Tama

Programme Compte bancaire (code)

Principes des langages de programmation INF 321. Eric Goubault

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

UE C avancé cours 1: introduction et révisions

Claude Delannoy. 3 e édition C++

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Algorithmique, Structures de données et langage C

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Programmation système de commandes en C

COURS DE LANGAGE C. DIAO Oumar. Université de Rennes 1. Master 1

Assurance Qualité. Cours de génie logiciel. Renaud Marlet. LaBRI / INRIA (d'après A.-M. Hugues) màj 23/04/2007

Analyse de sécurité de logiciels système par typage statique

Programmation C. J.-F. Lalande. 15 novembre 2012

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Compression de Données - Algorithme de Huffman Document de Conception

Programmation Classique en langage C

Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail

I. Introduction aux fonctions : les fonctions standards

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Notions fondamentales du langage C# Version 1.0

Les structures de données. Rajae El Ouazzani

INF111. Initiation à la programmation impérative en C amini/cours/l1/inf111/ Massih-Reza Amini

Le langage C. Séance n 4

Arguments d un programme

Les arbres binaires de recherche

Exercices INF5171 : série #3 (Automne 2012)

Programmation en C. École Nationale Supérieure de Techniques Avancées. Pierre-Alain Fouque et David Pointcheval

Chap III : Les tableaux

Programmation système en C/C++

INF 104 (SELC) Introduction au langage C

Gestion de la mémoire

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Algorithmes et Programmes. Introduction à l informatiquel. Cycle de vie d'un programme (d'un logiciel) Cycle de vie d'un programme (d'un logiciel)

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

INF 321 : mémento de la syntaxe de Java

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Introduction à la programmation concurrente

Algorithmique I. Algorithmique I p.1/??

SUPPORT DE COURS. Langage C

Cours Langage C/C++ Programmation modulaire

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

Généralités sur le Langage Java et éléments syntaxiques.

Objets et Programmation. origine des langages orientés-objet

Java Licence Professionnelle CISII,

Cours Programmation Système

Exercice sur les Dockers

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Introduction à l algorithmique et à la programmation M1102 CM n 3

Notes du cours 4M056 Programmation en C et C++ Vincent Lemaire

Le langage C. Introduction, guide de reference

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Pensez à vous inscrire... si ce n est pas encore fait

INTRODUCTION À LA PROGRAMMATION PRATIQUE DU LANGAGE C. M. Le Gonidec

Support de Cours de Langage C. Christian Bac

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Outils pour la pratique

Programmation en Java IUT GEII (MC-II1) 1

Programmation en langage C Eléments de syntaxe

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Langage Éric Guérin 5 octobre 2010

Transcription:

Introduction au C INF304 2017/2018

1 Programmation en C 2 Structure d'un programme 3 Types 4 Pointeurs et allocation dynamique 5 Structures de contrôle 6 Références

1 Programmation en C 2 Structure d'un programme 3 Types 4 Pointeurs et allocation dynamique 5 Structures de contrôle 6 Références

Cycle de développement de programmes C Édition emacs <nom du programme>.c Source <nom du programme>.c Compilation gcc <nom du programme>.c -o <nom du programme> Exécutable <nom du programme> Exécution./<nom du programme>

Test de programmes Que faire une fois le programme écrit? rentrer chez soi?

Test de programmes Que faire une fois le programme écrit? rentrer chez soi? tester le programme : comment?

Test de programmes Que faire une fois le programme écrit? rentrer chez soi? tester le programme : sur un jeu d'essais : ensemble de tests, un test = une entrée possible pour le programme

Test de programmes Que faire une fois le programme écrit? rentrer chez soi? tester le programme : sur un jeu d'essais : ensemble de tests, un test = une entrée possible pour le programme pas de test à la main! Les tests doivent être enregistrés dans un ou des chiers, organisés et commentés. Penser à la redirection d'entrée.

Test de programmes Que faire une fois le programme écrit? rentrer chez soi? tester le programme : sur un jeu d'essais : ensemble de tests, un test = une entrée possible pour le programme pas de test à la main! Les tests doivent être enregistrés dans un ou des chiers, organisés et commentés. Penser à la redirection d'entrée. couverture : penser au maximum de cas possibles

Test de programmes Que faire une fois le programme écrit? rentrer chez soi? tester le programme : sur un jeu d'essais : ensemble de tests, un test = une entrée possible pour le programme pas de test à la main! Les tests doivent être enregistrés dans un ou des chiers, organisés et commentés. Penser à la redirection d'entrée. couverture : penser au maximum de cas possibles débogage (propriétés fonctionnelles) : recherche, identication et correction des erreurs instrumentation : pour l'automatisation du test, pour l'identication

Test de programmes Que faire une fois le programme écrit? rentrer chez soi? tester le programme : sur un jeu d'essais : ensemble de tests, un test = une entrée possible pour le programme pas de test à la main! Les tests doivent être enregistrés dans un ou des chiers, organisés et commentés. Penser à la redirection d'entrée. couverture : penser au maximum de cas possibles débogage (propriétés fonctionnelles) : recherche, identication et correction des erreurs instrumentation : pour l'automatisation du test, pour l'identication évaluation (propriétés non fonctionnelles) : coût eectif en temps et en mémoire, réactivité, bande passante utilisée, etc. instrumentation pour les mesures de coût

1 Programmation en C 2 Structure d'un programme 3 Types 4 Pointeurs et allocation dynamique 5 Structures de contrôle 6 Références

Structure d'une fonction C type de retour arguments int nom_fonction (int n, float x) { int temp; int my_var = 42; temp = n + my_var; if (x > 0) { return temp + x; } else { return temp - x; } Déclarations locales instructions }

Fonction principale Un programme, pour être compilé en un exécutable, doit comporter une fonction main de prol : int main(int argc, char ** argv) {... } Fonction exécutée au lancement du programme argc : nombre d'arguments de la ligne de commande (nom du programme inclus) argv : tableau de chaînes de caractères argv[i] : i e argument de la ligne de commande argv[0] : nom du programme exécuté

1 Programmation en C 2 Structure d'un programme 3 Types 4 Pointeurs et allocation dynamique 5 Structures de contrôle 6 Références

Qu'est-ce qu'un type?

Qu'est-ce qu'un type? Abstraction d'une représentation machine : 25 plutôt que 00000000000000000000000000011001 Ensemble de valeurs possibles : entiers, entiers naturels, entiers positifs, ottants dans un intervalle borné... Sémantique (sens) donnée à cet ensemble, fournit et restreint les opérations possibles sur les valeurs de cet ensemble Selon le langage de programmation, le typage peut être plus ou moins contraignant, statique (à la compilation) ou dynamique (à l'exécution) En C : typage statique.

Les types de base en C int : entier signé (sur 32 bits, entiers dans l'intervalle [ 2 31, 2 31 1]). float : nombres ottants (représentation machine des nombres réels). char : caractères codés sur 8 bits.

Les tableaux Un tableau est groupe d'éléments du même type. La taille d'un tableau est xe : lorsqu'on déclare un tableau, il faut obligatoirement donner sa taille. Déclaration d'un tableau Telem Tab[N]; Tab est un tableau d'éléments de type Telem dont les indices varient de 0 à N 1. Les indices sont de type int. Accéder à un élément d'un tableau Tab[i] = x; x = Tab[i]; Attention : si i n'appartient pas à l'intervalle [0, N 1], le comportement n'est pas déni! (arrêt du programme avec le message segmentation fault, ou accès à une zone mémoire en-dehors du tableau erreurs diciles à analyser)

Types énumérés Un type énuméré permet de dénir un ensemble de valeurs par extension (i.e., en donnant la liste des valeurs de l'ensemble). Déclaration d'un type énuméré Couleur, comportant les valeurs Rouge, Jaune, Vert : typedef enum {Rouge, Jaune, Vert} Couleur; Couleur ma_couleur = Rouge;

Structures Les types structures permettent de rassembler plusieurs valeurs de types (éventuellement) diérents. Déclaration d'un type structure couple contenant les champs x (de type T1 et y (de type T2) : typedef struct { T1 x; T2 y; } couple; Déclaration d'une variable de type couple : couple c; Accès aux valeurs des champs : c.x, c.y.

1 Programmation en C 2 Structure d'un programme 3 Types 4 Pointeurs et allocation dynamique 5 Structures de contrôle 6 Références

Vocabulaire si T est un type, le type T est appelé type pointeur de T. Une valeur de type T est un pointeur, pointant sur une valeur de type T. si x est de type T, &x est l'adresse de x et est une valeur de type T. Cette valeur peut être aectée à un pointeur de T. si p est de type T, alors la valeur pointée par p est p, de type T. p est appelé le déréférencement de p. On représente de la manière suivante un pointeur p sur une valeur x : p x

Exemple Une variable de type int * peut pointer sur une variable de type int, à l'aide de l'opérateur & : int x; int * px; int * py; x = 1; px = &x; py = &x; px py x

Pointeurs et structures récursives Pour la déclaration de types mutuellement récursifs (contenant des pointeurs vers ces types, pour les listes chaînées par exemple), on peut donner un nom à la structure récursive : // Type cellule pour liste chaînée d'entiers typedef struct s_cellule { int element; // élément courant struct s_cellule * suivant; // pointeur vers la cellule suivante } Cellule; // Une liste est un pointeur vers la cellule de tête typedef Cellule * Liste;

Allocation mémoire Allocation à l'aide de la fonction malloc Paramètre de malloc : taille de la zone mémoire à allouer (utiliser la fonction sizeof(type)) Valeur de retour : l'adresse mémoire dynamique allouée px = (int *)malloc(sizeof(int)); px Une zone mémoire contenant un entier est créée, mais non dénie (comme pour une déclaration). Contrairement aux déclarations locales, cette zone mémoire existe encore à la sortie du bloc courant. Elle existe jusqu'à sa libération.

Accès à la valeur pointée *px = 42; px 42 Ne pas confondre *py = *px; px 42 py 42 et py = px; px 42 py

Libération de la mémoire Libérer un bloc mémoire = le rendre au système, faire en sorte que la zone mémoire puisse à nouveau être utilisée (à l'occasion d'une nouvelle demande d'allocation). Tout bloc mémoire alloué (avec malloc ou équivalent) doit être libéré! attention aux fuites mémoires : mémoire allouée et jamais libérée... Si p est un pointeur, free(p) libère la zone mémoire pointée par p. La valeur de p doit être une valeur retournée par une primitive d'allocation mémoire : il n'est pas possible de libérer une partie seulement d'un bloc alloué (la moitié d'un tableau par exemple). Attention : après libération, les valeurs contenues dans une zone mémoire ne doivent plus être accédées (sinon, arrêt du programme avec l'erreur segmentation fault)

Pointeurs et paramètres résultats Les paramètres des fonctions C sont passés par valeur (la valeur est transmise à la fonction et non la référence). Pour qu'une fonction puisse modier un paramètre, il faut fournir l'adresse de la valeur à modier, c'est-à-dire un pointeur sur cette valeur : void echanger(int * x, int * y) { int aux; aux = *x; *x = *y; *y = aux; } int a = 42; int b = 3; echanger(&a, &b);

1 Programmation en C 2 Structure d'un programme 3 Types 4 Pointeurs et allocation dynamique 5 Structures de contrôle 6 Références

si/alors/sinon if (condition) { <instructions> } else if (condition2) { <instructions>... } else { <instructions> } Exemple if (x < y) { printf("x est plus petit que y"); } else { printf("x est plus grand que y"); }

Switch/case Exemple switch (x) { case 0: printf("x est nul"); break; case 1: printf("x vaut 1"); break; default: printf("x vaut autre chose que 0 ou 1"); }

Boucle tant que (while) while (condition) { <instructions> } Les instructions sont exécutées tant que la condition (booléenne) est vraie Exemple int tab[n]; int i = 0; while (i < N) { tab[i] = f(i); i = i + 1; }

Boucle pour (for) for (<initialisation>, <condition>, <mise à jour>) { <instructions> } <initialisation>; while (<condition>) { <instructions> <mise à jour>; } équivalent à : Exemple int tab[n]; int i; for (i = 0; i < N; i++) { tab[i] = f(i); }

1 Programmation en C 2 Structure d'un programme 3 Types 4 Pointeurs et allocation dynamique 5 Structures de contrôle 6 Références

Références The GNU C Reference Manual. https://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html C Programming. Wikibooks, The Free Textbook Project. http://en.wikibooks.org/wiki/c_programming