0% ont trouvé ce document utile (0 vote)
672 vues7 pages

TD Programmation Avancée en C

Programmation avancée en c, exercices

Transféré par

Djiddo Moussa
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
672 vues7 pages

TD Programmation Avancée en C

Programmation avancée en c, exercices

Transféré par

Djiddo Moussa
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF ou lisez en ligne sur Scribd
FICHE DES TRAVAUX DIRIGES ET PRATIQUES. “Apprendre a bien programmer resemble 4 apprendre 4 aller a bicyclette. Si vous n'osez. pas Parce que vous aver, peur d'une chute alors vous n’allez jamais apprendre.» Série 0 : Rappels Exercice Comment déclarer : 1) un pointeur sur un tableau de 3 entiers 2) un tableau de 5 tableau de 3 pointeurs sur void 3) un pointeur sur un tableau de 5 pointeurs sur int 4) un tableau de 5 pointeurs sur fonction non prototypée retourant un pointeur sur un tableau de 5 entiers 5) un tableau de 4 pointeurs sur fonction ayant comme argument un pointeur sur int et un int retournant un pointeur sur un tableau de 5 entiers. Préciser la taille des objets alloués par ces déclarations Exercice A quels objets correspondent les déclarations suivantes ; int *«{5]0 ; int (*O1511) int (*£)Gin, int *{J[5)) int (*(*f)(int, void *)){5] int (*(*)(int, void *))[5] Exercice 3: Ecrire différentes fonctions de manipulation des chaines de caractéres : 1. concaténation de deux chafnes 2. concaténation de deux chafnes limitée aux n premiers caractéres 3. comparaison de deux chaines 4, recopie d'une chaine dans une autre 5, recopie d'une chaine dans une autre limitée aux n premiers caractéres 6. longueur d'une chaine 7. recherche de la premiére occurrence d'un caractére dans une chaine ( on restitue un pointeur sur cette occurrence) 8. recherche de la demiére occurrence d'un caractére dans une chaine (on restitue un pointeur sur cette occurrence). Exercice Convertir une chaine de chiffres en son équivalent numérique entier en ignorant les éventuels blancs et tabulations placés en téte de ligne. Bxercice 5: Ecrire une fonction qui donne la décomposition binaire d'un entier en utilisant les opérations modulo et division, autre part en utilisant les opérations bit a bit. Programmation avancée en C Licence 2~ 2011/2012 - Page 1/7 Exercice 6 : Que fait la fonction suivante : int bizarre(char *ptr){ char *saveptr=ptr ; while(*ptr++!="\0’) ; return (ptr-saveptr-1) ; Sérié 3 : Le préprocesseur Exercice 1 : Ecrire des macros : 1. qui définit une constante n, 2. qui calcule le cube d'un nombre, 3. qui calcule la somme de deux nombres, 4. qui calcule le volume d'une sphére( v=42" ) Utiliser ces macros dans une fonction main() qui affiche la somme des volumes de n sphéres : on Passera en argument au programme les R, oit R, est le rayon de la i ® sphate. Vous pourrez utiliser la fonction double strtod(const char *s, NULL) qui convertir une chaine de caractéres s en double: Combien de fois cette fonction est elle appelée a Iexécution de votre programme ? Exercice 2 : Créer cing fichiers toto.h, toto, tata.h, tata.c, et main.c Dans toto.h est déclarée la fonction somme() qui calcule la somme de deux entiers. Cette fonction étant définie dans toto.c Dans tata.h est déclarée la fonction produit() qui calcule le produit de deux entiers. Cette fonction étant définie dans tata.c On impose que le fichier tatah doit dé réciproquement. Le fichier main.c appelle ces deux fonctions Ecrire un makefile qui permet de compiler l'ensemble de ces fichiers. le probléme en utilisant les directives de compilation conditionnelle, ‘pendre (cest a dire inclure) du fichier totoh en Que ce passe til ? Résoudre Exercice 3 : Le fichier den-téte défini la macro assert) qui prend en argument un booléen (un entier) Gui indique une condition qui doit éte vérifiée a Vexécution du programme, et qui, si cette condition West pas vérifiée, met fin a l'exécution du programme et affiche un message d'erreur, Ecrire un programme qui vérifie avec assert () si le nomibre arguments qui lui ont été passés est supérieur & 3. Compiler ce programme tel quel puis en rajoutant un NDEBUG en haut du fichier source. Décrire ce que donne I' ‘exécution du programme compilé dans les deux cas et proposer une définition de la macro assert (), , Serie 4: Les classes des déclarations Exercice 1 : Exécuter le programme suivant : int main(void){ int *p1, p2, *f10,"{20 : p1=f1(4) ; p2=f2(*pl) ; prine{("p1=%d_*p2=%d \n", *p1,*p2) ; return 0 ; } int *f1(int mf intn=5 ; nt=m ; return (&n) ; } int *f2(int m){ int p=8 ; pt=m; return (&p) ; Que ce passe t -il si les variables locales des fonctions f1 et f2 sont de classe static ? Série 5 :La programmation modulaire Exercice 1: Ecrire un module de manipulation des polynémes 1. Dans une premiere version, on définira le type des polynémes suivants : #define NBCOEF 10 dppedef struct { unsigned char degre; short coef[NBCOEF ] } Dans une seconde version, on définira un type plus adaptée pour la représentation des polynémes creux, 2. Les opérations suivantes seront réalisées sur le type polynéme: lecture sur l'entrée standard impression sur la sortie standard Ja valeur en un point addition soustraction produit dérivée n®** 3. Eerire une fonction main qui utilisera ce module et lancera T'exécution de ces diverses fonctions au gré des commandes frappées par l'utilisateur 4. Utiliser l'utilitaire make pour automatiser la compilation. vVVVVVVv Exercice 2 : La compilation séparée : 1. Ecrire une fonction strlen, qui renvoie la longueur (définie comme étant le nombre de caractéres précédent le caractére nul '\0', ce dernier non compris) d'une chaine de caractéres, 2. Ecrire une fonction strcmp prenant comme arguments deux chaines de caractéres, et Tenvoyant un entier positif, nul ou négatif, selon que la premiere chaine est, respectivement, plus grande, égale, ou plus petite que la seconde dans ordre lexicographique, Ecrire une fonction strap qui transforme une chaine pour la mettre entigrement en majuscules. La conversion de chaque caractére sera faite au moyen de toupper. 4. Nous proposons de créer une bibliothéque a partir des fonctions précédentes : > Créer un module mon_string dans lequel vous allez définir toutes ces fonctions. ® Créer un fichier contenant la fonction main pour tester votre module, 3. Série 6 : Les opérations sur les fichiers Exercice 1: Ecrire une fonction qui donne le premier élément commun 4 deux fichiers d'entiers triés. Exercice 2: A partir de deux fichiers contenant des éléments ttiées, obtenir dans un troisiéme fichier la réunion triée de ces éléments. Exercice 3: Ecrire une fonction pour insérer n caractéres en début d'un fichier. Exercice 4 ; Calculer et afficher le nombres de caractéres d'un fichier ASCII . Exercice 5 : ‘Trouver Terreur dans le programme suivant : FILE *fp ; if(fp=fopen(fichier,"r"){ Mire le fichier jusqu’é la fin i felose({p) ; Exercice 6 : Supposons que I'on dispose d'un fichier constitué d'un ensemble dlentrée et que chaque entrée tiene Sur G4 octets. On suppose également que fp est un pointeur sur le fichier. Utliser fy fonction fseek Pour réaliser les opérations suivantes ; 1. Placer Ie curseur au début de la n'** entrée (On suppose que la Premiére entrée a pour numéro 0) 2. Placer le curseur au début de la derniére entrée du fichier 3. se déplacer d'une entrée vers l'avant 4. se déplacer de deux entrées vers l'artigre TRAVAUX PRATIQUES. Des trava UX Pratiques longs et Compliqués comme les TPR. TP1 : Imp] © quicksort 8énérique. ip émentation d TP2: Réalisation de Tencapsulation enc

Vous aimerez peut-être aussi