Vous êtes sur la page 1sur 28

INFO2047: Introduction la Programmation

Benoit Donnet, Thomas Leuther, David Lupien St-Pierre, Firas Safadi


2
Table des matires
Introduction i
1 Blocs, Variables, Instructions Simples 1
1.1 Manipulation dOprateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1 Aectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.2 Priorits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Les Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2.1 Dclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Bloc dInstructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.4 Ecriture de Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2 Structures de Contrles 5
2.1 Condition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.1 Lecture de Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.2 Ecriture de Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 Itration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2.1 Lecture de Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2.2 Manipulation de Boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2.3 Ecriture de Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3 Structures de Donnes 11
3.1 Tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.1.1 Tableaux Unidimensionnels . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.1.2 Tableaux Multidimensionnels . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.2 Chanes de Caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.3 Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.4 Fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4 Modularit du Code 17
4.1 Lecture de Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.2 Ecriture de Fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.3 Passage de Paramtres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3
4
Introduction
Ce syllabus se veut tre un recueil dexercices permettant ltudiant de mettre en pratique
les aspects thoriques et techniques vus lors des sances thoriques du cours dIntroduction
lInformatique destin aux tudiants de BAC 2 Ingnieur Civil Architecte.
La pratique est un aspect important (si pas le plus important) du cours dIntroduction la
Programmation. Cest dans cette optique que ce syllabus a t rdig. Les comptences dsires
lissue du cours ne peuvent sobtenir sans une pratique intense. La comprhension et lcoute lors
du cours thorique sont des conditions ncessaires mais nullement susantes. Il faut sexercer
de faon acqurir lexprience et laisance ncessaires la russite de lexamen.
Le prsent document contient bien plus dexercices que ce qui pourra tre fait, pendant les
sances dexercices. Durant chaque sance, seulement quelques exercices seront eectus (les
exercices sur lesquels porteront la sance seront indiqus au dbut de la sance). Lide alors est
de permettre ltudiant de sexercer par lui-mme. Ce travail solitaire est vivement conseill en
vue de russir lexamen. Les tudiants peuvent toujours contacter, en cours de quadrimestre, le
Professeur pour discuter des exercices et de leurs solutions. Un calendrier des disponibilits est
donn en dbut danne acadmique. Bien entendu, il est tout fait permis de prendre de lavance
et de faire les exercices chez soi avant les diverses sances dexercices pour, ensuite, proter de la
sance dexercices pour discuter des solutions obtenues et faire des exercices supplmentaires.
i
ii
Chapitre 1
Blocs, Variables, Instructions Simples
Lobjectif de ce premier chapitre dexercices est de passer en revue les divers lments vus
au cours thorique.En particulier, les lments portant sur les bases du langage C. Les points
abords dans ce chapitre sont :
La manipulation des divers oprateurs C (Sec. 1.1).
Les types (Sec. 1.2).
Le bloc dinstructions (Sec. 1.3).
Les premiers pas en criture de code C (Sec. 1.4).
1.1 Manipulation dOprateurs
1.1.1 Aectation
Exercice 1 Ecrivez de la manire la plus compacte possible les expressions suivantes :
1. y = x + y;
2. x = x + 1;
3. y = y + 3;
4. b1 = b1 && b2;
5. b1 = b1 == b3;
6. b2 = b2 + 1;
1.1.2 Priorits
Exercice 1 Dterminez le rsultat des expressions suivantes, avec x = 1 et y = 2 :
1. 2 + 3 * 4 + 12 % 3
2. 1 != (x++ == -y)
Exercice 2 Soit un programme contenant les dclarations suivantes :
int i = 8;
int j = 5;
float x = 0.005;
float y = -0.01;
char c = c;
char d = d
1
Dterminez la valeur de chacune des expressions suivantes :
1. (3*i - 2*j)%(2*d - c)
2. 2*((i/5) + (4*(j-3))%(i + j - 2))
3. i <= j
4. j != 6
5. c == 99
6. 5*(i + j) > c
7. (i > 0) && (j < 5)
8. (i > 0) || (j < 5)
9. (x > y) && (i > 0) || (j < 5)
10. (x > y) && (i > 0) && (j < 5)
1.2 Les Types
1.2.1 Dclaration
Exercice 1 Quel type de variable utiliseriez-vous pour stocker :
le nombre dtudiant en premier Bac ?
le PIB (Produit Intrieur Brut) de ltat Belge en euros ?
?
les votes exprims pour un candidat une lection ?
le nombre de fts dans les caves de votre cercle prfr ?
1.3 Bloc dInstructions
Exercice 1 Soit le code suivant :
int main(){
int a;
int b;
int c;
a = 1;
b = a+1;
c = a+b;
a = b;
}//fin main()
Pour chaque ligne de code, indiquez quelles sont les variables qui sont modies et les valeurs
quelles prennent.
1.4 Ecriture de Code
Exercice 1 Lors dune opration de promotion, un magasin de composants hardware applique
une rduction de 10% sur tous les composants. Ecrivez un programme qui lit le prix dun
composant au clavier et ache le prix calcul en tenant compte de la rduction.
2
Exercice 2 Une bille de plomb est lche du haut dun immeuble et tombe en chute libre. Au
bout dun temps t (exprim en secondes), la bille est descendue dune hauteur (en mtres) :
h =
1
2
g t
2
. (1.1)
avec g = 9.81 (exprim en m.s
2
).
Dans un premier temps, crivez un programme qui calcule la hauteur descendue au bout
dun temps t saisi au clavier.
Dans un second temps, crivez un programme qui calcule la dure totale de la chute connais-
sant la hauteur totale h de limmeuble saisi au clavier. On pourra, ici, utiliser la bibliothque
math.h qui contient une routine, sqrt, permettant de calculer la racine carre dun nombre.
Exercice 3 Sachant que le premier avril 2004 tait un jeudi, crivez un programme qui dter-
mine le jour de la semaine correspondant au 4 mai de la mme anne. On pourra reprsenter les
jours de la semaine par des nombres allant de 0 6.
Exercice 4 Ecrivez un programme qui ache le chire des dizaines dun nombre saisi au
clavier. Mme question pour les centaines.
Exercice 5 Ecrivez un programme qui lit un nombre r au clavier et calcule le primtre et
laire dun disque de rayon r.
3
4
Chapitre 2
Structures de Contrles
Lobjectif de ce chapitre est de se concentrer sur les structures de contrle. Ces structures
nous permettent, soit deectuer des tests sur les valeurs des variables (condition Sec. 2.1),
soit de rpter un certain nombre de fois un bloc dinstructions particulier (itration Sec. 2.2).
2.1 Condition
2.1.1 Lecture de Code
Exercice 1 Soit le morceau de code suivant :
//testez les diffrentes valeurs possibles de i et j.
if(i<j)
k=j;
else
k=i;
Quel est leet de ce morceau de code sur la variable k ?
Exercice 2 Soit le morceau de code suivant :
//testez les diffrentes valeurs possibles de i et j.
if(i>j)
k=i;
else
k=j;
Quel est leet de ce morceau de code sur la variable k ?
Exercice 3 Soit le morceau de code suivant :
//testez les diffrentes valeurs possibles de i et j.
int k;
if(i!=j){
k=i;
i=j;
j=k;
}
Quel est leet de ce morceau de code sur la variable k ?
5
Exercice 4 Soit le morceau de code suivant :
//testez les diffrentes valeurs possibles de i et j.
int l;
if(i>j){
l=i;
i=j;
j=l;
}
if(i>k){
l=i;
i=k;
k=l;
}
if(j>k){
l=j;
j=k;
k=l;
}
Quel est leet de ce morceau de code sur les variables i et j et k ?
2.1.2 Ecriture de Code
Exercice 1 Une entreprise X vend deux types de produits. Les produits de type A qui donnent
lieu une TVA 5,5% et les produits de type B qui donnent lieu une TVA 19,6%. Ecrivez un
programme qui lit au clavier le prix hors taxe dun produit, saisit au clavier le type du produit
et ache le taux de TVA et le TTC du produit.
Exercice 2 Ecrivez un programme qui demande lutilisateur de saisir un entier relatif x
(x Z) et qui indique, dune part, si ce nombre est positif ou ngatif et, dautre part, si ce
nombre est pair ou impair.
Exercice 3 Ecrivez un programme qui demande lutilisateur de saisir trois nombres rels
(double) au clavier et les ache lcran par ordre croissant.
Exercice 4 Ecrivez un programme qui rsout lquation ax+b = 0 (a et b sont entrs au clavier
par lutilisateur). Bien videmment, on noubliera pas tous les cas particuliers (notamment les
cas tout x est solution et pas de solution).
Exercice 5 Ecrivez un programme qui rsout lquation ax
2
+ bx + c = 0 (a, b, c sont entrs
au clavier par lutilisateur) en envisageant tous les cas particuliers.
Exercice 6 Pour rappel, un nombre naturel correspond une anne bissextile sil est multiple
de 4 ; mais, parmi les multiples de 100, seuls les multiples de 400 correspondent une anne
bissextile.
Ecrivez un programme qui dtermine si un nombre naturel entr par lutilisateur correspond
une anne bissextile ou non.
6
2.2 Itration
2.2.1 Lecture de Code
Exercice 1 Soit le morceau de code suivant :
//testez les diffrentes valeurs possibles de j.
i=1;
k=0;
while(i<j){
k=k+i;
i=i+1;
}//fin while
Que vaut k la n de linstruction while ?
Exercice 2 Soit le morceau de code suivant :
//testez les diffrentes valeurs possibles de j.
i=1;
k=0;
while(i<j){
k=k*i;
i=i+1;
}//fin while
Que vaut k la n de linstruction while ?
2.2.2 Manipulation de Boucles
Exercice 1 Soit le code suivant :
#include <stdio.h>
int main(){
int n=5;
int f=1;
int c=n;
while(c>1){
f = f*c;
c = c-1;
}//fin while
printf("%d", c);
}//fin main()
Que calcule ce code ?
Rcrivez ce code avec un compteur qui est incrment dune unit chaque itration
plutt que dtre dcrment.
7
Exercice 2 Soit le code suivant :
#include <stdio.h>
int main(){
int i;
for(......; ......; ......)
printf("Its a long way to the top if you wanna Rock n Roll!\n");
}//fin main()
Compltez ce bout de code pour que le programme ache cinq fois lcran la phrase Its
a long way to the top if you wanna Rock n Roll ! !.
Exercice 3 Rcrivez le code de lExercice 2 en utilisant, cette fois, une boucle while plutt
que for.
Exercice 4 Rcrivez le code de lExercice 2 en utilisant, cette fois, une boucle do ...while
plutt que for.
Exercice 5 Rcrivez la boucle de lExercice 1 en utilisant linstruction for plutt que while.
2.2.3 Ecriture de Code
Exercice 1 Ecrivez un programme qui ache, lcran, la table de multiplication pour un
entier lu au clavier.
Exercice 2 Ecrivez un programme qui permet facilement dacher lcran un rectangle
comme le suivant :
+-----------------------+
| |
| |
| |
+-----------------------+
La largeur et la longueur de ce rectangle seront saisies au clavier.
Exercice 3 Considrons que a, b et c sont des variables entires lues au claiver. Ecrivez un
programme permettant de calculer :
la somme des entiers dans lintervalle [a, b[
la somme des entiers positifs dans lintervalle ]a, b[
la somme des entiers pairs strictement infrieur b
la somme des diviseurs de c dans lintervalle [a, b]
le nombre dentiers qui sont strictement infrieurs c et la fois multiple de a et b.
Exercice 4 Ecrivez un programme qui calcule la factorielle n! dun entier n saisi au clavier.
Exercice 5 Ecrivez un programme qui calcule la somme :
s = 1 + 2
3
+ 3
3
+ . . . + n
3
. (2.1)
en fonction de n saisi au clavier.
8
Exercice 6 Ecrivez un programme qui calcule le nombre de chires en base 10 dun nombre
n saisi au clavier.
Exercice 7 Ecrivez un programme qui ache la plus grande puissance de 2 infrieure la
constante C = 2426555645.
Exercice 8 En mathmatiques, lintgrale permet, entre autres, de calculer la surface de les-
pace dlimit par la reprsentation graphique dune fonction. Lintgrale de la fonction f(x) sur
lintervalle [a, b] est reprsent par
_
b
a
f(x)dx.
Il est possible dapproximer lintgrale dune fonction laide de la mthode des rectangles.
Cette mthode fonctionne comme suit : lintervalle [a, b] sur lequel la fonction f(x) doit tre
intgre est divis en N sous-intervalles gaux de longueurs h =
(ba)
N
. Les rectangles sont alors
dessins de sorte que le coin suprieur gauche, droit ou lentiret du ct suprieur touche le
graphe de la fonction, tandis que la base se tient sur laxe des X. Lapproximation de lintgrale
est alors caluce en ajoutant les surfaces (base multiplie par hauteur) des rectangles. Ce qui
donne la formule :
I = h
N1

i=0
f(a + i h).
Ecrivez un programme qui permette dapproximer, par la mthode des rectangles, lintgrale
de cos(x). Les valeurs de N, a, b et x seront lues au clavier.
9
10
Chapitre 3
Structures de Donnes
Ce chapitre se concentre sur la notion de structures de donnes et les algorithmes qui tournent
autour. Jusqu prsent, les objets manipuls dans nos programmes taient simples, e.g., int,
char, ou encore double. Nous allons aborder maintenant des objets plus complexes. Tout
dabord, les exercices porteront sur une des structures de donnes les plus courantes, les tableaux
(Sec. 3.1). Ensuite, nous aborderons une variante des tableaux, savoir les chanes de caractres
(Sec. 3.2). Nous nous exercerons ensuite manipuler des structures de donnes qui permettent
davoir, sous un mme nom, plusieurs variables de types dirents (Sec. 3.3). Nous nirons ce
chapitre avec les chiers (Sec. 3.4).
3.1 Tableaux
3.1.1 Tableaux Unidimensionnels
Exercice 1 Ecrivez un programme qui remplit un tableau de N entiers (N tant dni via
une instruction #define) et calcule, ensuite, la somme des lments du tableau.
Exercice 2 Ecrivez un programme qui lit au clavier 10 nombres entiers et les place dans un
tableau avant den rechercher le maximum et le minimum. Attention, vous ne pouvez utiliser
quune seule boucle pour la recherche du maximum et du minimum.
Exercice 3 Ecrivez un programme qui calcule le produit scalaire de deux vecteurs dentiers
U et V (de mmes dimensions). Les valeurs contenues dans U et V seront introduites au clavier
par lutilisateur.
Pour rappel, dans un repre orthonorm, le produit scalaire de deux vecteurs se calcule
comme suit : Soient u = (x, y) et v = (x

, y

), le produit scalaire de u et v se calcule comme


u v = x x

+ y y

Exercice 4 Calculez, pour une valeur X donne (de type float), la valeur numrique dun
polynme de degr n :
P(X) = A
n
X
n
+ a
n1
X
n1
+ . . . + A
1
X
1
+ A
0
X
0
Les valeurs des coecients A
n
, A
n1
, . . . , A
1
, A
0
seront entres au clavier et mmorises dans
un tableau A de type float et de dimension n + 1.
11
Pour viter les opration dexponentiation, vous veillerez utiliser le schma dHorner :
A
n
..
X + A
n1
. .
. . .
..
X + A
0
Exercice 5 Un tableau A de dimension N + 1 contient N valeurs entires tries par ordre
croissant, la N + 1ime valeur tant indnie. Ecrivez un programme permettant dinsrer une
valeur val donne au clavier dans le tableau A de manire obtenir un tableau de N +1 valeurs
tries.
Exercice 6 Le crible dEratosthne permet de dterminer les nombres premiers infrieurs une
certaine valeur N. On place dans un tableau unidimensionnel tab les nombres entiers compris
entre 1 et N. Lalgorithme consiste, pour chaque lment tab[i] du tableau, rechercher parmi
tous les suivants (dindices i + 1 N), ceux qui sont des multiples et les liminer (en les
remplaant, par exemple, par 0). Lorsque lensemble du tableau a subi ce traitement, seuls les
nombres premiers du tableau nont pas t limins.
Ecrivez un programme permettant de trouver, grce au crible dEratosthne, les nombres
premiers infrieurs 500.
Exercice 7 Ecrivez un programme qui lit au clavier les points de N lves dune classe pour
un devoir et les mmorise dans un tableau N lments. Les notes saisies sont comprises entre
0 et 60.
Une fois les notes obtenues, il est demand de rechercher et dacher :
la note maximale
la note minimale
la moyenne des notes
Exercice 8 Cet exercice complte lexercice prcdent. Une fois le code de lExercice 7 crit, il
est demand de le modier comme suit : partir des points des lves, crer un tableau (appelons
le notes) de dimension 7 qui est compos de la faon suivante :
notes[6] contient le nombre de notes 60.
notes[5] contient le nombre de notes comprises entre 50 et 59.
notes[4] contient le nombre de notes comprises entre 40 et 49.
. . .
notes[0] contient le nombre de notes comprises entre 0 et 9.
Votre programme va devoir acher lcran un graphique de barreaux (i.e., un histogramme)
reprsentant le tableau notes. Utilisez les symboles ####### pour la reprsentation des
barreaux et achez le domaine des notes en dessous du graphique.
Un exemple de ce que votre programme devra acher :
La note maximale est 58
La note minimale est 13
La moyenne des notes est 37.250000
12
6 > #######
5 > ####### #######
4 > ####### ####### #######
3 > ####### ####### ####### #######
2 > ####### ####### ####### ####### #######
1 > ####### ####### ####### ####### #######
+-------+-------+-------+-------+-------+-------+-------+
I 0 - 9 I 10-19 I 20-29 I 30-39 I 40-49 I 50-59 I 60 I
Pour cet exercice, il est plus quimpratif de commencer par rchir au problme en iden-
tiant les divers sous-problmes. Prenez le temps de bien rchir avant de commencer coder.
3.1.2 Tableaux Multidimensionnels
Exercice 1 Ecrivez un programme qui remplit un tableau de 12 lignes et 12 colonnes laide
des caractres 1, 2 et 3 tel que :
1
1 2
1 2 3
1 2 3 1
1 2 3 1 2
1 2 3 1 2 3
1 2 3 1 2 3 1
1 2 3 1 2 3 1 2
1 2 3 1 2 3 1 2 3
1 2 3 1 2 3 1 2 3 1
1 2 3 1 2 3 1 2 3 1 2
1 2 3 1 2 3 1 2 3 1 2 3
Exercice 2 Ecrivez un programme qui met zro les lments de la diagonale dune matrice
carre A donne (i.e., remplie par lutilisateur au clavier).
Exercice 3 Ecrivez un programme qui construit et ache une matrice carre unitaire U de
dimension N.
Pour rappel, une matrice unitaire est une matrice telle que :
u
ih
=
_
1, si i = j
0, si i = j
Exercice 4 Ecrivez un programme qui eectue la transposition t
A
dune matrice A de dimen-
sions N M en une matrice B de dimension M N. La matrice A sera remplie au clavier par
lutilisateur.
Pour rappel, la transpose dune matrice se calcule comme suit : Si B = t
A
alors (i, j)
1, . . . , m1, . . . , n, b
i,j
= a
j,i
. Exemple, si A =
_
1 2 3
4 5 6
_
, alors t
a
=
_
_
1 4
2 5
3 6
_
_
.
13
Exercice 5 Ecrivez un programme qui eectue laddition de deux matrices A et B de mme
dimension N M. Les deux matrices A et B seront construites au clavier par lutilisateur et le
rsultat de laddition sera plac dans une matrice C avant dtre ach lcran.
Pour rappel, laddition matricielle est dnie comme suit : Si A et B sont deux matrices de
dimension NM, alors la matrice C est obtenue via i 1, . . . , N, j 1, . . . , M, c
i,j
= a
i,j
+b
i,j
.
Exercice 6 Ecrivez un programme qui recherche dans une matrice A donne (i.e., introduite
au clavier par lutilisateur) les lments qui sont la fois maximum sur leur ligne et minimum
sur leur colonne. Ces lments sont appels des points-cols. Votre programme doit acher les
positions et les valeurs de tous les points-cols de votre matrice A.
Par exemple, pour la matrice
_
_
1 2 3
4 5 6
7 8 9
_
_
le rsultat sera le suivant :
point-col: (0,2): 3
3.2 Chanes de Caractres
Exercice 1 Ecrivez un programme dterminant le nombre de lettres e (minuscules) prsentes
dans un texte de moins dune ligne (suppose ne pas dpasser 132 caractres) fourni au clavier.
Exercice 2 Ecrivez un programme qui lit au clavier un mot (dau plus 30 caractres) et qui
lache lenvers.
Exercice 3 Ecrivez un programme qui lit au clavier un mot (dau plus 50 caractres) et qui
dtermine si le mot entr est un palindrome ou non. Commencez, avant de coder, par dlimiter
les dirents sous-problmes et, ensuite, proposez un invariant.
Pour rappel, un palindrome est un texte dont lordre des mots reste le met quon le lise de
gauche droite ou de droite gauche. Par exemple : kayak, hecavalavache ou encore Narine
alla en Iran.
Exercice 4 Ecrivez un programme qui lit des mots au clavier et les ache aprs les avoir
converti en louchebem (i.e., langage des bouchers).
Cette conversion consiste :
reporter la premire lettre du mot en n de mot, suivie des lettres e et m.
remplacer la premire lettre du mot par la lettre l.
Par exemple, vision devient lisionvem, vache devient lachevem ou encore bonne de-
vient lonnebem.
Pour simplier, les mots entrs par lutilisateur font cinq caractres.
Exercice 5 Ecrivez un programme permettant de saisir une phrase au clavier (maximum 300
caractres) et qui ache, ensuite, le nombre de mots contenu dans la phrase.
Exercice 6 Ecrivez un programme permettant de saisir, au clavier, une chane de caractres
(maximum 100 caractres) et une sous-chane (maximum 5 caractres) et qui indique, ensuite,
combien de fois la sous-chane est prsente dans la chane de caractres principale.
14
3.3 Structures
Exercice 1 A laide dune structure, crivez la dclaration de type pour reprsenter une dure
avec trois champs entiers reprsentant (respectivement) les heures, les minutes et les secondes.
Exercice 2 A laide dune structure, crivez la dclaration de type pour reprsenter une per-
sonne. Une personne sera reprsente par son nom et son prnom (maximum 20 caractres dans
les deux cas), son ge et son sexe (M ou F).
Exercice 3 Maintenant, on veut aussi considrer les enfants dune personne. Chaque personne
dispose de maximum 20 enfants. Modiez le type propos dans lexercice prcdent an dy
ajouter le nombre denfants eectif et les enfants dune personne. Les enfants dune personne
seront reprsents par un tableau de personnes.
251,0-1 62
Exercice 4 Un grossiste en composants lectroniques vend quatre types de produits :
des cartes mres (code 1)
des processeurs (code 2)
des barrettes mmoire (code 3)
des cartes graphiques (code 4)
Chaque produite possde une rfrence (qui est un nombre entier), un prix en euros et des
quantits disponibles.
Il est demand de
1. dnir type pour reprsenter un produit
2. dcrire un programme qui permet un utilisateur de saisir une commande dun produit.
Lutilisateur saisit les quantits commandes et les donnes du produit. Lordinateur ache
toutes les donnes de la commande, y compris le prix.
Exercice 5 Ecrivez un programme qui lit au clavier des informations dans un tableau de
structures de type point dni comme suit :
typedef struct{
int num;
float x;
float y;
}point;
Le nombre dlments du tableau sera x par une instruction #define.
Ensuite, le programme ache lcran lensemble des informations prcdentes.
Exercice 6 Dans un premier temps, dnissez un type permettant de reprsenter une fraction
mathmatique. Ecrivez ensuite un programme qui place n (e.g., n = 50) dans un tableau et
ache ensuite les fractions lcran.
Dans un second temps, compltez votre programme pour quil ache lcran toutes les
fractions simplies.
Exercice 7 On souhaite construire une structure de donnes, appele EtatCivil, permettant
denregistrer le nom dune personne, sa date de naissance, la ville o elle rside et le code postal
de la ville. Dnissez un type pour cette structure ainsi quun tableau qui permet de saisir ces
dix ensembles dinformations et qui les ache ensuite lcran.
15
Exercice 8 On souhaite enregistrer les notes de mathmatiques et de physique pour une classe
de 35 lves et calculer, pour chacun deux, la moyenne de ses notes. Proposer une structure
de donnes pertinentes et crivez un programme permettant deectuer la saisie des notes puis
lachage des rsultats.
3.4 Fichiers
Exercice 1 Ecrivez un programme permettant dacher, lcran, le contenu dun chier en
numrotant les lignes. Ces lignes ne devront jamais dpasser plus de 80 caractres.
Exercice 2 Ecrivez un programme qui permet de crer squentiellement un chier rpertoire
comportant pour chaque personne
nom (20 caractres maximum)
prnom (15 caractres maximum)
ge (entier)
numro de tlphone (11 caractres maximum)
Les informations relatives aux direntes personnes seront lues au clavier.
Exercice 3 Ecrivez un programme permettant, partir du chier cr par lexercice prcdent,
de retrouver les informations correspondant une personne de nom donn (linformation sur le
nom est donne au clavier).
Exercice 4 Ecrivez un programme permettant de saisir 20 mots de 20 caractres maximum
et de les enregistrer ligne par ligne dans un chier appel mots.txt. Ecrivez ensuite un autre
programme qui permet de relire le chier et qui en ache le contenu lcran.
Exercice 5 On propose dajouter au programme crit lExercice 8 (Sec. ??) une squence
dinstructions permettant dcrire les 35 enregistrements contenant les noms, les notes et moyennes
de chaque lve dans un chier appel scol.txt.
Une fois ces modications eectues, crivez un nouveau programme permettant, partir de
ce chier scol.txt dacher les rsultats scolaires de la classe.
16
Chapitre 4
Modularit du Code
Jusqu prsent, les programmes raliss ont t constitus dun seul et unique bloc de code.
Hors, il est possible de dcouper le code en diverses fonctions, fonctions pouvant tre appeles
nimporte quand dans le programme. Une programme C devient alors une succession de fonctions,
la fonction int main() tant la fonction principale.
Lavantage de cette dcoupe en fonctions, cest quelle sapplique parfaitement la dcoupe
en sous-problmes. Chaque sous-problme est reprsent, maintenant, par une fonction. Et pour
peu que le sous-problme soit un minimum gnrique, il pourra tre rutilis maintes fois durant
la vie du programme.
Dans ce chapitre, nous allons nous exercer dnir, documenter, et utiliser des fonctions.
Tout dabord, nous allons commencer par lire et comprendre du code qui implique plusieurs
fonctions (Sec. ??). Nous allons ensuite crire des fonctions et les utiliser dans du code (Sec. ??).
La Sec. ?? va nous montrer comment eectuer un passage de paramtres par adresse et, donc,
comment une fonction peut renvoyer plus dun rsultat.
4.1 Lecture de Code
Exercice 1 Soit le code suivant
#include <stdio.h>
int fct(int r){
return 2*r;
}//fin fct()
int main(){
int n, p=5;
n = fct(p);
printf("p = %d, n = %d\n", p, n);
return 0;
}//fin main()
Quel est le rsultat, lcran, de ce programme ?
17
Exercice 2 Soit le code suivant :
#include <stdio.h>
int n=10, q=2;
int fct(int p){
int q;
q = 2 * p + n;
printf("B: dans fct, n = %d, p = %d, q = %d\n", n, p, q);
return q;
}//fin fct()
void f(){
int p = q * n;
printf("C: dans f, n = %d, p = %d, q= %d\n", n, p, q);
}//fin f()
int main(){
int n=0, p=5;
n = fct(p);
printf("A: dans main, n = %d, p = %d, q = %d", n, p, q);
f();
return 0;
}//fin main()
Quel est le rsultat, lcran, de ce programme ?
4.2 Ecriture de Fonctions
Pour chacune des fonctions implmenter dans cette section, il est sous-entendu que chaque
fonction doit tre correctement implmente.
Exercice 1 Ecrivez une fonction C qui calcule la moyenne de trois nombres passs en para-
mtre. Ecrivez ensuite le programme principal qui saisit trois nombres au clavier et ache leur
moyenne.
Exercice 2 Ecrivez une fonction C qui ache laire dun triangle dont la base et la hauteur
sont passes en paramtre. Ecrivez ensuite le programme principal qui saisit la base et la hauteur
dun triangle au clavier et ache laire du triangle.
Exercice 3 Ecrivez une fonction qui reoit en arguments deux nombres ottants et un caractre
et qui fournit un rsultat correspondant une des quatre oprations appliques ses deux
premiers arguments en fonction de la valeur du dernier, savoir : addition pour le caractre
+, soustraction pour le caractre -, multiplication pour le caractre * et division pour le
caractre /. Attention, tout autre caractre que lun des quatre cits sera interprt comme
une addition. De plus, on ne tiendra pas compte des risques de division par zro.
Ecrivez ensuite un petit programme C utilisant cette fonction.
18
Exercice 4 Ecrivez un programme permettant de calculer la valeur du nombre e, base des
logarithmes npriens, en considrant que
e =
+

k=0
1
k!
.
Adoptez une approche par dcoupe en sous-problmes, chaque sous-problme tant rgl par
une fonction particulire.
Exercice 5 Ecrivez un programme permettant de calculer la valeur de e
x
laide du dvelop-
pement en srie suivant :
e
x
=
+

k=0
x
k
k!
.
Adoptez une approche par dcoupe en sous-problmes.
Pour le calcul de x
k
, utilisez la fonction double pow(double base, double exposant) qui
se trouve dans math.h.
Exercice 6 Soit la fonction mathmatique f dnie par
f(x) =
(2x
2
+ 3)(x
2
1)

3x
2
+ 1
1. Ecrivez une fonction C qui retourne la valeur de f(x) pour un point x pass en paramtre.
2. Une approximation de la drive f

de la fonction f est donne en chaque point x pour h


assez petit (i.e., proche de 0) par :
f

(x)
f(x + h) f(x)
h
.
Ecrivez la fonction C qui calcule une approximation de la drive f

de f en un point x
entr au clavier. On passera la valeur de h et de x en paramtre de la fonction.
3. La drive seconde de f est la drive de la drive. Ecrivez une fonction C qui calcule une
approximation de la drive seconde f

de f en un point x entr au clavier. Lapproximation


est calcule comme suit :
f

(x)
f(x + h) + f(x h) 2f(x)
hx
2
.
On passera la valeur de h et de x en paramtre de la fonction.
4. Ecrivez une fonction C qui dtermine le signe de la drive seconde de f en fonction de x.
On pourra faire un programme principal qui lit x au clavier et ache le rsultat.
5. Ecrivez une fonction C qui donne le choix lutilisateur dacher la valeur de la fonction
f, de sa drive premire ou de sa drive seconde en point x lu au clavier.
Exercice 7 Commencez par dnir une structure de donnes permettant de grer un tudiant.
Un tudiant est reprsent par son nom, son prnom, son matricule, 10 notes dexamen, sa
moyenne, et son classement.
Ecrivez ensuite une fonction qui remplit un tableau de 30 tudiants. Les informations concer-
nant un tudiant sont donnes, au clavier, par lutilisateur. Attention, la moyenne et le classement
ne sont pas des donnes lire au clavier.
19
Ecrivez ensuite une fonction qui prend en argument un tableau dtudiants et qui calcule la
moyenne de chaque tudiant ainsi que la moyenne de la promo.
Sur base de cette fonction, crivez une fonction qui calcule le classement de chaque tudiant.
Ecrivez une fonction qui rordonne les tudiants en fonction de leur classement (du premier
au dernier).
An de pouvoir garder une trace des tudiants et de leurs rsultats, crivez une fonction qui
sauve le contenu du tableau dtudiants dans un chier. Le nom du chier est pass en argument
de la fonction de sauvegarde.
Enn, crivez la fonction main() permettant de manipuler les direntes fonctions crites.
Dans cette fonction main(), vous veillerez bien dclarer le tableau dtudiants.
4.3 Passage de Paramtres
Exercice 1 Soit le code suivant :
#include <stdio.h>
char fonc1(char a, char b){
a = P;
b = Q;
if(a<b)
return a;
else
return b;
}//fin fonc1()
char fonc2(char *c1, char *c2){
*c1 = P;
*c2 = Q;
if(*c1==*c2)
return *c1;
else
return *c2;
}//fin fonc2()
int main(){
char a = X;
char b = Y;
char i, j;
i = fonc1(a, b);
printf("a = %c, b = %c\n", a, b);
j = fonc2(&a, &b);
printf("a = %c, b = %c\n", a, b);
return 0;
}//fin main()
Rpondez ces questions :
20
1. Quelle est la valeur aecte i ?
2. Quelle est la valeur aecte j ?
3. Quache ce programme ?
Exercice 3 Soit la fonction C suivante :
void modifie(int a, int *res){
if(a>0)
*res = a+1;
else
if(a<0)
*res = a-1;
else
*res = a;
}//fin modifie()
Pour chacun des programmes ci-dessous :
1. si le programme est correct, dire ce quil ache
2. si il ne lest pas, dire pourquoi.
int main(){
int a=3;
int res;
modifie(a, res);
return 0;
}//fin main()
int main(){
int a=3;
int res, *p;
p = &res;
modifie(a, p);
return 0;
}//fin main()
int main(){
int a=3;
modifie(a, a);
return 0;
}//fin main()
int main(){
int a=3;
int res;
modifie(a, &res);
return 0;
}//fin main()
int main(){
int a=3;
int res, *p;
p = &res;
modifie(a, &p);
return 0;
}//fin main()
int main(){
int a=3;
modifie(a, &a);
return 0;
}//fin main()
Exercice 4 Soit la fonction main() suivante appelant une fonction calcul() qui ralise deux
oprations : la somme et la dirence de deux entiers.
#include <stdio.h>
int main(){
int a=12, b=45;
int somme, difference;
calcul(a, b, &somme, &difference);
printf("a+b=%d, a-b=%d\n", somme, difference);
21
return 0;
}//fin main()
Donnez le prototype de la fonction calcul() et, ensuite, crivez le code de cette fonction.
22