Vous êtes sur la page 1sur 32

Table des matières

Enoncés des TPs------------------------------------------------------------------------------------------------1


Initiation à la programmation C----------------------------------------------------------------------------2
Manipulation des types et des fonctions d’E/S standards----------------------------------------------4
Les instructions de branchement conditionnel------------------------------------------------------------6
Les structures répétitives------------------------------------------------------------------------------------8
Les tableaux-------------------------------------------------------------------------------------------------11
Les chaînes de caractères----------------------------------------------------------------------------------14
Les types de variables complexes-------------------------------------------------------------------------16
Les pointeurs------------------------------------------------------------------------------------------------18
Les fonctions------------------------------------------------------------------------------------------------21
Les fichiers---------------------------------------------------------------------------------------------------23
Enoncés des Examens----------------------------------------------------------------------------------------25
Devoir Surveillé : Programmation 2---------------------------------------------------------------------26
Examen : Programmation 2--------------------------------------------------------------------------------28
Enoncés des TPs
TP 1 :
Initiation à la programmation C
Objectifs :
-Connaître la structure d’un programme C
-Connaître la signification des séquences d’échappement
-Maîtriser les différences de types pour les variables
- Maîtriser la syntaxe du langage

Exercice 1:
Tester le programme suivant et conclure.
#include <stdio.h>
void main()
{
printf("BONJOUR ");
printf("IL FAIT BEAU\n"); /* équivalent à puts("BONJOUR"); */
printf("BONNES VACANCES");
}
Exercice 2:
Expérimentez avec les séquences d'échappement que vous trouvez dans le tableau ci-dessous et
complétez les colonnes vides.

description
séq. d'échapp.
\n new line
\t
\b
\r
\"
\\
\0
\a

Exercice 3: Affichage d'une variable de type char

Tester le programme suivant et conclure.


Dans un deuxième temps, modifier ce programme pour améliorer l’interface utilisateur.
#include <stdio.h>
void main()
{
char c;
c =65; /* c est le caractère alphanumérique A */

N .MLAYAH & W .ELTAIEF 2 2004-2005


printf("%d\n",c); /* affichage du code ASCII en décimal ( 65 ) et retour … à la ligne */
printf("%o\n",c); /* affichage du code ASCII en base huit ( 101) et retour … à la ligne */
printf("%x\n",c); /* affichage du code ASCII en hexadécimal (41) et retour … à la ligne */
printf("%c\n",c); /* affichage du caractère ( A ) et retour à la ligne */
}
Exercice 4: Affichage multiple
Tester le programme suivant et conclure:
#include <stdio.h>
void main()
{
char c;
c ='A' ; /* c est le caractère alphanumérique A */
printf("décimal = %d ASCII = %c\n",c,c);
}
Exercice 5:
1. a et b sont des entiers: a = -21430 b = 4782.
Calculer et afficher a+b, a-b, a*b, a/b, a%b en format décimal, et en soignant l’interface
homme/machine.
2. a et b sont des réels: a = -21,43 b = 4,782.
Calculer et afficher a+b, a-b, a*b, a/b, a%b.
a/b donne le quotient de la division, a%b donne le reste de la division.
Exercice 6:
Que va-t-il se produire, à l'affichage, lors de l'exécution du programme suivant ?
#include <stdio.h>
void main()
{
char a = 0x80;
unsigned char b = 0x80;
printf("a en décimal vaut: %d\n",a);
printf("b en décimal vaut: %d\n",b);
}

Exercice 7:

En C standard, la taille des entiers est de 32 bits;


Que va-t-il se passer, à l'affichage, lors de l'exécution du programme suivant ?
#include <stdio.h>
void main()
{
int a = 12345000, b = 60000000, somme;
somme=a*b;
printf("a*b = %d\n",somme);
printf("a*b (en hexa) = %x\n",somme);
}

N .MLAYAH & W .ELTAIEF 3 2004-2005


TP 2 :
Manipulation des types et des fonctions d’E/S
standards
Objectifs :
- Maîtriser les différents formats d’affichage des variables
- Ecrire quelques programmes simples
- Mettre l’accent sur les conversions automatiques de types

Exercice 1:
Que va-t-il se passer lors de l'exécution du programme suivant, si l'utilisateur saisit 67, 62 et 6543?
#include <stdio.h>
#include <conio.h>
void main()
{
char c;
printf("ENTRER UN CARACTERE: ");
scanf("%c",&c);
printf("VOICI SON CODE ASCII: %d\n",c);
printf("POUR CONTINUER FRAPPER UNE TOUCHE ");
getch();
}
Exercice 2:
Ecrire un programme qui permute et affiche les valeurs de trois variables A, B, C de type entier qui
sont entrées au clavier :
A ==> B , B ==> C , C ==> A
Exercice 3:
Ecrire un programme qui affiche le quotient et le reste de la division entière de deux nombres
entiers entrés au clavier ainsi que le quotient rationnel de ces nombres.
Exercice 4:
Ecrire un programme qui calcule la somme de quatre nombres du type int entrés au clavier,
a) en se servant de 5 variables (mémorisation des valeurs entrées)
b) en se servant de 2 variables (perte des valeurs entrées)
Exercice 5:
Ecrire un programme qui affiche la résistance équivalente à trois résistances R1, R2, R3 (type
double),
- si les résistances sont branchées en série:
Rsérie = R1+R2+R3

N .MLAYAH & W .ELTAIEF 4 2004-2005


- si les résistances sont branchées en parallèle:

Exercice 6:
a) Ecrire un programme qui calcule le prix TTC (type double) d'un article à partir du prix net (type
int) et du pourcentage de TVA (type int) à ajouter. Utilisez la formule suivante en faisant attention
aux priorités et aux conversions automatiques de type:

b) Ecrire un programme qui calcule le prix net d'un article (type double) à partir du prix TTC (type
double) et du pourcentage de TVA (type int) qui a été ajoutée.
(Déduisez la formule du calcul de celle indiquée ci-dessus)

TP 3 :
N .MLAYAH & W .ELTAIEF 5 2004-2005
Les instructions de branchement conditionnel
Objectifs :
- Comprendre l’utilité des instructions de branchement conditionnel

Exercice 1:
Considérez la séquence d'instructions suivante:
if (A>B) printf ("premier choix \n"); else
if (A>10) printf ("deuxième choix \n");
if (B<10) printf ("troisième choix \n");
else printf ("quatrième choix \n");
a) Copiez la séquence d'instructions en utilisant des tabulateurs pour marquer les blocs if - else.
b) Déterminez les réponses du programme pour chacun des couples de nombres suivants et vérifiez
à l'aide de l'ordinateur.
A=10 et B=5 :

A=5 et B=5 :
A=5 et B=10 :
A=10 et B=10 :
A=20 et B=10 :

A=20 et B=20 :

Exercice 2 :
Ecrivez un programme qui lit trois valeurs entières (A, B et C) au clavier et qui affiche la plus
grande des trois valeurs, en utilisant:
a) if - else et une variable d'aide MAX
b) if - else if - ... - else sans variable d'aide
c) les opérateurs conditionnels et une variable d'aide MAX
d) les opérateurs conditionnels sans variable d'aide
Exercice 3 :
Ecrivez un programme qui lit trois valeurs entières (A, B et C) au clavier. Triez les valeurs A, B et
C par échanges successifs de manière à obtenir :
val(A), val(B) et val(C).
Affichez les trois valeurs.

Exercice 4 :

N .MLAYAH & W .ELTAIEF 6 2004-2005


Ecrivez un programme qui lit deux valeurs entières (A et B) au clavier et qui affiche le signe du
produit de A et B sans faire la multiplication.
Exercice 5 :
Ecrivez un programme qui lit deux valeurs entières (A et B) au clavier et qui affiche le signe de la
somme de A et B sans faire l'addition. Utilisez la fonction fabs de la bibliothèque <math>.
Exercice 6 :
Ecrivez un programme qui calcule les solutions réelles d'une équation du second degré 
ax2+bx+c = 0 en discutant la formule:

Utilisez une variable d'aide D pour la valeur du discriminant b2-4ac et décidez à l'aide de D, si
l'équation a une, deux ou aucune solution réelle. Utilisez des variables du type int pour A, B et C.
Considérez aussi les cas où l'utilisateur entre des valeurs nulles pour A; pour A et B; pour A, B et
C. Affichez les résultats et les messages nécessaires sur l'écran.

TP 4 :

N .MLAYAH & W .ELTAIEF 7 2004-2005


Les structures répétitives

Objectifs :
- Utiliser les structures répétitives dans les programmes C
- Distinguer la différence entre les différentes structures
- Savoir la structure adéquate selon le programme à écrire

Exercice 1:
Ecrivez un programme qui lit N nombres entiers au clavier et qui affiche leur somme, leur produit et leur
moyenne. Choisissez un type approprié pour les valeurs à afficher. Le nombre N est à entrer au clavier.
Résolvez ce problème,
a) en utilisant while,
b) en utilisant do - while,
c) en utilisant for.
d) Laquelle des trois variantes est la plus naturelle pour ce problème?
Exercice 2:
Complétez la 'meilleure' des trois versions de l'exercice 1 :
Répétez l'introduction du nombre N jusqu'à ce que N ait une valeur entre 1 et 15.
Quelle structure répétitive utilisez-vous? Pourquoi?
Exercice 3:
Calculez par des soustractions successives le quotient entier et le reste de la division entière de deux entiers
entrés au clavier.
Exercice 4:
Calculez la factorielle N! = 1*2*3*...*(N-1)*N d'un entier naturel N en respectant que 0!=1.
a) Utilisez while,
b) Utilisez for.
Exercice 5:
Calculez par multiplications successives XN de deux entiers naturels X et N entrés au clavier.
Exercice 6:
Calculez la somme des N premiers termes de la série harmonique :
1 + 1/2 + 1/3 + ... + 1/N

Exercice 7:

N .MLAYAH & W .ELTAIEF 8 2004-2005


Calculez la somme, le produit et la moyenne d'une suite de chiffres non nuls entrés au clavier, sachant que
la suite est terminée par zéro. Retenez seulement les chiffres (0, 1 ... 9) lors de l'entrée des données et
effectuez un signal sonore si les données sortent de ce domaine.
Exercice 8:
Calculez le nombre lu à rebours (en sens inverse) d'un nombre positif entré au clavier en supposant que le
fichier d'entrée standard contient une suite de chiffres non nuls, terminée par zéro (Contrôlez s'il s'agit
vraiment de chiffres).
Exemple: Entrée: 1 2 3 4 0 Affichage: 4321
Exercice 9:
Calculez pour une valeur X donnée du type float la valeur numérique d'un polynôme de degré n:
P(X) = An*Xn + An-1*Xn-1 + ... + A1*X + A0
Les valeurs de n, des coefficients An, ... , A0 et de X seront entrées au clavier.
Utilisez le schéma de Horner qui évite les opérations d'exponentiation lors du calcul:

Exercice 10:
Calculez le N-ième terme UN de la suite de FIBONACCI qui est donnée par la relation de récurrence:
U1=1, U2=1 et UN=UN-1 + UN-2 (pour N>2)
Déterminez le rang N et la valeur UN du terme maximal que l'on peut calculer si on utilise pour UN :
- le type int
- le type long
- le type double
- le type long double
Exercice 11:
a) Calculez la racine carrée X d'un nombre réel positif A par approximations successives en utilisant la
relation de récurrence suivante:
XJ+1 = (XJ + A/XJ) / 2, avec X1=A ;
La précision du calcul J est à entrer par l'utilisateur.
b) Assurez-vous lors de l'introduction des données que la valeur pour A est un réel positif et que J est un
entier naturel positif, plus petit que 50.
c) Affichez lors du calcul toutes les approximations calculées :
La 1ère approximation de la racine carrée de ... est ...
La 2e approximation de la racine carrée de ... est ...

N .MLAYAH & W .ELTAIEF 9 2004-2005


La 3e approximation de la racine carrée de ... est ...

Exercice 12:
Affichez un triangle isocèle formé d'étoiles de N lignes (N est fourni au clavier):
Nombre de lignes : 8
*
***
*****
*******
*********
***********
*************
***************
Exercice 13:
Affiche la table des produits pour N variant de 1 à 10 :
X*Y I 0 1 2 3 4 5 6 7 8 9 10
--------------------------------------------------
0 I 0 0 0 0 0 0 0 0 0 0 0
1 I 0 1 2 3 4 5 6 7 8 9 10
2 I 0 2 4 6 8 10 12 14 16 18 20
3 I 0 3 6 9 12 15 18 21 24 27 30
4 I 0 4 8 12 16 20 24 28 32 36 40
5 I 0 5 10 15 20 25 30 35 40 45 50
6 I 0 6 12 18 24 30 36 42 48 54 60
7 I 0 7 14 21 28 35 42 49 56 63 70
8 I 0 8 16 24 32 40 48 56 64 72 80
9 I 0 9 18 27 36 45 54 63 72 81 90
10 I 0 10 20 30 40 50 60 70 80 90 100

TP 5 :

N .MLAYAH & W .ELTAIEF 10 2004-2005


Les tableaux
Objectifs :
- Manipuler les tableaux à une et deux dimensions

Exercice 1 :
Ecrire un programme qui lit la dimension N d'un tableau T du type int, remplit le tableau par des
valeurs entrées au clavier et affiche le tableau.
a) Calculer et afficher ensuite la somme des éléments du tableau.
b) Déterminer et afficher l’élément maximum du tableau et sa position
c) Déterminer et afficher l’élément minimum du tableau et sa position
d) Ranger ensuite les éléments du tableau T dans l'ordre inverse sans utiliser de tableau
d'aide. Afficher le tableau résultant.
e) Copiez ensuite toutes les composantes strictement positives dans un deuxième tableau
TPOS et toutes les valeurs strictement négatives dans un troisième tableau TNEG.
f) Afficher les tableaux TPOS et TNEG.
Remarque : Si le tableau contient plusieurs maxima ou minima, le programme retiendra la position
du premier maximum ou minimum rencontré.
Exercice 2: Produit scalaire de deux vecteurs
Ecrire un programme qui calcule le produit scalaire de deux vecteurs d'entiers U et V (de même dimension).
Exemple:
| 3 2 -4 | * | 2 -3 5 | = 3*2+2*(-3)+(-4)*5 = -20
Exercice 3:
Ecrire un programme qui permet de rechercher dans un tableau d'entiers A une valeur VAL entrée
au clavier. Afficher la position de VAL si elle se trouve dans le tableau, sinon afficher un message
correspondant.
Exercice 4: Maximum et minimum des valeurs d'un tableau
Ecrire un programme qui détermine la plus grande et la plus petite valeur dans un tableau d'entiers
A. Afficher ensuite la valeur et la position du maximum et du minimum. Si le tableau contient
plusieurs maxima ou minima, le programme retiendra la position du premier maximum ou
minimum rencontré.

Exercice 5: Insérer une valeur dans un tableau trié

N .MLAYAH & W .ELTAIEF 11 2004-2005


Un tableau A de dimension N+1 contient N valeurs entières triées par ordre croissant; la
(N+1)ième valeur est indéfinie. Insérer une valeur VAL donnée au clavier dans le tableau A de
manière à obtenir un tableau de N+1 valeurs triées.
Ecrire un programme qui réalise l'addition de deux matrices A et B de mêmes dimensions.
Exercice 6 :
Ecrire un programme qui effectue la multiplication de deux matrices A et B. Le résultat de la
multiplication sera mémorisé dans une troisième matrice C qui sera ensuite affichée.
Exercice 7: Recherche d'une valeur dans un tableau
Rechercher dans un tableau d'entiers A une valeur VAL entrée au clavier. Afficher la position de
VAL si elle se trouve dans le tableau, sinon afficher un message correspondant. La valeur POS qui
est utilisée pour mémoriser la position de la valeur dans le tableau, aura la valeur -1 aussi
longtemps que VAL n'a pas été trouvée.
Implémenter deux versions:
a) La recherche séquentielle
Comparer successivement les valeurs du tableau avec la valeur donnée.
b) La recherche dichotomique ('recherche binaire')
Condition: Le tableau A doit être trié
Comparer le nombre recherché à la valeur au milieu du tableau :
- s'il y a égalité ou si le tableau est épuisé, arrêter le traitement avec un message correspondant.
- si la valeur recherchée précède la valeur actuelle du tableau, continuer la recherche dans le demi-
tableau à gauche de la position actuelle.
- si la valeur recherchée suit la valeur actuelle du tableau, continuer la recherche dans le demi-
tableau à droite de la position actuelle.
Ecrire le programme pour le cas où le tableau A est trié par ordre croissant.
Question: Quel est l'avantage de la recherche dichotomique?
Exercice 8: Fusion de deux tableaux triés
On dispose de deux tableaux A et B (de dimensions respectives N et M), triés par ordre croissant.
Fusionner les éléments de A et B dans un troisième tableau FUS trié par ordre croissant.
indication: Utiliser trois indices IA, IB et IFUS. Comparer A[IA] et B[IB]; remplacer FUS[IFUS]
par le plus petit des deux éléments; avancer dans le tableau FUS et dans le tableau qui a contribué
son élément. Lorsque l'un des deux tableaux A ou B est épuisé, il suffit de recopier les éléments
restants de l'autre tableau dans le tableau FUS.
Exercice 9: Tri par sélection du maximum
Classer les éléments d'un tableau A par ordre décroissant.

N .MLAYAH & W .ELTAIEF 12 2004-2005


indication: Parcourir le tableau de gauche à droite à l'aide de l'indice I. Pour chaque élément A[I]
du tableau, déterminer la position PMAX du (premier) maximum à droite de A[I] et échanger A[I]
et A[PMAX].
Exemple:

Exercice 10: Tri par propagation (bubble sort)


Classer les éléments d'un tableau A par ordre croissant.
Indication: En recommençant chaque fois au début du tableau, on effectue à plusieurs reprises le
traitement suivant: On propage, par permutations successives, le plus grand élément du tableau
vers la fin du tableau (comme une bulle qui remonte à la surface d'un liquide).
Exemple:

Implémenter l'algorithme en considérant que:


* La partie du tableau (à droite) où il n'y a pas eu de permutations est triée.
* Si aucune permutation n'a eu lieu, le tableau est trié.

N .MLAYAH & W .ELTAIEF 13 2004-2005


TP 6 :
Les chaînes de caractères
Objectifs :
- Maîtriser le format de déclaration des chaînes de caractères
- Manipuler les fonctions de traitement et de conversion de chaînes

Exercice 1:
Lesquelles des chaînes suivantes sont initialisées correctement ? Corrigez les déclarations fausses
et indiquez pour chaque chaîne de caractères le nombre d'octets qui sera réservé en mémoire.
char c[] = "a\nb" ;
char c[8] = "a bb ccc" ;
Char c[] = 'OSI' ;
char c[10] = '1';
char c[] = "dec" "corr";
char c[2] = {'a', '\0'};
char c[4] = {'a', 'b', 'c'};
char c[4] = "'x'";

Exercice 2:
Ecrire un programme qui demande l'introduction de votre nom et votre prénom et qui
- Affiche la longueur totale du nom.
- Compare le nom et le prénom lexico graphiquement.
- Compare le nom et le prénom en tenant compte juste des k premiers caractères
- Copie la moitié du nom et la moitié du prénom dans une troisième variable et l’affiche.
- Inverse le nom et l’affiche
- Recherche la première occurrence d’un caractère dans le nom et l’affiche.
- Rechercher la première occurrence d’une sous chaîne dans le prénom.
Exercice 3:
Ecrire un programme qui lit N mots (N entré par l’utilisateur) et les affiche ensuite dans une ligne.
Utiliser deux variables au maximum.
Exercice 4:
Ecrire un programme qui lit un texte T et enlève toutes les apparitions d’un caractère saisi au
clavier en tassant les éléments restants. Les modifications se feront dans la même variable T.

N .MLAYAH & W .ELTAIEF 14 2004-2005


Exercice 5:
Ecrire un programme qui, pour une chaîne de caractères saisie au clavier et ne contenant que des
caractères alphabétiques et l’espace, permet de compter le nombre d’apparition de chaque
caractère. Choisir la structure de donnée la plus adéquate.
Exercice 6:
Ecrire un programme qui lit un verbe régulier du premier groupe, au clavier et qui affiche sa
conjugaison au présent de l'indicatif.
Exercice 7:
Ecrire un programme qui permet de saisir un entier sous la forme de chaîne de caractères puis
l’affiche sous forme entière puis réelle.
Exercice 8 :
Ecrire un programme qui lit N mots et les mémorise dans un tableau de chaînes de caractères. Trier
les N mots lexico graphiquement en utilisant les fonctions strcmp et strcpy. Afficher le tableau
trié.
Exercice 10 :
Ecrire un programme qui permet de saisir une chaîne de caractères et calcule ensuite le nombre de
caractères majuscule, minuscule, chiffre, alphanumérique, hexadécimal et enfin le nombre
d’espaces (space, tab..).
Exercice 11 :
Ecrire un programme qui lit une chaîne de caractères et l'interprète comme un entier positif dans la
base décimale.
Exercice 12 :
Ecrire un programme qui remplace toutes les occurrences d'une chaîne de caractères CH1 par la
chaîne CH2 dans une chaîne de caractères CH0. Essayer de faire une bonne analyse avant de
passer au codage.

N .MLAYAH & W .ELTAIEF 15 2004-2005


TP 7 :
Les types de variables complexes
Objectifs :
- Connaître la syntaxe de la déclaration des structures en langage C
- Connaître la déclaration, des types synonymes en C
- Différencier entre les structures, les unions et les énumérations

Exercice 1 :
Ecrire un programme qui permet de faire des opérations sur les nombres complexes selon le choix
de l’utilisateur (somme, module, argument, division)
Exercice 2 :
Ecrire un programme qui permet de saisir les caractéristiques matérielles et logicielles d’un
ordinateur dans une structure puis les afficher.
- numéro de série
- type du processeur
- la vitesse du processeur
- taille de la mémoire
- type de la mémoire
- type du chipset
- système d’exploitation installé
Exercice 3 :
Écrire un programme qui permet de saisir un tableau de 3 ordinateurs avec les caractéristiques
précédentes. Calcule et affiche l’ordinateur ayant la plus grande vitesse puis la moyenne des
vitesses.
Exercice 4 :
Ecrire un programme qui permet de saisir un ensemble de produits (chacun caractérisé par son
code, sa désignation, la quantité en stock et le prix unitaire) dans un tableaux et afficher ensuite les
informations relatives à un produit à partir de son code.
Exercice 5 :
Utiliser la fonction getdate pour récupérer la date maintenue par le système d’exploitation et
l’afficher.

N .MLAYAH & W .ELTAIEF 16 2004-2005


Exercice 6 :
Utiliser la fonction gettime pour récupérer l’heure maintenu par le système d’exploitation et
l’afficher. Modifier le programme pour qu’il affiche l’avancement du temps. Utiliser la fonction
delay ou sleep.
Exercice 7 :
Utiliser la fonction getdfree pour récupérer l’espace libre sur un disque.
Exercice 8 :
Utiliser la fonction getftime pour récupérer la date et l’heure de la dernière mise à jour d’un
fichier.
Exercice 9 :
Utiliser la fonction getfat pour récupérer les informations de la table d’allocation des fichiers.

N .MLAYAH & W .ELTAIEF 17 2004-2005


TP 8 :
Les pointeurs
Objectifs :
- Maîtriser les caractéristiques des variables de type pointeur en C
- Utiliser les pointeurs pour la résolution de divers problèmes

Exercice 1:
Déclarer un réel r et un pointeur pr vers un réel. Imprimer la valeur de r et de pr. Initialiser le réel
à une valeur arbitraire et faire pointer pr vers r. Imprimer la valeur de r et de pr. Modifier le réel
pointé par pr (en utilisant pr). Imprimer la valeur de r.
Exercice 2 :
Sachant qu’on a :
int x ;
int *p ;
p=&x ;
Ecrire l’équivalent des expressions suivantes en fonction de x, donner le contenu de x et *p.
Y=*p + 1 ;
*p = *p + 2 ;
*p +=2 ;
++*p ;
(*p)++ ;
Exercice 3 :
Sachant qu’on travaille avec une machine dont la taille du mot mémoire est 2 octets. Et que le type
float est codé sur 4 octets. Donner les valeurs de P et Q, *P et *Q, x et y après l’exécution de
chaque instruction. On suppose que x et y sont rangé aux adresses 20 et 30.
float x=5,y=3 ;
float *P, *Q ;
P=&x ; Q=&y ;
P+=5 ;
Q - - ;
Exercice 4 :
Ecrire un programme qui, pour un tableau de taille N, affiche ses éléments dans l’ordre croissant
puis dans l’ordre décroissant en utilisant le concept pointeur.
Exercice 5 :
Donnez le contenu de A, B, C, P1 et P2 après chaque instruction.
int A = 1; int B = 2;int C = 3;
int *P1, *P2;
P1=&A; P2=&C; *P1=(*P2)++;

N .MLAYAH & W .ELTAIEF 18 2004-2005


P1=P2; P2=&B; *P1-=*P2;
++*P2; *P1*=*P2; P1=&A;
Exercice 6 :
Soit P un pointeur qui 'pointe' sur un tableau T:
int T[] = {1, 2,3, 4, 5, 6,7, 8, 9};
int *P;
P = T;
Quelles valeurs ou adresses fournissent ces expressions:
*P+2
*(P+2)
&P+1
&T[4]-3
T+3
&T[7]-P
P+(*P-10)
Exercice 7 :
Ecrire un programme qui lit un réel X et un tableau T du type float au clavier et élimine toutes les
occurrences de X dans T en tassant les éléments restants. Le programme utilisera les pointeurs P1
et P2 pour parcourir le tableau.
Exercice 8 :
Ecrire un programme qui range les éléments d'un tableau T du type int dans l'ordre inverse. Le
programme utilisera des pointeurs P1 et P2.
Exercice 9 :
Ecrire un programme qui lit deux tableaux d'entiers T1 et T2 et leurs dimensions N et M au clavier
et qui ajoute les éléments de T2 à la fin de T1. Utiliser deux pointeurs PT1 et PT2 pour le transfert
et afficher le tableau résultant T1.
Exercice 10 :
Ecrire de deux façons différentes, un programme qui vérifie si une chaîne CH introduite au clavier
est un palindrome: en utilisant uniquement le formalisme tableau puis en utilisant des pointeurs au
lieu des indices numériques
Exercice 11
Ecrire un programme qui lit une chaîne de caractères CH et détermine la longueur de la chaîne à
l'aide d'un pointeur P. Le programme n'utilisera pas de variables numériques.
Exercice 12
Ecrire un programme qui lit une chaîne de caractères CH au clavier et qui compte les occurrences
des lettres de l'alphabet en ne distinguant pas les majuscules et les minuscules. Utiliser un tableau
NL de dimension 26 pour mémoriser le résultat et un pointeur PCH pour parcourir la chaîne CH et

N .MLAYAH & W .ELTAIEF 19 2004-2005


un pointeur PNL pour parcourir NL. Afficher seulement le nombre des lettres qui apparaissent au
mois une fois dans le texte.

N .MLAYAH & W .ELTAIEF 20 2004-2005


TP 9 :
Les fonctions
Objectifs :
- Se familiariser avec l’utilisation des fonctions dans les programmes C
- Différencier entre les variables globales et les variables locales
- Comprendre la notion de transmission d’arguments entre fonctions

Exercice 1:
Implémenter le programme suivant en C
programme MANIPULATION
| entier A,B,C
| en A ranger 208
| en B ranger 5
| en C ranger -34
| écrire A,B,C
| MANIPULER(A,B,C)
| écrire A,B,C
fprogramme (* fin MANIPULATION *)

procédure MANIPULER(X,Y,Z)
| donnée: entier X,Y
| résultat: entier Z
| écrire X,Y,Z
| en X ranger X divent 2
| en Y ranger Y*2
| en Z ranger X+Y
| écrire X,Y,Z
fprocédure (* fin MANIPULER *)

Exercice 2:
Ecrire la fonction TRANSPO_MATRICE à cinq paramètres MAT, L, LMAX, C, CMAX qui
effectue la transposition de la matrice MAT en utilisant la fonction PERMUTER.
TRANSPO_MATRICE retourne une valeur logique qui indique si les dimensions de la matrice
sont telles que la transposition a pu être effectuée. Ecrire un petit programme qui teste la fonction
TRANSPO_MATRICE.
Exercice 3:
On voudrait écrire un ensemble de fonctions qui permettent de faire quelques manipulations sur les
tableaux à une dimension. Ecrire les fonctions suivantes :
- SAISIE_TAB pour la saisie des éléments d’un tableau
AFFICH_TAB pour l’affichage des éléments d’un tableau

N .MLAYAH & W .ELTAIEF 21 2004-2005


- SOMME_TAB qui calcule la somme des éléments d’un tableau
- MAX_TAB qui détermine le maximum des éléments d’un tableau
- MIN_TAB qui détermine le minimum des éléments d’un tableau
- INDICE_MAX qui retourne l’indice du premier élément maximum d’un tableau
- INDICE_MIN qui retourne l’indice du premier élément minimum d’un tableau
- MOYENNE_TAB qui calcule la moyenne des éléments d’un tableau
Ecrire un programme, qui selon une valeur entière entrée au clavier appelle l’une des fonctions
citées ci-dessus.
Début du travail :
#include <stdio.h>
/* définitions des fonctions */
void SAISIE_TAB (int *tab, int n) /* n représente la taille du tableau */
{
for ( int i=0 ; i<n ;i++) 
{
printf(“donner l’élément %d du tableau :”, i) ;
scanf(“%d“,&tab[i]) ;
}
}
void AFFICH_TAB (int *tab, int n)
{
for ( int i=0 ; i<n ;i++) 
{
printf(“%d“,tab[i]) ;
}
}
………………………

void main()
{
/* test des deux fonctions déjà définies */
int table[5] ; /* déclaration d’un tableau nommé table, de type int et de dimension 5 */
SAISIE_TAB (table, 5) ; /* appel de la fonction SAISIE_TAB pour remplir table */
AFFICH_TAB(table,5); /* appel de la fonction SAISIE_TAB pour afficher table */
}

N .MLAYAH & W .ELTAIEF 22 2004-2005


TP 10 :
Les fichiers
Objectifs :
- Manipuler les fichiers dans des programmes C

Exercice 1:
Soit le fichier classe.txt contenant trois colonnes, séparés par des tabulations, décrivant
respectivement les noms et les notes des étudiants d’une classe en algorithmique et en
programmation.
Ecrire un programme en langage C permettant de calculer la moyenne de chaque étudiant et la
placer dans une quatrième colonne.
Exercice 2:
Soit le fichier complexe.txt contenant des nombres complexes représentés par une partie
imaginaire et une partie réelle placée chacune dans une colonne.
Ecrire un programme C permettant de :
a) définir une structure adéquate pour représenter un nombre complexe.
b) Transférer le contenu de ce fichier dans une liste chaînée.
c) Trier la liste par ordre croissant des modules.
d) Transférer le contenu de la liste triée dans le fichier en ajoutant les modules
correspondants.
Exercice 3:
Ecrire un programme C permettant de comparer deux fichiers file1 et file2 et afficher les mots
communs à ces deux fichiers.
Exercice 4:
Ecrire un programme C permettant de vérifier l’existence dans fichier d’un mot lu à partir du
clavier et afficher le nombre d’occurrences de ce mot.
Exercice 4:

Le fichier pays.txt a le format suivant :

Pays : Italie ; capitale : Rome


Pays : France ; capitale : Paris
Pays : Russie ; capitale : Moscou
Pays : Royaume-Uni ; capitale : Londres
Pays : Tunisie ; capitale : Tunis

N .MLAYAH & W .ELTAIEF 23 2004-2005


On veut maintenant pouvoir lire une ligne spécifique de ce fichier, correspondant à un pays
particulier. Ecrire un programme qui :
a) définit une constante LGMAX égale à 60 (la longueur supposée maximale d'une ligne du
fichier à lire).
b) déclare la chaîne de caractères ligne de longueur LGMAX
c) ouvre en lecture le fichier pays.txt, en lui associant le pointeur de fichier entree.
d) demande à entrer un nom de pays au clavier.
e) fait une boucle à l'aide d'une instruction while sur les lignes du fichier :
while(fgets(ligne, LGMAX, entree)), dans laquelle on recherche la ligne
contenant le pays sélectionné. On affiche alors cette ligne à l'écran.

N .MLAYAH & W .ELTAIEF 24 2004-2005


Enoncés des Examens
‫العالي‬
‫العــالي و البحث العلمي و التكنولوجيا‬ ‫التعليم‬
‫التعـلــيم‬ ‫وزارة وزارة‬

‫اإلدارة العامة للدراسات التكنولوجية‬


‫المعهد العــــــــــــــــــــــــالي‬
‫التكنولوجية‬
‫التكنولوجية‬ ‫للدراسات‬ ‫العـالي للدراسات‬ ‫المعهد‬
‫بالمهـديـة‬ ‫بالمهـديـة‬
‫وزارة التعليم العالي‬
‫اإلدارة العامة للدراسات التكنولوجية‬
‫المعهد العـالي للدراسات التكنولوجية‬
‫بالمهـديـة‬
Ministère de l’Enseignement Supérieur, de la Recherche Scientifique et de la Technologie.

Institut Supérieur
des Etudes Technologiques
de Mahdia
Avenue Elmourouj
99327637 : xaF511170427637
Hiboune/ 00427637
Mahdia : léT ‫ المهدية‬1115
‫هيبون‬ ‫شارع المروج‬

Devoir Surveillé : Programmation 2


Documents non autorisés
Matière :Programmation 2 Durée : 1 h 30 mn
Enseignant(e)s :N.MLAYAH Date : 17/10/2004

Exercice 1 :
Réaliser un programme qui affiche les lettres communes à deux mots fournis au
clavier. On prévoira d’afficher plusieurs fois une lettre qui apparaît à plusieurs reprises dans
chacun des deux mots.
On supposera que ces mots ne peuvent pas comporter plus de 26 caractères et on les lira à
l’aide de la fonction gets. On utilisera le formalisme pointeur.
Exp :
Donnez un premier mot : monsieur
Donnez un deuxième mot : bonjour
La lettre o est commune aux deux mots
La lettre n est commune aux deux mots
La lettre u est commune aux deux mots
La lettre r est commune aux deux mots

Exercice 2 :
Imaginez que vous écrivez un programme qui ait besoin d’informations géographiques.
Soit la structure « ville » susceptible de contenir pour chaque ville :
 Le nom ( 30 caractères)
 La latitude ( nombre flottant)
 La longitude ( nombre flottant)
 Le nombre d’habitants ( entier long)
 Le pays auquel elle appartient ( 20 caractères)
 La surface ( nombre flottant)
 L’emplacement de la ville dans le pays ( Nord, Sud, Est ou Ouest)

Ecrire un programme permettant de :


 Saisir les informations relatives à 30 villes dans un tableau
 Déterminer la ville qui ait la surface, le nombre d’habitants et la densité d’habitations
la plus grande
 Trier les villes de telle sorte que la première ville dans le tableau ait respectivement la
latitude et la longitude la plus élevée.
 Afficher la liste des villes triées
Exemple :
Ministère de l’Enseignement Supérieur, de la Recherche Scientifique et de la Technologie.
‫وزارة التعـلــيم العــالي و البحث العلمي و التكنولوجيا‬

Institut Supérieur ‫المعهد العــــــــــــــــــــــــالي‬


des Etudes Technologiques ‫للدراسات التكنولوجية‬
‫بالمهـديـة‬
‫وزارة التعليم العالي‬
Avenue Elmourouj 5111 Hiboune Mahdia Tél : 73683407 / 73672407 Fax : 73672399
‫التكنولوجية‬
‫هيبون المهدية‬ ‫للدراسات‬
5111 ‫المروج‬ ‫شارع‬ ‫اإلدارة العامة‬
‫المعهد العـالي للدراسات التكنولوجية‬
‫بالمهـديـة‬
‫وزارة التعليم العالي‬
‫اإلدارة العامة للدراسات التكنولوجية‬
‫المعهد العـالي للدراسات التكنولوجية‬
‫بالمهـديـة‬
de Mahdia

Examen : Programmation 2
Documents non autorisés
Matière :Programmation 2 Durée : 2 heures
Enseignant(e)s :N.MLAYAH Date : 13/01/2005

Exercice 1 :
Une suite géométrique est définie par :
U0
et
q tel que Un= q * Un-1 pour n ≥ 1

1. Ecrire la fonction suite de type long qui a comme paramètre respectivement U0, q et
un entier positif n et qui retourne la valeur de Un. Utiliser la méthode récursive.
2. La somme d’une suite géométrique est définie comme suit :
( n21 n1 )
n2 un1 ( 1q )
 uk 
1q
k  n1

Ecrire la fonction somme de type long qui a comme paramètre respectivement U0, q,
n2

n1 et n2 et qui retourne la  uk avec n2 ≥ n1≥ 0.


k n1

3. Réécrire la fonction somme en utilisant la méthode récursive.

4. Ecrire la fonction principale permettant de :


a. Saisir deux entiers positifs n1 et n2
b. Afficher la valeur de Un1 et Un2 en faisant appel à la fonction suite.
n2
c. Calculer la somme  uk en faisant appel à la fonction somme.
k n1
Exercice 2 :
On considère le tableau suivant qui donne un certain nombre d’informations sur les 9 planètes du soleil.
Nom Distance minimale Distance maximale Rayon (km) Masse (kg)
au soleil (km) au soleil (km)
Mercure 45 900 000 69 700 000 2 439 3,30×1023
Vénus 107 400 000 109 000 000 6 052 4,87×1024
Terre 147 000 000 152 100 000 6 378 5,98×1024
Mars 207 000 000 249 000 000 3 397 6,42×1023
Jupiter 740 000 000 816 000 000 71 492 1,90×1027
Saturne 1 346 400 000 1 511 000 000 60 268 5,69×1025
Uranus 2 742 000 000 3 008 000 000 25 559 8,69×1025
Neptune 4 460 000 000 4 450 000 000 24 764 1,02×1026
Pluton 4 425 000 000 7 400 000 000 1 160 1,31×1022

Il s’agit de rechercher la planète qui passe le plus prés du soleil, la planète qui passe le plus
loin, la planète la plus grande et la planète la plus massive.
1. Définir une structure planete regroupant les propriétés d’une planète. Le nom sera
représenté par un tableau de 8 caractères.
2. Définir une variable planetes représentant le tableau des planètes. Les champs de chaque
structure seront initialisés avec les valeurs contenues dans chaque ligne. Par exemple,
l’élément 0 du tableau planètes sera initialisé à : {"Mercure", 459e5, 697e5, 2439,3.3e23}.
2. Définir une variable plus de type structure à 4 champs : pres, loin, grande et lourde de
types int.
3. Ecrire le programme C qui :
- affecte au champ pres le rang dans le tableau planetes de la planète qui passe le plus
prés du soleil, au champ loin le rang de celle qui passe le plus loin du soleil, au champ
grande le rang de la plus grande (plus grand rayon) et au champ massive le rang de la
plus massive ;
- affiche les réponses sous la forme :
? passe le plus près du soleil
? passe le plus loin du soleil
? est la plus grande
? est la plus massive
(où ? est un nom de planète).
Ce programme aura le schéma suivant :
#include <stdio.h>
main()
{
définitions
construction de la valeur de la variable plus
affichage
}

Vous aimerez peut-être aussi