IUT R&T - 1ère année - Informatique
Programmation et algorithmique 2


TD n°4 - Adressages et pointeurs

EXERCICE 1 (à résoudre pour le TD suivant)

On crée le programme suivant que l'on le compile avec : gcc -std=c99 court.c.
On l'exécute ensuite pour s'apercevoir qu'il n'affiche rien...
/* Programme court.c */
#include <stdio.h>
int main() { for (int i=0; i++; i<10) printf("*%p=%d \n",&i,i); }

1.1. Pourquoi ce programme n'affiche-t-il rien ?
1.2. Corriger ce programme pour que l'affichage se fasse. Qu'est-ce qui sera affiché ?

EXERCICE 2

2.1. Ecrire un algorithme saisir qui remplit un tableau T avec n entiers non nuls saisis, n ne devant pas dépasser une valeur limite taillemax. La fin de la saisie sera indiquée par l'utilisateur par la valeur 0 (à ne pas mettre dans le tableau). A la fin de l'algorithme, on disposera de la valeur de n et du tableau rempli de n valeurs entières non nulles.
2.2. Ecrire un algorithme afficher qui affiche un tableau T de n entiers.
2.3. Ecrire un programme C qui transcrit ces deux algorithmes pour enregistrer les éléments d'un tableau, puis les afficher.
Le programme devra commencer ainsi :
#include <stdlib.h>
#include <stdio.h>
/* choix d'une valeur pour taillemax */
#define taillemax 100

int Tableau[taillemax]={0};
int taille;
void saisir(int T[], int limite, int *n);
void afficher(int *T, int n);

int main() {

2.4. Compte-tenu de la manière dont on remplit le tableau, comment pourrait-on éviter de passer en paramètre la taille n du tableau dans la fonction afficher ?

EXERCICE 3

On donne la fonction suivante :
int truc(char* S) {
  int n=0;
  if (S==NULL) return (-1);
  while ((*(S+n))!='\0') n++;
  return n;
}

3.1. Que fait cette fonction ? Sur quel principe repose-t-elle ?
3.2. Ecrire un algorithme, puis la fonction correspondante en C, qui effectue sur le même principe que ci-dessus la copie d'une chaine A de p caractères vers une autre chaine B de q caractères. La fonction C retournera le nombre de caractères effectivement copiés.
N.B. On n'utilise donc pas la fonction strcpy.