EC
TC
P116
–
Algorithmique
et
structures
de
données
1
Contrôle
Continu
du
03
novembre
2012
–
1h30
(Enseignants
:
R.
Houé,
A.
Letouzey)
1. Parmi
les
assertions
suivantes,
laquelle
est
fausse
?
(1pt)
a. une
variable
est
définie
par
son
type,
son
nom,
sa
valeur
b. une
variable
est
caractérisée
par
un
type,
un
nom,
une
valeur
et
une
adresse
c. pour
déclarer
une
variable
en
C,
il
faut
absolument
définir
son
nom
et
son
type
d. pour
déclarer
une
variable
en
C,
il
faut
absolument
déclarer
son
nom,
son
type,
et
sa
valeur
2. En
langage
C,
le
signe
=
est
utilisé
pour
:
(1pt)
a. une
écriture
ou
une
écriture
b. une
affectation
de
variable
c. une
déclaration
de
variable
d. une
suppression
de
variable
3. Soit
un
algorithme
qui
demande
à
l’utilisateur
de
saisir
un
nombre
entier
positif,
lui
fait
répéter
la
saisie
jusqu’à
ce
que
le
nombre
saisi
soit
positif.
L’instruction
à
utiliser
pour
faire
répéter
la
saisie
est
:
(1pt)
a. une
affectation
b. une
lecture/écriture
c. une
boucle
d. un
test
4. En
langage
C,
le
mot
clé
float
représente
:
(1pt)
a. une
variable
b. une
valeur
c. un
type
d. une
instruction
5. En
langage
C,
le
mot
clé
TantQue
est
utilisé
pour
:
(1pt)
a. une
boucle
b. un
test
c. rien
du
tout
d. une
affectation
6. En
langage
C,
le
mot
clé
if
est
utilisé
pour
:
(1pt)
a. une
boucle
b. un
test
c. rien
du
tout
d. une
affectation
Contrôle
Continu
–
Algorithmique
et
structures
de
données
1
1 / 4
7. Que
produit
l’algorithme
suivant
?
(justifiez
votre
réponse)
(1pt)
Variables A, B, C Caractères
Début
A ← "saint-";
B ← "jérôme";
C ← A + B;
Fin
Réponse
:
une
erreur
d’exécution
car
l’opérateur
‘+’
(qui
est
numérique)
a
été
utilisé
sur
des
variables
non
numériques
Variables A, B, C Caractères
Début
A ← "saint-";
B ← "jérôme";
C ← A ou B;
Fin
Réponse
:
une
erreur
d’exécution
car
l’opérateur
‘ou’
(qui
est
booléen)
a
été
utilisé
sur
des
expressions
non
logiques
Variables X, Y, Z Caractères
Début
X ← 1000;
Y ← 10;
Z ← A & B;
Fin
Réponse
:
l’oubli
des
"
"
dans
la
déclaration
de
X
et
Y
provoque
une
erreur
d’exécution
car
l’opérateur
‘&’
est
alphanumérique
10. L’algorithme
ci-‐après
permet-‐il
d’échanger
(permuter)
les
valeurs
des
deux
variables
matiere1
et
matiere2 ?
(justifiez
votre
réponse)
(1pt+0,5pt)
Variables matiere1, matiere2, matiere3 Caractères
Début
matiere1 ← "Algorithmique";/*matiere1="Algorithmique",
matiere2
est
nulle*/
matiere2 ← "Bureautique";/*matiere1="Algorithmique",
matiere2="Bureautique"*/
matiere3 ← matiere2;/*matiere1="Algorithmique",
matiere2="Bureautique"*/
matiere1 ← matiere3;/*matiere1="Bureautique",
matiere2="Bureautique"*/
matiere2 ← matiere1;/*matiere1="Bureautique",
matiere2="Bureautique"*/
Fin
Réponse
:
l’analyse
de
la
trace
d’exécution
de
l’algorithme
montre
que
les
valeurs
des
dites
variables
ne
sont
pas
échangées
(matiere1
et
matiere2
prennent
toutes
la
valeur
"Bureautique")
Réponse : pour n=3, on obtient 6 et pour n=5, obtient 120
12. Ecrire
(en
pseudo-‐langage)
un
algorithme
qui
demande
à
l’utilisateur
de
saisir
un
nombre
entier
positif,
puis
affiche
la
table
de
multiplication
de
ce
nombre
jusqu’à
9.
Par
exemple,
si
l’utilisateur
saisit
2,
le
programme
affichera
:
(2,5pts)
2
x
1
=
2
2
x
2
=
4
2
x
3
=
6
…
2
x
9
=
18
NB : on ne traitera pas le cas où l’utilisateur saisirait une valeur aberrante.
Réponse
:
Variables i, n Entiers
Début
Ecrire "Veuillez saisir un nombre entier : ";
Lire n;
i ← 1;
TantQue i <= 9 Faire
Ecrire n, " x ", i, " = ", n*i, "\n";
i ← i + 1;
Fin TantQue
Fin
Contrôle
Continu
–
Algorithmique
et
structures
de
données
1
3 / 4
13. Corrigez
les
erreurs
contenues
dans
le
programme
C
ci-‐après
(on
suppose
qu’un
utilisateur
saisira
toujours
un
entier
positif).
(2,5pts)
#include <iostream>
using namespace std;
main()
{
int f;
float int n; /* n doit être entier (opérateur – utilisé dans n=n-1 */
f ← 1; f=1; /* en C, c’est le signe = qui est utilisé pour l’affectation */
cout << "entrez un entier n : ";
cin >> n >> "\n"; /* cin est un opérateur de lecture, les " " interdits */
while (n > 0) ; /* pas de ; après while, l’instruction n’est pas finie */
{
f = f*n;
n = n-1;
}
cout << "Le résultat est :" << f ; /* oubli du ; et << */
}
14. Ecrire
un
programme
en
langage
C
qui
demande
à
l’utilisateur
de
saisir
deux
nombres
entiers,
soit
a
et
b,
puis
affiche
la
permutation
des
valeurs
saisies
(i.e.
a
prend
la
valeur
de
b
et
b
prend
la
valeur
de
a).
On
ne
demande
pas
gérer
le
cas
où
un
utilisateur
saisirait
une
valeur
aberrante.
(3pts)
Réponse
:
#include <iostream>
using namespace std;
main()
{
int a,b,c;
cout << "veuillez saisir deux nombres entiers a et b :";
cin >> a >> b;
c=a;
a=b;
b=c;
cout << "le résultat de la permutation est :" ;
cout << "a = " << a ;
cout << "b = " << b ;
}