Академический Документы
Профессиональный Документы
Культура Документы
Remarques
• Les questions sont indépendantes dans une large mesure. Vous pouvez utiliser les fonctions écrites dans les questions
précédentes sans les réécrire.
• Si une question vous semble pouvoir être interprétée de plusieurs manières, indiquez celle que vous avez choisie.
• Toutes les fonctions et programmes doivent être rédigés en langage C.
Question 1 1 point
Ecrire un programme qui affiche à l’écran la moyenne de 3 réels double précision qui seront lus au clavier
Question 2 1 point
Ecrire la fonction : double moyenne(double tab[], int nb, int debut, int fin) qui
retourne la moyenne des éléments dont les indices sont compris entre debut et fin. Le tableau tab est un
tableau contenant nb réels double précision.
Question 3 2 points
Ecrire la fonction : void lecture(char* fic, double tab[], int nb) qui lit les nb
éléments du tableau tab de réels double précision dans le fichier texte dont le nom est fic. Le fichier fic
contient les nb réels les uns à la suite des autres. Par exemple, un fichier de 3 éléments aura l’allure
suivante :
3.8 2.9 5.2
Question 4 1 point
En utilisant les 2 fonctions précédentes et en supposant que la fonction void affiche(double
tab[], int nb) qui affiche un tableau existe, écrire un programme qui réalise les actions suivantes :
1. Lecture au clavier du nombre d’éléments contenu dans le fichier
2. Lecture du tableau dans le fichier "donnees.txt"
3. Affichage de ce tableau
4. Calcul puis affichage de la moyenne des éléments de ce tableau
Question 5 1 point
Ecrire la fonction qui échange deux réels double précision.
Question 6 1 point
En utilisant la fonction de la question 5, écrire un programme qui :
1. lit deux réels au clavier
2. affiche ces deux réels
3. échange les deux réels
4. affiche à nouveau ces deux réels
Question 7 1 point
En utilisant la fonction de la question 5, écrire la fonction qui effectue une permutation circulaire de trois
réels double précision.
Question 8 1 point
Ecrire la fonction int indiceval(double val, double tab[], int nb) qui recherche la
valeur val dans le tableau tab de nb réels double précision. Cette fonction retourne l’indice du premier
élément du tableau égal à val, ou –1 si cette valeur n’existe pas dans le tableau.
- 1/5-
Question 9 1 point
Ecrire la fonction double* adresseval(double val, double tab[], int nb) qui
recherche la valeur val dans le tableau tab de nb réels double précision. Cette fonction retourne l’adresse
du premier élément du tableau égal à val, ou NULL si cette valeur n’existe pas dans le tableau.
Question 10 1 point
Ecrire la fonction double* creation(int nb) qui alloue dynamiquement un tableau de nb réels
double précision. Toutes les valeurs du tableau seront mises à –1. Cette fonction retourne l’adresse du
tableau créé ou NULL en cas d’échec d’allocation.
Question 11 1 point
En utilisant la fonction de la question 5, écrire la fonction void echangetab(double tab1[],
double tab2[], int nb) qui échange les nb valeurs des tableaux tab1 et tab2 de réels.
ATTENTION : vous utiliserez ici des pointeurs pour parcourir les tableaux. Vous ne devez pas utiliser
d’indices entiers dans cette fonction.
Question 12 2 points
En utilisant les fonctions précédentes, écrire un programme qui réalise les actions suivantes :
1. Lecture du nombre d’éléments au clavier
2. Création dynamique de 2 tableaux t1 et t2 dont la taille vient d’être lue au clavier.
3. Lecture du tableau t1 dans le fichier "donnees1.txt"
4. Lecture du tableau t2 dans le fichier "donnees2.txt"
5. Echange des valeurs des tableaux t1 et t2
6. Recherche de l’adresse du premier élément nul de t1
7. Remplacer cet élément par la moyenne du tableau t2
Question 13 2 points
Il y a 4 erreurs dans ce programme. Indiquez quelles sont les lignes qui sont incorrectes et pourquoi.
(1) #include <stdio.h>
(2) #include <stdlib.h>
(3) main() { int i;
(4) int* p=NULL;
(5) int t1[20], t2[20], t3[20], t4[];
Question 14 2 points
Ecrire un programme qui calcule Pi comme la limite de la somme de la série :
π 1 1 1 1 1
= 1 − + − + − + ...
4 3 5 7 9 11
Question 15 4 points
Le principe du tri bulle consiste à comparer les valeurs adjacentes d'un tableau et à les échanger si le
premier des deux éléments est supérieur au second.
L'algorithme se déroule ainsi : les deux premiers éléments du tableau sont comparés et ils sont échangés
si le premier élément est supérieur au second. Ensuite, on compare le 2ième et le 3ième et ils sont échangés si le
2ième est supérieur au 3ième, puis comparer le 3ième et le 4ième, etc. jusqu’à comparer le n-1ième et nième inclus.
- 2/5-
Une fois cette étape achevée, il est certain que le dernier élément du tableau est le plus grand. Il suffit
donc de recommencer la même chose en s’arrêtant au n-1ième et les deux derniers éléments du tableau seront
triés : l'algorithme reprend donc pour classer les (n-1) éléments qui restent, puis pour classer les n-2 restants,
… jusqu’à ce qu’il ne reste plus d’éléments à trier.
Ecrire la fonction void tritab(double tab[], int nb) qui trie le tableau tab de nb réels en
utilisant l’algorithme précédent.
- 3/5-
Résumé de la syntaxe du langage C
Structure d’un programme
int main() {
déclaration des variables ;
instructions ;
}
Boucle POUR:
for (<initialisation>; <test_continuation>; <incrementation>) {
<instructions_a_repeter> ;
}
Exemple : for (i=0 ; i< 100 ; i++) { t1[i] = 2*i ; }
Boucle TANTQUE:
<initialisation>
while (<test_continuation>) {
<instructions_a_repeter> ;
<incrementation> ;
}
Exemple : while ( i< 100 ) { t1[i] = 2*i ; i= i+1 ;}
Boucle FAIRE..TANTQUE:
<initialisation>
do {
<instructions_a_repeter> ;
<incrementation> ;
} while (<test_continuation>) ;
Exemple : do { t1[i] = 2*i ; i= i+1 ;} while ( i< 100 ) ;
Fonctions : déclaration
type_retourné nom_de_la_fonction(declaration des parametres de la fonction) {
Declaration des variables ;
Instructions de la fonction ;
}
Exemple :
double max( double a, double b) { double c ;
if (a>b) c =a ;
else c=b ;
return c ;
}
- 4/5-
Déclaration d’un type structure : struct nom_de_la_structure { déclarations des champs ; } ;
Déclaration d’une variable de type structuré: struct nom_de_la_structure nom_de_la_variable;
Exemple : struct complex { double reel ; double imaginaire ; } ; /* Un type complexe*/
struct complex x ; /* x est une variable de type complexe */
Fichiers :
Declaration d’une variable : FILE* nom_de_variable ;
Ouverture :
FILE* fopen(char* nom_du_fichier_a_ouvrir, char* mode_d’ouverture) ;
Allocation dynamique
Allocation d’un espace :
void* calloc(int nombre_d’element_a_allouer, int taille_d’un_element) ;
Libération mémoire :
void free(void* adresse_de_la_zone_a_allouer) ;
- 5/5-