Vous êtes sur la page 1sur 10

Partiel CINI LI115 28 octobre 2010

Universit Pierre et Marie Curie

Nom :
Prnom :
Groupe :

Initiation la programmation imprative en C LI115


Partiel du 28 octobre 2010 (1 heure 30)
Seul le mmento est autoris
Les calculatrices, baladeurs et autres appareils lectroniques sont interdits. Les tlphones mobiles doivent
tre teints et rangs dans les sacs. Le barme sur 40 points na quune valeur indicative. Avant de commencer, vrifiez que votre copie contient 10 pages avec 12 questions.
Attention : Dans les programmes complter, les parties remplir sont gnralement mises en vidence
par des traits, mais il est possible que dans certains cas vous soyez amens ajouter des lignes vous-mmes.

Question de cours (7 pts)

Question 1 (2 points)
Quelles sont les valeurs contenues dans le tableau tab aprs la dclaration suivante :
int tab[6];

Rponse :

Question 2 (2 points)
Quelle boucle est la mieux adapte pour afficher toutes les valeurs dun tableau de 10 entiers compltement rempli ? Justifiez.
Rponse :

NOM :

Prnom :

Groupe :

CINI

Question 3 (3 points)
Parmi les dclarations suivantes, lesquelles sont correctes (cest--dire ne provoquent aucune erreur lors
de la compilation) ?
2 int i = a;
2 int tab[5] = {5.4, 3.5};
2 char c = "w";
2 bool b = 0;
2 float f = 3 ;
2 bool b = vrai ;

Debug (6 pts)

Question 4 (6 points)
Nous considrons le programme suivant qui affiche la somme des N premiers entiers pairs :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

#include <cini.h>
#difine N 8
int main() {
int res, i ;
for(i=2, i<= N*2, i = i+2){
res = res + i;
}
CINI_print_string("la somme des ");
CINI_print_int(N);
CINI_print_string(" premiers entiers pairs est : ");
CINI_print_int_(res);
}

Nous obtenons les erreurs et avertissements suivants la compilation :


debug.c:2:2: error: invalid preprocessing directive #difine
debug.c: In function main:
debug.c:8:16: error: N undeclared (first use in this function)
debug.c:8:16: note: each undeclared identifier is reported only once for each f
debug.c:8:19: warning: left-hand operand of comma expression has no effect
debug.c:8:28: error: expected ; before ) token
debug.c:8:28: error: expected expression before ) token
debug.c:15:3: warning: implicit declaration of function CINI_print_int_
debug.c:17:1: warning: control reaches end of non-void function
Compilation choue.
Corrigez ce programme pour quil ny ait plus ni erreur ni avertissement lors de la compilation et que
le rsultat affich par le programme soit correct (indiquez simplement les lignes que vous modifiez,
ajoutez, retirez ainsi que le nouveau contenu).
Partiel LI115 28 octobre 2010

UPMC Licence dinformatique

page 2 sur 10

NOM :

Prnom :

Groupe :

CINI

Rponse :

Boucles et tableaux (7 pts)


Une suite gomtrique de raison r et de premier terme u0 est dfinie par :
si n = 0 alors un = u0
pour tout n > 0, un = r un1

Question 5 (3 points)
Compltez le programme suivant afin dinitialiser le tableau dentiers tabInt avec les N premiers
termes de la suite gomtrique de raison R et premier terme U0. Ainsi, la case dindice i du tableau
contiendra le terme ui de la suite.

Partiel LI115 28 octobre 2010

UPMC Licence dinformatique

page 3 sur 10

NOM :

Prnom :

Groupe :

CINI

Rponse :
#include <cini.h>
#define N 10
#define R 4
#define U0 7

int main() {
int tabInt[N] ;
______________________________________
______________________________________
______________________________________
______________________________________
______________________________________
______________________________________
______________________________________
______________________________________
______________________________________
return 0;
}

Question 6 (4 points)
tant donn le tableau tabInt initialis avec les N premiers termes de la suite, nous souhaitons dterminer quel est le premier terme de la suite strictement suprieur une variable seuil. Donnez les
instructions permettant dafficher lindice et la valeur de ce terme. Si aucun des N premiers termes de la
suite ne dpasse la valeur de la variable seuil, le message "Aucune valeur trouve" sera affich.

Partiel LI115 28 octobre 2010

UPMC Licence dinformatique

page 4 sur 10

NOM :

Prnom :

Groupe :

CINI

Rponse :
int seuil = 1000;
______________________________________
______________________________________
______________________________________
______________________________________
______________________________________
______________________________________
______________________________________
______________________________________
______________________________________

Alternatives, boucles et programmes (20 pts)


Certaines questions de cet exercice peuvent tre traites indpendamment.
Nous souhaitons crire un programme permettant dafficher le calendrier dun mois pour un anne spcifique (le mois et lanne seront saisis par lutilisateur). Par exemple, si lutilisateur saisit le numro de
mois 10 et lanne 2010, nous afficherons le calendrier doctobre 2010 soit :
Vendredi 1
Samedi 2
Dimanche 3
Lundi 4
Mardi 5
...

Question 7 (2 points)
Compltez le programme suivant afin de demander lutilisateur de saisir le mois et lanne dont il
souhaite afficher le calendrier. Le mois sera saisi sous forme dun nombre compris entre 1 et 12 (1 pour
janvier, 2 pour fvrier, ..., 12 pour dcembre) et lanne sera saisie sur 4 chiffres (par exemple 2010). Il
nest pas demand de vrifier la validit des valeurs saisies par lutilisateur.

Partiel LI115 28 octobre 2010

UPMC Licence dinformatique

page 5 sur 10

NOM :

Prnom :

Groupe :

CINI

Rponse :
#include <cini.h>
int main() {
int mois, annee;
/* Saisie des valeurs de mois et dannee : A COMPLETER */
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
CINI_print_string("mois choisi : ");
CINI_print_int(mois);
CINI_print_string("/");
CINI_print_int(annee);
CINI_newline();
return 0;
}

Question 8 (2 points)
Nous souhaitons prsent dterminer le nombre de jours dans le mois considr. Les mois de janvier,
mars, mai, juillet, aot, octobre et dcembre comptent 31 jours. Le mois de fvrier compte 28 jours sauf
en cas danne bissextile o le mois compte alors 29 jours. Tous les autres mois comptent 30 jours.
Pour le mois de fvrier, il est donc ncessaire de dterminer si lanne considre est bissextile. Une
anne est bissextile si elle est divisible par 4 et pas par 100, ou si elle est divisible par 400. Par exemple,
2008 et 2000 sont bissextiles mais pas 1900.
Lanne considre est stocke dans la variable annee. Donnez la formule boolenne qui vaut la valeur
vrai si lanne est bissextile et la valeur faux sinon.
Rponse :

Partiel LI115 28 octobre 2010

UPMC Licence dinformatique

page 6 sur 10

NOM :

Prnom :

Groupe :

CINI

Question 9 (3 points)
En vous aidant de la question prcdente, donnez les instructions permettant de dterminer le nombre de
jours nbJ du mois mois. Nous supposerons que les variables mois et annee ont t prcdemment
dclares et initialises.
Rponse :
int

nbJ;

/*Determination du nombre de jours dans le mois : A COMPLETER*/


_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________

CINI_print_string("Il y a ");
CINI_print_int(nbJ);
CINI_print_string(" jours dans le mois");
CINI_newline();

Partiel LI115 28 octobre 2010

UPMC Licence dinformatique

page 7 sur 10

NOM :

Prnom :

Groupe :

CINI

Question 10 (4 points)
Afin de dterminer quel jour de la semaine correspond une date donne, nous allons utiliser la formule de Zeller, qui est la suivante (on commence par calculer une valeur temp qui permet ensuite de
dterminer le nombre de Zeller zeller) :
temp = (j + b2.6m 0.2c + a + ba/4c + bc/4c 2c (1 + b)bm/11c + 35)(mod 7)
Si temp < 0 alors
zeller = temp + 7
sinon
zeller = temp
o :
b.c correspond la partie entire infrieure.
j correspond au numro du jour dans le mois.
m correspond un code mois : avec mars comme premier mois (m = 1) et fvrier comme dernier mois
(m = 12). Ainsi, si mois est le numro du mois, on a m = mois 2 si mois > 2 et m = mois + 10
sinon.
c est le nombre de centaines des annes.
a est lanne dans le sicle.
b = 1 si lanne est bissextile et 0 sinon.
La valeur de Zeller calcule est un numro correspondant une jour de la semaine : 0 pour dimanche, 1
pour lundi, ..., 6 pour samedi.
Par exemple, pour le 28/10/2010, on obtient : j vaut 28, m vaut 8, c vaut 20, a vaut 10 et b vaut 0.
Donnez les instructions C qui, tant donnes les valeurs du mois et de lanne, calculent les valeurs de
m, c, a et b. Nous supposerons que les variables mois et annee ont t prcdemment dclares et
initialises.
Rponse :
int m, c, a, b;
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________

Question 11 (3 points)
Traduisez la formule de Zeller en langage C et compltez le code ci-dessous afin que la variable zeller
ait pour valeur le rsultat de la formule de Zeller. Nous supposerons que les variables j, m, c, a et b ont
t initialises.
Partiel LI115 28 octobre 2010

UPMC Licence dinformatique

page 8 sur 10

NOM :

Prnom :

Groupe :

CINI

Rponse :
int j, m, c, a, b, zeller;
/* Initialisation de j, m, c, a, b */
/* Application de la formule de Zeller : A COMPLETER*/
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________

Question 12 (6 points)
Pour chaque jour du mois, nous souhaitons enfin afficher le nom du jour et son numro. En vous appuyant
sur vos rponses aux questions prcdentes, compltez le code suivant, afin de raliser cet affichage.
Nous supposerons que les valeurs de mois et annee ont t pralablement saisies et que les variables
de j, m, c, a, et b ont t initialises. Les parties du code complter sont identifies par des traits.

Partiel LI115 28 octobre 2010

UPMC Licence dinformatique

page 9 sur 10

NOM :

Prnom :

Groupe :

CINI

Rponse :
int mois, annee, nbJ;
int j, m, c, a, b, zeller;
/* Saisie des valeurs de mois et dannee */
/*Determination du nombre de jours dans le mois */
/* calcul de la valeur de b suivant */
/* que lannee est bissextile ou non */
/* Initialisation de m, c, a */

/* Parcours de tous les jours du mois */


for (j=__________________________________) {
/* calcul du numero du jour avec la formule de Zeller */
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
/* affichage */
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
}

Partiel LI115 28 octobre 2010

UPMC Licence dinformatique

page 10 sur 10