Vous êtes sur la page 1sur 4

UNIVERSITE DENIS SASSOU N’GUESSO Rigueur* Excellence* Lumière

************************************ Année académique 2020-2021


FACULTE DES SCIENCES APPLIQUEES
************************************
OPTION : MATHS-INFOS
******************

ENSEIGNEMENT : ALGORITHME COMPLEXE

TD n° 1 : pointeurs, tableaux et fonctions

Exercice 1 : Vérification des notions sur les pointeurs.


Définir dans la procédure main du langage c
1. Deux variables de type entier i et j
2. Un pointeur p de type entier
3. Initialiser i à 5
4. Initialiser p en lui affectant l’adresse de i
5. Copier la valeur de i dans j en se servant du pointeur p
6. Enfin, changer la donner contenue dans le pointeur p par j+2.
Sans compiler, représenter sous forme d’un tableau la mémoire lors de l’exécution de votre programme.
Exercice 2 :
Expliquer avec un schéma à la puis les opérations du code ci-après :

#include <stdio.h>
main()
{
int i, *p ;
p=&i ;
p++ ;
char c, *q ;
q=&c ;
q++ ;
}

Exercice 3 :
On considère que les déclarations suivantes ont été faites :
int a;
char tab[10];
Une expression avec pointeurs (resp. sans pointeurs) vous est donnée, vous devez la réécrire sans (resp.
avec) l’usage explicite des pointeurs.

main(): procédure principale en langage C


1. *(&a)
2. *tab
3. *(tab + 0)
4. (*tab) + 1
5. &(tab[0])
6. &(tab[i])
7. ++tab[i]

Exercice 4 :
Il est demandé dans cet exercice de représenter en mémoire les données déclarées dans un programme,
ainsi que leurs différentes valeurs, à un moment donné de l’exécution. Pour cela, vous représenterez
l’occupation des données en mémoire dans un tableau à 3 colonnes comme montré ci-dessous :

Identificateur Adresse Valeur


a ? ?
. . .
. . .
. . .
Pour déterminer les adresses, on fera les approximations suivantes :
– les données sont réservées en mémoire dans l’ordre de leur déclaration
– la première adresse démarre à 10001
– l’architecture est 32 bits

#include <stdlib.h>

#include <stdio.h>

int main()

int a = 10;
int b = 5;
int tab[3] = {1,2,3};
int *p_int;
******************************************************************************
tab[0] = a;
*(tab + 1) = b;
p_int = tab + 2;
******************************************************************************

*p_int = *(p_int - 1);


--p_int;
*p_int = *(p_int - 1);
--p_int;
*p_int = *(p_int + 2);
return EXIT_SUCCESS;
}

main(): procédure principale en langage C


Le programme est donné ci-dessus. Notez que le programme fait une utilisation abusive des pointeurs,
l’objectif étant simplement de vous familiariser avec la syntaxe et la sémantique des instructions
manipulant des pointeurs
Représenter l’occupation mémoire de ce programme.
Exercice 5 :
Nous voulons écrire un programme qui, étant donné un tableau d’entiers déjà initialisé, demande à
l’utilisateur quel entier chercher et affiche ensuite le nombre d’occurrences de cet entier dans le tableau.
1. Écrire le programme en utilisant l’opérateur [ ].
2. Écrire le programme en utilisant explicitement les pointeurs pour accéder aux éléments du
tableau, c’est-à-dire sans utiliser une variable d’indice.
Exercice 6 :
Soit un tableau à deux dimensions de 5 par 5 entiers complètement initialisé :
62356
46261
13679
16368
60146
Question : Effectuer les actions suivantes
 Afficher le tableau
 Afficher le tableau constitué uniquement des lignes d’indice pair
 Afficher le tableau constitué uniquement des élément d’indice impair de chaque ligne
 Afficher la diagonale (de gauche à droite)
Exercice 7 :
Ecrire un programme qui échange le triangle inférieur avec le triangle supérieur dans le tableau à deux
dimensions ci-dessous :
10 11 45 78
23 44 12 56
56 90 67 89
47 78 55 34
Exercice 8 :
Refaire l’exercice 7 en déclarant un tableau 2d dynamique, où la saisie de la taille et des éléments du
tableau se fait par l’utilisateur.
Exercice 9 :
Déclarer et initialiser une matrice [5, 5] d’entier (iMat). Ecrire une fonction affiche_matrice qui admette
en paramètre une matrice [5, 5] et qui imprime ses éléments sous la forme de tableau.
Exercice 10 : passage par adresse

main(): procédure principale en langage C


Ecrire une fonction à laquelle on envoie un nombre de minutes. Celle-ci renverrait le nombre d’heures
et minutes correspondantes :
1. Si on envoie 45, la fonction renvoie 0 heure et 45 minutes ;
2. Si on envoie 60, la fonction renvoie 1 heure et 0 minute
3. Si on envoie 90, la fonction renvoie 1 heure et 30 minutes ainsi de suite.
Exercice 11 :
Ecrire un programme permettant d’effectuer un ensemble d’opération sur une chaine de caractère
quelconque saisie au clavier. Ce programme est constitué d’un menu comportant le choix de l’opération
à effectuer. Les opérations sur cette chaine sont les suivantes :
 Fonction saisir : elle lit une chaine de caractère entrée au clavier et la retourne
 Fonction inverse : elle inverse la chaine saisie
 Fonction taille : elle retourne la taille de la chaine
Après chaque opération, le retour au menu s’effectue après l’affichage du message ‘‘frappez une
touche pour revenir au menu’’
Exercice 12 :
Saisir à partir du clavier un ensemble de chaines de caractères dans un tableau de pointeurs. L’ensemble
se termine avec la lecture de la chaine ‘‘fin’’ (qui n’est pas insérée dans le tableau).
La mémoire nécessaire pour implanter chaque chaine doit être allouée au fur et à mesure de la lecture
de celles-ci avec la fonction malloc. La taille du tableau de pointeurs est fixe et est égale à 20.

main(): procédure principale en langage C

Vous aimerez peut-être aussi