Programmation C
TD 1 : Chaine de caractère, Fonction, Pointeur, Structure, Fichier
A. Chaine de caractère:
EXERCICE 1C :
1. Ecrire un programme qui lit une chaîne de caractères et qui transforme toutes
les minuscules de la chaîne en majuscules.
2. Ecrire une fonction qui a en paramètre une chaîne de caractères (paramètre en
entrée et en sortie) et qui supprime toutes les voyelles.
3. Ecrire une fonction qui a en paramètres deux chaînes de caractères ch1 et ch2
(paramètres en entrée) et renvoie un booléen indiquant si la chaîne ch2 est
contenue dans la chaîne ch1.
EXERCICE 2C :
1. Ecrire un programme qui demande à l'utilisateur de taper un verbe du premier
groupe et qui le conjugue à l'indicatif présent.
2. Ecrire un programme qui saisit une chaîne pouvant contenir des espaces et qui
affiche chaque mot de la chaîne, le séparateur étant l'espace.
Exemple, on tape : je pense donc je suis
Le programme affiche :
mot 1 : je
mot 2 : pense
mot 3 : donc
mot 4 : je
mot 5 : suis
B. Fonction :
EXERCICE 1F
1. Ecrire une fonction distance ayant comme paramètres 4 doubles xa,ya et
xb,yb qui réprésentent les coordonnées de deux points A et B et qui
renvoie la distance AB. Tester cette fonction.
2. Ecrire une fonction f ayant comme paramètres un double x et un booléen
ok et qui renvoie un double par un return. La fonction renvoie par un
return la racine carrée de (x-1)*(2-x). La fonction renvoie par
l'intermédiaire de la variable ok la valeur true si la fonction est définie au
point x, false sinon. Tester cette fonction.
3. Ecrire une fonction f ayant en paramètre un entier et qui renvoie par un
return un booléen : true si l'entier est premier et false sinon. Tester cette
fonction.
Programmation C
4. Ecrire une fonction f ayant comme paramètre un entier n et qui renvoie le
n-ième nombre premier : cette fonction utilisera la fonction du 3). Tester
cette fonction.
5. Ecrire une fonction swap ayant en paramètres 2 entiers a et b et qui
echange les contenus de a et de b. Tester cette fonction.
EXERCICE 2F
1. Ecrire une fonction f ayant en paramètres un tableau t de taille quelconque
et un entier n indiquant la taille du tableau. f doit renvoyer par un return un
booleén b indiquant s'il existe une valeur comprise entre 0 et 10 dans les n
premières cases du tableau t. Tester cette fonction.
2. Ecrire une fonction f ayant en paramètres un tableau t de taille quelconque
et un entier n indiquant la taille du tableau. f doit renvoyer par un return le
nombre de valeurs comprises entre 0 et 10 dans les n premières cases du
tableau t.Tester cette fonction.
3. Ecrire une fonction f ayant en paramètres un tableau t de taille quelconque
et un entier n indiquant la taille du tableau. f possède un autre paramètre v ,
entier passé par référence. f doit renvoyer par un return un booleén b
indiquant s'il existe une valeur comprise entre 0 et 10 dans les n premières
cases du tableau t. Si f renvoie true, v est égal à la valeur de la première
case du tableau comprise entre 0 et 10. Tester cette fonction.
C. Pointeur :
Exercice 1P :
1. Ecrire une fonction swapb qui a comme paramètres deux pointeurs vers
des entiers et qui échange le contenu des deux entiers pointés. Tester cette
fonction en écrivant un programme qui échange le contenu de deux entiers
a et b en appelant cette fonction.
2. Ecrire une fonction qui a comme paramètres un tableau d'entiers de taille
quelconque, la taille du tableau, et 2 pointeurs vers des entiers min et max.
La fonction doit renvoyer dans les entiers pointés par min et max
respectivement les plus petits et les plus grands entiers du tableau.
3. Écrire une fonction qui a en paramètre une chaîne de caractères et qui
renvoie par un return le nombre d'occurrences de la lettre 'A'. Cette
fonction devra parcourir la chaîne en utilisant un pointeur. Tester cette
fonction.
Exercice 2P :
1. Ecrire une fonction qui a comme prototype copy(char * ch1, char * & ch2).
Cette fonction a comme paramètre en entrée une chaîne de caractères ch1 et
une référence vers un pointeur ch2. Avant l'appel ch2 est un pointeur non
Programmation C
initialisé. Après l'appel, ch2 pointe vers un nouveau tableau de char qui
contient une copie de la chaîne ch1. Ce nouveau tableau de char aura la taille
minimale nécessaire. Tester cette fonction.
2. Réécrire la fonction précédente et le programme principal mais cette fois-ci le
pointeur ch2 sera non plus passé par référence mais par pointeur. La fonction
copy aura donc comme prototype :
copy(char * ch1, char * * ch2)
D. Structure :
EXERCICE 1S :
1. Ecrire un programme qui calcule la distance entre deux point A et B de
coordonnée x et y (définir une structure point) . (distance = sqrt(dx*dx +
dy*dy et dx = xa – xb, dy = ya – yb)
2. Ecrire un programme qui copie le contenue d’une structure voiture A vers une
structure B de même type. La structure voiture contient matricule et nom du
chauffeur.
EXERCICE 2S :
Écrire une structure fraction composée de 2 entiers : un numérateur et un
dénominateur.
a) Écrire une fonction pgcd de 2 entiers positifs.
b) Écrire une fonction normalise qui normalise une fraction de la manière suivante :
- le numérateur et le dénominateur doivent être premier entre eux
- le dénominateur est positif
c) Écrire une fonction saisir qui permet de saisir une fraction.
d) Écrire une fonction affiche qui affiche une fraction.
e) Écrire une fonction somme qui calcule la somme de 2 fractions. Le résultat doit être
normalisé.
EXERCICE 3S :
Ecrire des fonctions de lecture et d’écriture d’une variable de type Date. Dans un
premier temps, on ne se préoccupera pas de la validité de la date entrée.
EXERCICE 4S :
Ecrire la déclaration d’un type Fiche permettant de mémoriser les informations sur un
étudiant :
• son nom ;
• son prenom ;
• sa date de Naissance, de type Date ;
• sa formation, représentée par deux lettres ;
• s’il est redoublant ou non ;
• son groupe de TD, représenté par un entier ;
Programmation C
• ses notes, représentées par un tableau note d’au plus MAXNOTES reels;
• un entier nbnotes indiquant le nombre de notes valides dans le tableau note.
a) Ecrire les fonctions LireFiche et EcrireFiche de lecture et d’écriture d’une
Fiche. Aucune note n’est entrée par la fonction LireFiche.
b) Ecrire une fonction AjouteNote qui reçoit une Fiche et ajoute une note, si cela
est possible.
c) Ecrire une fonction Moyenne qui reçoit une Fiche et renvoie, si cela est
possible, la moyenne des notes de l’étudiant.
EXERCICE 5S :
On veut gérer des produits dans un entrepôt. Un produit est défini par 2 chaînes de
caractères : le code produit ("H567" par exemple et qui comporte au maximum 9
caractères utiles), l'intitulé ("pots de peinture" et qui comporte au maximum 99
caractères utiles) et un entier qui indique la quantité en stock (803 par exemple). Il
faut gérer une liste de produits en veillant à ce qu'il n'y ait pas deux produits avec le
même code produit. Bien sûr la quantité en stock ne peut pas être négative. La liste
comportera au maximum 100 produits.
Il faut gérer la liste grâce au menu suivant :
1. Ajouter un produit (on tape le code produit et l'intitulé, la quantité est
initialisée à 0).
2. Afficher la liste de produits.
3. Supprimer un produit en tapant le code produit.
4. Acheter un produit en tapant le code produit et la quantité achetée.
5. Vendre un produit en tapant le code produit et la quantité vendue.
6. Quitter
Programmation C
E. Fichier :
Résumé des fonctions de base de manipulation des fichiers
1. Déclaration : FILE *fichier;
2. Ouverture : FILE *fopen(char *nom, char *mode);
3. Fermeture :intfclose(FILE *fichier);
4. Ecriture : - putc(char c, FILE *fichier);
- fputs(char *chaîne, FILE *fichier);
- fprintf(FILE *fichier, char *format, liste d'expressions);
- fwrite(void *p,inttaille_bloc,intnb_bloc,FILE *fichier);
5. Lecture : - intfgetc(FILE *fichier);
- char *fgets(char *chaine,int n,FILE *fichier);
- intfread(void *p,inttaille_bloc,intnb_bloc,FILE *fichier);
- intfscanf(FILE *fichier, char *format, liste d'adresses);
6. Destruction :intremove(char *nomFich);
7. Renommer :int rename(char *oldname, char *newname);
8. Positionnement du pointeur au début du fichier: voidrewind(FILE *fichier);
Exercice 1F : l’accès par caractère (putc, putchar, fgetc, fputs)
1. créez un fichier texte portant votre nom et remplissez le par vos informations
personnelles : ville natale, adresse…
2. affichez le contenu de votre ficher sur l’écran
3. créez une copie de ce fichier en rajoutant "bis" à la fin de son nom
Exercice 2F : l’accès par enregistrement (fprintf, fscanf)
1. Enregistrez dans le fichier "Etudiant1.txt"N d’enregistrements structurés de la
manière suivante:
o Nom (chaîne de caractères)
o Filière (chaîne de caractères)
o Age (Entier)
Le nombre N est à saisir au clavier par l'utilisateur.
2. Affichez à l'écran le contenu du fichier pour vérification.
3. Créezle fichier "Etudiant2.txt" qui est une copie exacte du fichier "Etudiant1.txt".
Exercice 3F : l’accès par structure (fwrite, fread)
1. Créez la structure :Article (nom,prix)
2. Enregistrez dans le fichier "Liste1.txt" un nombre d’articles saisis par l’utilisateur.
3. Créez le fichier "Liste2.txt"qui classe les articles du ficher "liste1.txt"par ordre
croissantselon le prix.
Exercice 4F :
Reprendre les exercices de la partie structure (4 & 5) en ajoutant un fichier de sortie pour
enregistrer les données saisies.