Cours : Algorithmique et Programmation C – 1
Profs : L. HAMAMI
Filière : GI-MSD
TD N°4 : Les Tableaux
Allocation statique et Allocation dynamique
Objectifs
Utilisation et manipulation des tableaux en C.
Utilisation et manipulation des pointeurs.
Distinction entre l’allocation statique et l’allocation dynamique.
Exercice 1 : Ecrire un programme en C qui saisit 10 entiers stockées dans d'un tableau « T »,
remplit le tableau par des valeurs entrées au clavier et affiche le tableau. Ensuite, le programme
affichera la somme des composantes du tableau « T ».
#include <stdio.h>
int main()
{
int T[10],i,S=0;
for (i=0; i<10; i++)
{
printf("Element %d : ", i+1);
scanf("%d", &T[i]);
}
printf("\nTableau donne :\n");
for (i=0; i<10; i++)
printf("%d ", T[i]);
printf("\n");
for (i=0; i<10; i++)
S += T[i];
printf("\nSomme des elements : %d\n", S);
return 0;
}
Exercice 2 : Ecrire un programme qui demande à l'utilisateur de saisir « N » notes stockées
dans un tableau (il doit s'assurer que les notes comprises entre 0 et 20). Le programme
doit également calculer et afficher la moyenne.
#include <stdio.h>
#include <stdlib.h>
main()
{
float S, *V, Moy;
int i,N;
printf("Dimension du tableau : ");
1 2024-2025
Travaux dirigés Pr. L. HAMAMI
scanf("%d", &N );
V=(float*)malloc(N*sizeof(float));
for (i=0; i<N; i++)
{
printf("enter la note %d ", i+1);
scanf("%f",V+i);
while(V[i]<0 || V[i]>20)
{
printf("saisie incorrecte!!!, enter la note %d ",i+1);
scanf("%f",V+i);
}
S=S+V[i];
}
Moy=S/i;
printf("la moyenne est :%.2f\n", Moy);
}
Exercice 3 :
1. Ecrire un programme permettant à l’utilisateur de saisir 10 entiers, qui doivent être
stockées dans un tableau T. Une fois la saisie terminée, le programme affichera le
nombre de valeurs négatives et le nombre de valeurs positives.
main() {
int tab[10];
int i, np, n;
np=0;
n=0;
for (i=0; i<=9; i++)
{
printf("tab(%d)=", i);
scanf("%d", &tab[i]);
if (tab[i]>0)
{np=np+1;}
else if (tab[i]<0)
{n=n+1;}
}
printf("le nombre de valeur + est:%d\n ", np);
printf("le nombre de valeur - est:%d\n ", n);
}
2. Modifier le programme pour qu’il puisse nous permettre de stocker « n » valeurs dans
le tableau. La valeur de « n » est saisie par l’utilisateur.
#include <stdio.h>
#include <stdlib.h>
main()
{
int *tab;
int i, d, n, np;
printf("donner la dimension du tab ");
scanf("%d", &d);
tab=(int*)malloc(d*sizeof(int)); np=0;
n=0;
2 2024-2025
Travaux dirigés Pr. L. HAMAMI
for (i=0; i<=d-1; i++)
{
printf("tab(%d)=", i);
scanf("%d", &tab[i]);
if (*(tab+i)>0)
{np=np+1;}
else if (*(tab+i)<0)
{n=n+1;}
}
printf("le nombre de valeur + est : %d\n ", np);
printf("le nombre de valeur - est : %d\n ", n);
}
Exercice 4 : Ecrire un programme qui permet à l'utilisateur de saisir « n » entiers qui doivent
être stockés dans un tableau « Tab ». Ensuite, une valeur « N » doit être supprimée du
tableau initial (la valeur de « N » est saisie par l’utilisateur). Enfin, le programme
affichera le tableau résultant (s’il n'y a pas de valeur « N », le programme devrait
afficher le tableau initial).
#include <stdio.h>
#include <stdlib.h>
main()
{
int i, j=0,d,N;
int *T;
printf("donner la dimension : ");
scanf("%d", &d);
T=(int*)malloc(d*sizeof(int));
for (i=0; i<d; i++)
{
printf("Element %d : ", i+1);
scanf("%d", &T[i]);
}
printf("\nTableau donne : \n");
for (i=0; i<d; i++)
printf("%d ", T[i]);
printf("\n");
printf("\nDonner la valeur a sup : ");
scanf("%d", &N);
for (i=0; i<d; i++)
{
T[j] = T[i];
if (T[i]!=N)
j++;
}
printf("\nTableau resultat :\n");
for (i=0; i<j; i++)
printf("%d ", T[i]);
printf("\n");
}
3 2024-2025
Travaux dirigés Pr. L. HAMAMI
Exercice 5 : Ecrire un programme qui permet de convertir un nombre de la base 10 vers la base
2 en effectuant une allocation statique du tableau Bin avec une dimension maximale 50 (Bin
est le tableau où on stock les bits).
main()
{
int i,n, N;
int Bin[50];
printf("enter le nombre decimal ");
scanf("%d",&N);
printf("%d est code sur ", N);
n=0;
do
{
Bin[n]=N%2;
N=N/2;
n=n+1;
}while(N !=0);
printf("%d bit\n", n);
printf("le nbre dans la base 2 est: ");
for(i=n-1; i>=0; i--)
{
printf("%d",Bin[i]);
}
}
Exercice 6 : Ecrire un programme qui permet à l'utilisateur de saisir N entiers, qui doivent être
stockés dans un tableau. Ensuite, la valeur de position « pos » doit être supprimée du
tableau initial (la valeur « pos » c’est l’indice). Enfin, le programme affichera le
tableau résultant (N-1 éléments).
main()
{
int *p, pos, n, i;
printf("donner le nbre de valeurs : ");
scanf("%d", &n);
printf("\n");
p=(int*)malloc(n*sizeof(int));
for(i=0; i<n; i++)
{
printf("Entrer Element %d :", i);
scanf("%d", (p+i));
}
printf("\n");
printf("donner la position de la valeur a supprimer : ");
scanf("%d", &pos);
printf("\n");
for(i=pos; i<n-1; i++)
{
p[i]=p[i+1];
}
for(i=0; i<n-1; i++)
4 2024-2025
Travaux dirigés Pr. L. HAMAMI
{
printf("P[%d] = %d\n", i, *(p+i));
}
}
Exercice 7 : Ecrire un programme qui permet à l'utilisateur de saisir les valeurs d’une matrice
d’entier carrée (3*3). Ensuite, le programme affichera le nombre d’occurrence d’un entier N (la
valeur de N est donnée par l'utilisateur) dans la matrice M.
#include <stdio.h>
main()
{
int M[3][3], i,j, N, Nboc=0;
printf("Entrer les valeurs de la matrice: \n\n");
for (i=0; i<3; i++)
for (j=0; j<3; j++)
{
printf("Element[%d][%d] : ",i,j);
scanf("%d", &M[i][j]);
}
printf("Donner un entier : ");
scanf("%d", &N);
/* Compter le nombre d’occurrence */
for (i=0; i<3; i++)
{
for (j=0; j<3; j++)
if(M[i][j]==N)
Nboc++ ;
}
printf("\n Le nombre d'occurrence de %d est %d ", N, Nboc);
}
Exercice 8 : Ecrire un programme qui permet à l'utilisateur de saisir des valeurs pour un tableau
à deux dimensions (3 lignes et 2 colonnes). Le programme remplira et affichera ce
tableau. Ensuite, le programme affichera la somme de chaque colonne et de chaque
ligne.
#include <stdio.h>
main()
{
int T[3][2],i,j,sl=0,sc=0;
printf("Entrer les valeurs de la matrice: \n\n");
for (i=0; i<3; i++)
{
for (j=0; j<2; j++)
{
printf("Element[%d][%d] : ",i,j);
scanf("%d", &T[i][j]);
}
}
5 2024-2025
Travaux dirigés Pr. L. HAMAMI
printf("\n");
printf("Matrice donnee :\n");
for (i=0; i<3; i++)
{
for (j=0; j<2; j++)
printf("%4d", T[i][j]);
printf("\n");
}
printf("\n");
/* Calcul et affichage de la somme de chaque ligne */
for (i=0; i<3; i++)
{
sl=0;
for (j=0; j<2; j++)
sl += T[i][j];
printf("Somme de la ligne %d est : %d\n",i+1,sl);
}
printf("\n");
/* Calcul et affichage de la somme de chaque colonne */
for (j=0; j<2; j++)
{
for (sc=0, i=0; i<3; i++)
sc += T[i][j];
printf("Somme de la colonne %d est : %d\n",j+1,sc);
}
}
Exercice 9 : Ecrire un programme qui calcul et affiche le produit de deux matrices carrées M1
et M2 de même dimension. Les dimensions sont fixées soit 2x2.
#include <stdio.h>
main()
{
int M1[2][2], M2[2][2], P[2][2], i, j, k;
printf("saisir la matrice M1 : \n");
for(i=0; i<2; i++)
{
for(j=0; j<2; j++)
{
printf("M1(%d%d) = ",i+1,j+1);
scanf("%d", &M1[i][j]);
}
}
printf("saisir la matrice M2 : \n");
for(i=0; i<=1; i++)
{
for(j=0; j<2; j++)
{
printf("M2(%d%d) = ",i+1,j+1);
scanf("%d", &M2[i][j]);
}
}
6 2024-2025
Travaux dirigés Pr. L. HAMAMI
//Calcul du produit des deux matrices
printf("le produit est :");
printf("\n");
for(i=0; i<2; i++)
{
for(j=0; j<2; j++)
{
P[i][j]=0;
for(k=0; k<2; k++)
P[i][j] = P[i][j] + M1[i][k]*M2[k][j];
printf("P(%d%d)=%d\n",i+1,j+1,P[i][j]);
}
}
}
7 2024-2025