Programmation C Exercices au kilomètre

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

Conventions d écriture et outils de mise au point

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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)

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

Java Licence Professionnelle CISII,

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

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

Les arbres binaires de recherche

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

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

Algorithmique et Programmation, IMA

Corrigé des TD 1 à 5

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

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

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

Claude Delannoy. 3 e édition C++

Licence Sciences et Technologies Examen janvier 2010

TD3: tableaux avancées, première classe et chaînes

Programmation en langage C

Notions fondamentales du langage C# Version 1.0

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Programmer en JAVA. par Tama

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

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

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

Programme Compte bancaire (code)

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

INF 321 : mémento de la syntaxe de Java

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

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Architecture des ordinateurs

Les structures de données. Rajae El Ouazzani

TP : Gestion d une image au format PGM

Cours de Systèmes d Exploitation

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

V- Manipulations de nombres en binaire

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

I. Introduction aux fonctions : les fonctions standards

Cours d Algorithmique et de Langage C v 3.0

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

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

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

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

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

Algorithmique et programmation : les bases (VBA) Corrigé

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

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

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

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

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

STAGE IREM 0- Premiers pas en Python

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

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

INITIATION A LA PROGRAMMATION

Architecture des ordinateurs

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

Initiation à la programmation en Python

Langage Éric Guérin 5 octobre 2010

1 Recherche en table par balayage

Représentation d un entier en base b

Programmation Classique en langage C

Introduction à MATLAB R

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

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

Chap III : Les tableaux

Premiers Pas en Programmation Objet : les Classes et les Objets

as Architecture des Systèmes d Information

Le langage C. Séance n 4

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

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

Recherche dans un tableau

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

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

SUPPORT DE COURS. Langage C

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

TP, première séquence d exercices.

REPUBLIQUE ALGERIENNE DEMOCRATIQUE ET POPULAIRE UNIVERSITE M HAMED BOGARA DE BOUMERDES

Programmation en Java IUT GEII (MC-II1) 1

Examen Médian - 1 heure 30

Méthodes de programmation systèmes UE n NSY103. Notes de cours. Nombre d'heures : 55h (~ cours de 3 heures)

Java Licence Professionnelle CISII,

COMPARAISONDESLANGAGESC, C++, JAVA ET

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

Le prototype de la fonction main()

Arithmétique binaire. Chapitre. 5.1 Notions Bit Mot

TD/TP PAC - Programmation n 3

Cours Programmation Système

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

Programmation système I Les entrées/sorties

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

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

Algorithmique, Structures de données et langage C

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

Solutions du chapitre 4

Qualité du logiciel: Méthodes de test

Résolution de systèmes linéaires par des méthodes directes

Transcription:

Programmation C Université de Marne la Vallée ESIPE Informatique et Réseaux 1 ère année Informatique et Géomatique 1 ère année Programmation C Exercices au kilomètre Voici quelques exercices au kilomètre pour les plus assoifés... Exercice 1 Analyse d une fonction itérative Dire ce que fait le programme suivant. Indiquer l état de chacune des variables au fil de l exécution. 3 void f ( i n t tab, i n t n1, i n t n ) { 4 i n t i ; 5 n1 = n1 1 ; 6 for ( i = 0 ; i < n1 ; i ++) 7 p r i n t f ( "%d ", tab [ i ] ) ; 8 n = n / ; 9 tab [ 0 ] = tab [ n ] ; 10 } 11 1 i n t main ( ) { 13 i n t t [ ] = { 0, 1, 1,, 3, 5, 8, 13, 1, 3 4 } ; 14 i n t a = 10, b = 1 0 ; 15 f ( t, a, &b ) ; 16 p r i n t f ( " \ n" ) ; 17 f ( t, b, &b ) ; 18 p r i n t f ( " \ n" ) ; 19 return 0 ; 0 } Exercice Analyse d une fonction récursive Donner la sortie produite par le programme suivant. 3 void f ( n ) { 4 i f ( n > 0) { 5 p r i n t f ( "%d ", n ) ; 6 f ( n 1 ) ; 7 p r i n t f ( "%d ", n ) ; 8 } 9 } 10 11 i n t main ( ) { 1 f ( 5 ) ;

13 return 0 ; 14 } Exercice 3 Petits programmes entre amis 1. Écrire un programme qui affiche un menu de la forme 1. + 3. *. - 4. / et qui permet de choisir l une de ces quatre opérations arithmétiques. Le programme accepte ensuite deux nombres entiers en entrée et affiche le résultat suivant l opération choisie. Si la division est choisie, le programme affiche le quotient et le reste. Veiller à ce que les entrées soient cohérentes (gestion du dépassement de capacité, division par zéro, etc.) et à informer l utilisateur dans le cas contraire.. Écrire un programme qui affiche le capital obtenu en plaçant une somme s au taux t pendant n années. 3. Écrire un programme qui admet en entrée deux nombres a et c tels que a c et qui affiche pour chaque entier b vérifiant a b c une ligne de la forme b F -> b C où b est la valeur en degrés Celsius correspondant à b exprimé en degrés Fahrenheit. Rappel : Celsius = 5 9 (Fahrenheit 3). 4. Écrire un programme qui affiche, pour tous les caractères c une ligne où a est le code ASCII de c. c -> a Exercice 4 Petites fonctions entre amis 1. Écrire une fonction 1 void resoudre ( f l o a t a, f l o a t b, f l o a t c, f l o a t s1, f l o a t s ) ; qui calcule les solutions de l équation ax + bx + c = 0 où a, b et c sont des flottants. Donner la raison pour laquelle les paramètres s1 et s sont des pointeurs. Intégrer la fonction dans un programme.. Écrire une fonction 1 i n t compter_1 ( i n t n ) ; qui compte le nombre de bits égaux à 1 dans la représentation binaire de n. Utiliser les opérateurs & et». Intégrer la fonction dans un programme. 3. Écrire une fonction 1 void a f f i c h e r _ b i n a i r e ( i n t n ) ;

qui affiche les 3 bits de la représentation binaire de l entier n. Intégrer la fonction dans un programme. Exercice 5 Débogage conditionnel 1. La macro assert, définie dans l en-tête assert.h, sert à vérifier si les arguments d une fonction respectent certains pré-requis. Par exemple, 1 double d i v i s i o n ( double x, double y ) { a s s e r t ( y!= 0 ) ; 3 return x / y ; 4 } permet de stopper l exécution du programme si l argument y vaut 0. L intérêt d un tel procédé réside dans le fait que lorsque la condition testée par le assert est fausse, l endroit du code qui a provoqué l erreur peut être connu et le débogage du programme est ainsi facilité. Il existe cependant un problème : dans certains cas, les assert testent des conditions gourmandes en temps. Il est ainsi souvent préférable de pouvoir les désactiver pour gagner en efficacité. Définir une macro ASSERT qui, lorsqu elle est utilisée à la place de assert, peut être désactivée. Pour cela, définir une constante DEBOGUER. En fonction de sa valeur, 1 ou 0, la macro ASSERT délègue son argument à assert ou ne fait rien. Indication : utiliser les commandes #if, #else et #endif du préprocesseur.. Pour déboguer efficacement un programme, on souhaite afficher, pour chaque structure conditionnelle if, le nom du fichier.c qui le contient, sa ligne dans le code et si la condition testée est vérifiée ou non. Pour cela, définir une macro IF qui prend trois paramètres : une condition cond, un bloc d instructions bloc_then et un bloc d instructions bloc_else. Cette macro teste la condition cond et exécute bloc_then si cond est vraie, et bloc_else sinon. Elle affiche également que l on exécute une structure if, le fichier qui la contient, sa ligne dans le code et si c est bloc_then qui est exécuté ou bien bloc_else. Indication : utiliser les commandes LINE et FILE du préprocesseur qui permettent respectivement de connaître la ligne courante et le fichier courant. Exercice 6 Effets de bord 1. Rappeler ce qu est une expression à effet de bord.. Dire si les expressions suivantes sont à effet de bord : (a) 1 + (8 ) ; (b) 1 p r i n t f ( " Bonjour \ n" ) ; (c) 1 i n t a ;

(d) 1 a = + (8 ) ; (f) 1 i f ( a == 16) { a ; } (e) 1 i f ( a == 17) { a ; } 3. Rappeler ce qu est une fonction à effet de bord. 4. Dire si les fonctions suivantes sont à effet de bord : (a) 1 i n t somme( i n t tab, i n t n ) { i n t i, r e s ; 3 4 r e s = 0 ; 5 for ( i = 0 ; i < n ; i ++) 6 r e s += tab [ i ] ; 7 return r e s 8 } (b) 1 void a f f i c h e r ( i n t tab, i n t n ) { i n t i ; 3 4 for ( i = 0 ; i < n ; i ++) 5 p r i n t f ( "%d ", tab [ i ] ) ; 6 } (c) 1 void echanger ( i n t x, i n t y ) { i n t tmp ; 3 4 tmp = x ; 5 x = y ; 6 y = tmp ; 7 } (d) 1 i n t nb_appels = 0 ; 3 i n t f c t _ 1 ( i n t n ) { 4 nb_ appels ++; 5 return n + 1 ; 6 } (e)

1 i n t nb_appels = 0 ; 3 i n t f c t _ ( i n t n ) { 4 i f ( nb_appels == 0) 5 return 0 ; 6 e lse 7 return n + 1 ; 8 } 5. Expliquer ce qu affiche le programme suivant et en quoi il n est pas recommandable. 3 i n t main ( ) { 4 i n t n ; 5 6 n = 0 ; 7 n = etrange (&n, etrange (&n, 1 0 ) ) ; 8 p r i n t f ( "%d \ n", n ) ; 9 10 return 0 ; 11 } 1 13 i n t etrange ( i n t n, i n t m) { 14 n += m; 15 return n + 1 ; 16 } Exercice 7 Structures conditionnelles 1. Rappeler ce qu est un bloc.. Rappeler quelles sont les structures conditionnelles et expliquer leur utilité. 3. On suppose définies trois fonctions 1 i n t f ( ) ; i n t g ( ) ; 3 i n t h ( ) ; qui retournent chacune 0 ou 1 en fonction du résultat d un test qu elles réalisent. On souhaite afficher un caractère en fonction des résultats obtenus, conformément au tableau suivant : f g h Caractère 0 0 0 A 0 0 1 B 0 1 0 C 0 1 1 D 1 0 0 E 1 0 1 F 1 1 0 G 1 1 1 H

Écrire un programme qui répond à ce problème avec les contraintes suivantes : utiliser des structures conditionnelles if ; il est interdit d utiliser des variables ; toute exécution du programme appelle exactement une fois chacune des fonctions f, g et h. 4. Reprendre la question précédente avec les contraintes suivantes : utiliser une structure conditionnelle switch ; utiliser au plus une variable de type int ; toute exécution du programme appelle exactement une fois chacune des fonctions f, g et h. Indication : utiliser des masques de bits. 5. Donner et expliquer la sortie produite par les programmes suivants : (a) 3 i n t main ( ) { 4 i n t i ; 5 6 i = ; 7 switch ( i ) { 8 case 1 : p r i n t f ( " 1 " ) ; 9 case : p r i n t f ( " " ) ; 10 case 3 : p r i n t f ( " 3 " ) ; 11 case 4 : p r i n t f ( " 4 " ) ; 1 default : p r i n t f ( "d" ) ; 13 } 14 15 return 0 ; 16 } (b) 3 i n t main ( ) { 4 i n t i ; 5 6 i = 3 ; 7 switch ( i ) { 8 case 1 : p r i n t f ( " 1 " ) ; 9 case : p r i n t f ( " " ) ; 10 case 3 : p r i n t f ( " 3 " ) ; 11 case 4 : p r i n t f ( " 4 " ) ; 1 default : p r i n t f ( "d" ) ; 13 case 5 : p r i n t f ( " 5 " ) ; break ;

14 case 6 : p r i n t f ( " 6 " ) ; 15 } 16 17 return 0 ; 18 } (c) 3 i n t main ( ) { 4 i n t i ; 5 6 i = 3 ; 7 switch ( i ) { 8 case 1 : p r i n t f ( " 1 " ) ; 9 case : p r i n t f ( " " ) ; 10 case 3 : p r i n t f ( " 3 " ) ; 11 case 4 : p r i n t f ( " 4 " ) ; 1 default : p r i n t f ( "d" ) ; 13 case 5 : p r i n t f ( " 5 " ) ; break ; 14 case 6 : p r i n t f ( " 6 " ) ; 15 case 3 : p r i n t f ( " 3 " ) ; 16 } 17 18 return 0 ; 19 } 6. Rappeler quelles sont les structures de boucle et expliquer leur utilité. 7. Expliquer dans quelles circonstances il est préférable d utiliser une boucle for plutôt qu une boucle while et réciproquement. 8. Écrire, en utilisant judicieusement des boucles for, while ou encore do while, les fonctions : (a) 1 void a f f i c h e r _ t r i a n g l e _ 1 ( i n t n ) ; (b) qui produit la sortie suivante (donnée ici dans le cas n = 4) : * * * * * * * * * * 1 void a f f i c h e r _ t r i a n g l e _ ( i n t n ) ; qui produit la sortie suivante (donnée ici dans le cas n = 4) : * - - - * * - - * * * - * * * *

(c) 1 void afficher_damier ( i n t n ) ; (d) qui produit la sortie suivante (donnée ici dans le cas n = 4) : * - * - - * - * * - * - - * - * 1 void a f f i c h e r _ t r i a n g l e _ 3 ( i n t n ) ; qui produit la sortie suivante (donnée ici dans le cas n = 6) : * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 9. La suite de Syracuse est une suite (S i ) i 0 d entiers dépendant d un paramètre n définie de la manière suivante : n si i = 0, S S i := i 1 si S i 1 est pair, 3S i 1 + 1 sinon. Une conjecture énonce que pour tout entier n 1, il existe un entier i 0 tel que S i = 1. Écrire un programme qui demande à l utilisateur d entrer au clavier un entier n et qui affiche les éléments de la suite (S i ) i 0 correspondante et s arrête dès qu un terme est égal à 1. Exercice 8 Cartes 1. Définir les types nécessaires pour représenter un jeu de 5 cartes et une main de Texas hold em. Une main est constituée de deux cartes.. Définir des fonctions qui permettent d afficher des jeux et des mains. 3. Modifier (si besoin est) le type qui représente le jeu de cartes de sorte qu il tienne compte de l ordre entre les cartes et que certaines cartes soient absentes (le type modélise donc une pile de cartes). 4. Écrire des fonctions qui permettent de retirer la i ieme carte d un jeu. Écrire également une fonction qui permet d ajouter une carte en tête d un jeu. 5. Écrire une fonction qui permet de mélanger un jeu de cartes. Un algorithme répondant à ce problème consiste à créer un nouveau jeu de carte et à y empiler une à une les cartes du jeu que l on souhaite mélanger en les choisissant au hasard. 6. Écrire une fonction qui permet de servir une main, c est à dire retirer les deux premières cartes d un jeu et les placer dans une main.

Exercice 9 Structures Soit la structure suivante qui modélise une personne : 1 typedef s t r u c t { char nom [ 1 6 ] ; 3 char prenom [ 1 6 ] ; 4 i n t age ; 5 } Personne ; 1. Déclarer un type énumération couleur qui permet de modéliser les couleurs noir, brun, chatain, blond, roux et blanc.. Modifier cette structure de sorte à tenir compte de la taille d une personne et de sa couleur de cheveux. 3. Écrire les fonctions suivantes qui permettent respectivement de saisir les informations d une personne (sur l entrée standard) et de les afficher : 1 Personne s a i s i r ( ) ; void a f f i c h e r ( Personne p ) ; 4. Écrire une fonction 1 void echanger ( Personne p1, Personne p ) ; qui échange les valeurs de deux structures modélisant des personnes. Exercice 10 Unions 1. Rappeller la différence entre les types structures et unions. Rappeller l intêret des types union.. Soit les trois types suivants: 1 typedef s t r u c t e n t r e p r i s e { char nom [ 3 ] ; 3 long i n t s i r e t ; 4 } E n t r e p r i s e ; 5 6 typedef s t r u c t p a r t i c u l i e r { 7 char nom [ 3 ] ; 8 char prenom [ 3 ] ; 9 } P a r t i c u l i e r ; 10 11 typedef s t r u c t a s s o c i a t i o n { 1 char nom [ 3 ] ; 13 } Association ; Créer une structure Annuaire dans laquelle est présent un numéro de téléphone de type int, un autre entier organisation (qui désignera si l entrée de l annuaire est une entreprise un particulier ou une association) et une union abonne qui pourrait aussi bien être une Entreprise, un Particulier ou bien une Association.

3. Quel est la taille mémoire d une entrée de type Annuaire en octet? 4. Sachant que le champ organisation vaut 0 pour les entreprises, 1 pour les particuliers et pour les associations; écrire une fonction AfficheAbonne qui affiche sur la sortie standard les données de l abonné Annuaire A envoyé en argument.