1 Pour s’échauffer

Soit le fragment de programme suivant :

float a = 0.001;
float b = 0.003;
float c, ∗pa, ∗pb, ∗pp;
pa = &a;
∗pa ∗= 2;
pb = &b;
c = 3 ∗ (∗pb − ∗pa);
pp = pa;

Après exécution, quelles sont les valeurs de a, b, c, pa, ∗pa, &∗pa, pb, ∗pb, pp, ∗pp ? Vérifiez vos
réponses en écrivant le programme affichant les différentes valeurs.

NB: pour afficher la valeur d'un pointeur avec printf(), on pourra utiliser le spécificateur de format "%p".

2 Allocation dynamique

Nous souhaitons écrire un programme permettant de faire quelques statistiques pour un
ensemble de notes dont le nombre n’est pas connu à l’avance. Le programme devra commencer
par demander le nombre de notes à l’utilisateur. Ensuite un tableau de flottants devra être alloué
dynamiquement, avant de lire les notes. Le programme affichera ensuite la valeur minimale, la
valeur maximale, la moyenne et la médiane des notes. La mémoire allouée devra être libérée
avant de quitter le programme.

Rappels

  • Un tableau dynamique de n réels est déclaré et alloué par l’incantation suivante :
    double *tab = malloc(n * sizeof(double));
  • Les éléments, comme pour les tableaux statiques, sont accédés par la notation « crochet » : tab[k] .
  • La mémoire est libérée avec :
    free(tab);

3 Tableaux de tableaux. . .

Pour allouer dynamiquement un tableau à deux dimensions, une solution est de le modéliser
par un tableau de tableaux. Écrire un programme qui :

  • lit deux nombres m et n ;
  • alloue dynamiquement un tableaux d’entiers de m lignes et n colonnes ;
  • remplit le tableau par le produit du numéro de ligne par le numéro de colonne ;
  • affiche le contenu du tableau ;
  • libère la mémoire précédemment allouée.

Indications

  • Le tableau devra être déclaré comme une pointeur de pointeur d’entier. Par exemple,
    int ∗∗a.
  • Un premier tableau (de pointeurs d’entiers) devra être alloué de longueur égale au nombre
    de lignes souhaitées.
  • Chacune des lignes du tableau devra ensuite être allouée de manière indépendante.
  • Les éléments du tableau sont alors accessibles avec la notation « crochet ». Par exemple,
    a[i][j] pour l’élément de la ie ligne, je colonne.
  • La désallocation doit être faite dans l’ordre inverse.