# i n c l u d e < s t d i o. h> p r i n t f ( " h e l l o, world \ n " ) ;

Documents pareils
Le langage C. Séance n 4

Introduction au langage C

Chapitre 1 : La gestion dynamique de la mémoire

Les structures. Chapitre 3

Programmation impérative

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

Les chaînes de caractères

Chap III : Les tableaux

Programmation système I Les entrées/sorties

Rappels Entrées -Sorties

Algorithmique et Programmation, IMA

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

Conventions d écriture et outils de mise au point

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

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


PROJET ALGORITHMIQUE ET PROGRAMMATION II

Unix/Linux I. 1 ere année DUT. Université marne la vallée

UE Programmation Impérative Licence 2ème Année

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

INF 104 (SELC) Introduction au langage C

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

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

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

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

Premiers Pas en Programmation Objet : les Classes et les Objets

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Logiciel de base. Première année ENSIMAG

INITIATION A LA PROGRAMMATION

TP : Gestion d une image au format PGM

LECON 2 : PROPRIETES DE L'AFFICHAGE Version aout 2011

CAPTURE DES PROFESSIONNELS

Quelques éléments de compilation en C et makefiles

Programmation C. Apprendre à développer des programmes simples dans le langage C

Anis ASSÈS Mejdi BLAGHGI Mohamed Hédi ElHajjej Mohamed Salah Karouia

Programmation en langage C

Langage Éric Guérin 5 octobre 2010

NIMEGUE V3. Fiche technique 3.07 : Sauvegarde / Restauration manuelle

NETWORK & SOFTWARE ENGINEERING MANUEL D UTILISATEUR. Logiciel TIJARA. NETWORK AND SOFTWARE ENGINEERING Manuel d'utilisateur "TIJARA" 1

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

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

Initiation. àl algorithmique et à la programmation. en C

TP, première séquence d exercices.

Support de Cours de Langage C. Christian Bac

SUPPORT DE COURS. Langage C

Les débordements de tampons et les vulnérabilités de chaîne de format 1

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

AIDE à l utilisation du cédérom «L athlétisme à l école» Niveau Primaire SOMMAIRE

Programmation système en C/C++

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

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

Travaux Dirigés n 1 : chaînes de caractères

Programmation système de commandes en C

Mise à jour d avast! et de vos logiciels Ciel

Avertissement : Nos logiciels évoluent rendant parfois les nouvelles versions incompatibles avec les anciennes.

USTL - Licence ST-A 1ère année Codage de l information TP 1 :

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

BTS IRIS Cours et Travaux Pratiques. Programmation C. A. Lebret, TSIRIS, Lycée Diderot, 1995/06. en conformité avec le référentiel du BTS IRIS

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Structure d un programme

Algorithmique & Langage C IUT GEII S1. Notes de cours (première partie) cours_algo_lgc1.17.odp. Licence

Outils pour la pratique

Menu Fédérateur. Procédure de réinstallation du logiciel EIC Menu Fédérateur d un ancien poste vers un nouveau poste

Logiciel libre, OpenMeetings permet de créer ou simplement de participer à des conférences en ligne.

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

PRESENTATION RESSOURCES. Christian Dupaty BTS Systèmes Numériques Lycée Fourcade Gardanne Académie d Aix Marseille

La mémoire. Un ordinateur. L'octet. Le bit

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Restauration d AdmiCash sur un nouveau PC ou système d exploitation

Système clients serveur Kwartz Vulgarisation, identification, dossier personnel

COMPARAISONDESLANGAGESC, C++, JAVA ET

Les fichiers. Chapitre 4

TP1 : Initiation à Java et Eclipse

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

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)

ENVOI EN NOMBRE DE MESSAGES AUDIO

En date du 11 décembre 2008

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

TP1 - Prise en main de l environnement Unix.

Access et Org.Base : mêmes objectifs? Description du thème : Création de grilles d écran pour une école de conduite.

Le langage C. Introduction, guide de reference

Le prototype de la fonction main()

Glossaire des nombres

IFT3902 : (Gestion de projet pour le) développement, (et la) maintenance des logiciels

1) Installation de Dev-C++ Téléchargez le fichier devcpp4990setup.exe dans un répertoire de votre PC, puis double-cliquez dessus :

TP Contraintes - Triggers

Fonction Memory Viewer

ENVOI EN NOMBRE DE SMS

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

Chaque ordinateur est constitué de différentes unités de stockage de données (Disque dur, Graveur ) que l on peut imaginer comme de grandes armoires.

PG208, Projet n 3 : Serveur HTTP évolué

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Le système de gestion des fichiers, les entrées/sorties.

Tutoriel Création d une source Cydia et compilation des packages sous Linux

AUVRAY Clément (168187) HOMBERGER Alexandre (186897) GLADE. Langages, outils et méthodes pour la programmation avancée Page 1 sur 12

Claude Delannoy. 3 e édition C++

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

Tp 1 correction. Structures de données (IF2)

Transcription:

O r s a y Travaux Pratiques n o 1 : Rappels de Programmation C DUT Informatique 2010 / 2011 Nom(s) : Groupe : Date : Objectifs : renouer avec les notions, la manipulation et l écriture de programmes C, en particulier le travail avec les pointeurs, l utilisation de structures et de formats. 1 Note technique L intégralité des TPs de Système S4 sera réalisée en environnement Unix : redémarrez si nécessaire votre ordinateur sous Linux. Que vous soyez en salle standard ou en salle réseau, prenez garde à sauvegarder comme il convient vos fichiers, dans votre répertoire personnel pour les salles standard ou sur une clé USB dans les salles réseau où les fichiers sont effacés chaque jour. Pensez le moment venu à éjecter correctement votre clé USB depuis le système avant de la débrancher si vous l utilisez (clic droit sur l icône correspondant sur le bureau et «Éjecter»). 2 Hello world Voici un exemple minimal de programme C qui affiche la chaîne de caractères hello, world (cet exemple célébrissime repris dans tous les langages a d ailleurs été fait à l origine en C en 1978 par les créateurs du langage, Brian Kernighan et Dennis Ritchie). p r i n t f ( " h e l l o, world \ n " ) ; 3 Compilation Vous devrez utiliser un éditeur pour créer vos fichiers sources, ceux-ci auront l extension.c pour les fichiers contenant votre code C (et non.c en majuscule ou.cpp comme en C++) ou.h dans le cas des fichiers de headers. Pour compiler vos fichiers sources (par exemple exo.c) et créer un fichier exécutable (par exemple exo), ouvrez un terminal, placez-vous dans le répertoire dans lequel vous avez enregistré votre fichier et utilisez la commande suivante : gcc exo.c -o exo

Travaux Pratiques n o 1 Rappels de Programmation C 2/6 Vous pourrez alors lancer l exécution de votre programme en utilisant la commande :./exo Créez un fichier hello.c contenant le code en section 2, compilez-le et exécutez-le. 4 Sorties en C Le langage C ne dispose pas du flot de sortie cout bien connu en C++. À sa place, on utilise une fonction spécifique nommée printf (cette fonction est aussi bien connue en PHP). L instruction p r i n t f ( " La moyenne des %d e n t i e r s e s t %f. \ n ", i, moyenne ) ; affiche sur la sortie standard (l écran) la chaîne de caractères comprise entre les guillements (appelée un format) mais où %d a été remplacé par la valeur de la variable entière i, %f a été remplacé par la valeur de la variable réelle moyenne et \n n a pas été affiché mais un retour à la ligne a été effectué. %d et %f sont appellés des codes. Ils définissent précisément la manière dont une variable d un certain type doit être affichée. Le ième code est destiné au ième paramètre après la chaîne de caractères. La carte de référence vous donne plus de détails sur les codes. Le caractère spécial \n désigne le retour à la ligne. Reprennez hello.c pour tester différents formats à l aide de la fiche de référence. Que se passe-t-il s il y a trop de codes pour pas assez de paramètres? Et inversement? Que se passe-t-il si on applique un code d un type pour un paramètre d un autre type? 5 Pointeurs Ce qui fait aujourd hui de C (et aussi de C++) le langage préféré de la performance (jeux vidéos, applications embarquées multimédia, systèmes d exploitation, calcul scientifique etc.) est qu il permet à l utilisateur de gérer lui-même la mémoire. On peut accèder directement à des zones de la mémoire par l intermédiaire de leurs adresses. Pour connaître l adresse d une variable, on peut utiliser l opérateur «&», par exemple si num est une variable de type entier, alors &num est l adresse mémoire à laquelle se trouve cette variable. Pour connaître la taille en octets de la zone mémoire allouée à une variable, on peut utiliser l opérateur sizeof, par exemple la place occupée par num est donnée par sizeof(num) ou encore sizeof(int). On appelle les variables qui contiennent les adresses des pointeurs (utiles par exemple pour stocker &num). On déclare un pointeur en ajoutant le caractère étoile «*» avant le nom de la variable. Par exemple l instruction suivante : i n t p t r ; déclare une variable nommée ptr destinée à contenir l adresse de début d une zone de mémoire contenant un entier. On dit que ptr est un pointeur sur entier. Dans le reste du programme, on

Travaux Pratiques n o 1 Rappels de Programmation C 3/6 utilisera ptr pour désigner l adresse d un entier (par exemple ptr aurait pour valeur l adresse de num si on effectuait l affectation ptr = &num;), et *ptr pour désigner l entier qui se trouve à cette adresse (par exemple pour changer la valeur de num, on pourrait exécuter *ptr = 2;). Soit le code suivant : double v a l e u r, pv ; i n t nombre, pn ; v a l e u r = 1 0 ; pv = &v a l e u r ; v a l e u r = pv + 1 ; p r i n t f ( " v a l e u r = %f \ n ", v a l e u r ) ; p r i n t f ( "&v a l e u r = %p \ n ",& v a l e u r ) ; Que représente valeur? Qu affiche le premier printf? Que représente &valeur? Qu affiche le second printf? Que représente &pv? Que représente pv? Que représente *pv? Quelle est la taille de la zone mémoire réservée pour valeur? Pour pv? Pour nombre? Pour pn? Pourquoi, alors que les tailles sont différentes pour valeur et nombre, les tailles sont identiques pour pv et pn?

Travaux Pratiques n o 1 Rappels de Programmation C 4/6 En C comme en C++, absolument tous les paramètres des fonctions sont des copies des arguments passés lors des appels à ces fonctions. Cela signifie que l on ne travaille jamais directement sur les éléments passés lors de l appel, mais avec d autres variables qui contiennent, par contre, exactement les mêmes valeurs que les originales. Soit le programme suivant : void echange1 ( f l o a t a, f l o a t b ) { f l o a t temp ; temp = a ; a = b ; b = temp ; f l o a t p i =2.71828, e = 3. 1 4 1 5 9 ; p r i n t f ( " Avant echange : p i = %f, e = %f. \ n ", pi, e ) ; echange1 ( pi, e ) ; p r i n t f ( " Apres echange1 : p i = %f, e = %f. \ n ", pi, e ) ; Qu affiche ce programme? Expliquez. Écrivez une nouvelle fonction echange2 qui réalisera effectivement l échange des valeurs grâce à des pointeurs. Par ailleurs, vous ferez en sorte que les valeurs ne s affichent qu avec deux décimales. Vous joindrez le code complet commenté avec un exemple d exécution à votre compte rendu. 6 Types structurés Le langage C permet avec les structures de désigner sous un seul nom un ensemble de valeurs pouvant être de types différents (les tableaux sont souvent suffisants pour les ensembles de valeurs d un même type). Les constituants de la structure sont appelés des champs. Par exemple un produit dans un magasin peut être défini par son numéro (de type entier), son prix (de type réel) et son poids (de type réel). On définira alors ce type de la manière suivante : s t r u c t p r o d u i t { i n t numero ; f l o a t p r i x ; f l o a t p o i d s ; ; Une fois le nouveau type défini, il devient possible d en déclarer des variables. La zone mémoire réservée pour ces variables est égale à la concaténation des zones mémoire nécessaires aux différents champs ; ces dernières sont rangées consécutivement, et dans le même ordre que celui de la définition (ici numero puis prix puis poids). L instruction suivante crée deux variables type struct produit, la seconde étant initialisée, et un pointeur sur produit : s t r u c t p r o d u i t l i v r e, pneu ={23456,94.99,26, p t r ;

Travaux Pratiques n o 1 Rappels de Programmation C 5/6 L accès à chaque élément de la structure se fera par son nom au sein de la structure grâce à l opérateur «.». Par exemple on accède au champ prix de la variable pneu par pneu.prix. Si dans l exemple précédent on a affecté l adresse de pneu à ptr par l instruction ptr = &pneu;, on pourra accéder classiquement au champ prix via ptr par (*ptr).prix, mais C offre aussi une notation plus pratique avec l opérateur -> qui s utilise ainsi : ptr->prix. Ajouter ce qu il faut à votre programme pour créer les variables livre, pneu et ptr. Testez les accès (lecture, écriture) aux différents membres. Comment afficher la valeur numero de livre? Comment afficher l adresse mémoire du champ poids de pneu? Quelle est la taille de la zone mémoire réservée à livre, à pneu, à ptr? 7 Chaînes de caractères Il n existe pas en C de véritable type chaîne de caractères comme c est le cas en C++ ou JAVA. À la place, on utilise généralement des tableaux de caractères, le dernier élément de la chaîne de caractères étant désigné par convention par le caractère spécial «\0». Les instructions suivantes présentent deux cas de déclaration et d initialisation identiques de chaînes de caractères : char c h a i n e 1 [ 2 0 ] = " coucou " ; char c h a i n e 2 [ 2 0 ] = { c, o, u, c, o, u, \ 0 ; Attention, si cela est accepté pour l initialisation, il n est pas permis quand on utilise des tableaux déclarés statiquement de réaliser ensuite dans le programme une opération telle que chaine1 = "aurevoir";. La bibliothèque standard du C propose de nombreuses fonctions utiles pour la manipulation des chaînes (voir la carte de référence et les pages de man pour plus d informations). Le programme ci-après évoque certaines des plus utiles : # i n c l u d e < s t r i n g. h> # d e f i n e TAILLE_MAX 100 char c h a i n e 1 [TAILLE_MAX] = " bonjour, ", c h a i n e 2 [TAILLE_MAX] ; p r i n t f ( "%s ( t a i l l e c h a i n e = %d ) \ n ", chaine1, s t r l e n ( c h a i n e 1 ) ) ; s t r c p y ( chaine2, c h a i n e 1 ) ; s t r c a t ( chaine2, " monde " ) ; p r i n t f ( "%s ( t a i l l e c h a i n e = %d ) \ n ", chaine2, s t r l e n ( c h a i n e 2 ) ) ; s p r i n t f ( chaine1, "%s mond%d ", chaine1, 3 ) ; p r i n t f ( "%s ( t a i l l e c h a i n e = %d ) \ n ", chaine1, s t r l e n ( c h a i n e 1 ) ) ;

Travaux Pratiques n o 1 Rappels de Programmation C 6/6 Écrivez, compilez et exécutez ce programme. Quel est le résultat? À quoi servent les fonctions strlen, srtcpy et strcat? Décrivez l utilisation de la fonction sprintf. 8 Entrées en C Le langage C ne dispose pas du flot d entrée cin bien connu en C++. À sa place, on utilise une fonction spécifique nommée scanf. L instruction s c a n f ( "%f %d ",&x,& i ) ; lit des informations sur l entrée standard (le clavier). Comme printf, scanf possède en premier argument un format exprimé sous la forme d une chaîne de caractères (ici "%f %d"). Les arguments suivants sont les adresses où il faudra «ranger» les informations lues. Cette instruction lira donc un flottant et un entier qu elle rangera respectivement dans les variables x et i. Pour les chaînes de caractères, l emploi de scanf et du code «%s» est peu pratique car le caractère espace est considéré comme un délimiteur (pas de chaînes avec des espaces). On préfèrera utiliser la fonction gets (appel gets(chaine1)) pour lire une chaîne et la placer dans chaine1) où seule la fin de ligne sert de délimiteur. Expérimentez diverses entrées avec scanf et gets. Commentaires personnels sur le TP (résultats attendus, difficultés, critiques etc.).