Proposition de correction :
Exercice 7 : Copie de chaînes de caractères
Ecrivez un programme qui saisit proprement une chaîne de caractère S et
qui la recopie dans un tableau crée avec malloc et de contenance
correspondant exactement à la longueur de s. Vous n'utiliserez ni strlen, ni
strcpy.
Correction :
#include <stdio.h>
#include <stdlib.h>
int main() {
char S[100]; // Tableau temporaire pour stocker la saisie
char *copieS;
int i, taille = 0;
// Saisie de la chaîne
printf("Entrez une chaîne de caractères : ");
fgets(S, sizeof(S), stdin); // Utilisation de fgets pour éviter les
débordements
// Calcul de la longueur de S (sans strlen)
while (S[taille] != '\0' && S[taille] != '\n') {
taille++;
}
// Allocation dynamique d'un tableau de la taille exacte de la chaîne
copieS = (char *)malloc((taille + 1) * sizeof(char));
// Vérification de la réussite de l'allocation mémoire
if (copieS == NULL) {
printf("Erreur d'allocation mémoire.\n");
return 1;
}
// Copie de S vers copieS (sans strcpy)
for (i = 0; i < taille; i++) {
copieS[i] = S[i];
}
copieS[taille] = '\0'; // Ajout du caractère de fin de chaîne
// Affichage de la copie
printf("Copie de la chaîne : %s\n", copieS);
// Libération de la mémoire allouée
free(copieS);
return 0;
}
Exercice 8:
Écrire un programme qui range les éléments d'un tableau A de type entier
dans l'ordre inverse. Le programme utilisera deux pointeurs P1 et P2 et
une variable numérique AIDE pour la permutation des éléments.
Correction :
#include <stdio.h>
int main() {
int A[100], n, i, AIDE;
int *P1, *P2; // Déclaration des pointeurs
// Demande à l'utilisateur la taille du tableau
printf("Entrez la taille du tableau : ");
scanf("%d", &n);
// Saisie des éléments du tableau
printf("Entrez les éléments du tableau :\n");
for (i = 0; i < n; i++) {
scanf("%d", &A[i]);
}
// Affichage du tableau avant inversion
printf("Tableau avant inversion : ");
for (i = 0; i < n; i++) {
printf("%d ", A[i]);
}
printf("\n");
// Initialisation des pointeurs
P1 = A; // P1 pointe sur le premier élément
P2 = A + (n - 1); // P2 pointe sur le dernier élément
// Inversion des éléments en utilisant P1 et P2
while (P1 < P2) {
AIDE = *P1; // Sauvegarde de la valeur de P1
*P1 = *P2; // Échange de P1 avec P2
*P2 = AIDE; // Restauration de la valeur de P1 dans P2
// Déplacement des pointeurs
P1++;
P2--;
}
// Affichage du tableau après inversion
printf("Tableau après inversion : ");
for (i = 0; i < n; i++) {
printf("%d ", A[i]);
}
printf("\n");
return 0;
}
Exercice 9
Ecrire un programme qui lit la dimension N d'un tableau T du type entier
(dimension maximale : 50 composantes), remplit le tableau par des
valeurs entrées au clavier et affiche le tableau. Calculer et afficher ensuite
la somme des éléments du tableau. Utiliser le formalisme pointeur.
Correction :
#include <stdio.h>
#define MAX 50 // Taille maximale du tableau
int main() {
int T[MAX], N, i, somme = 0;
int *p; // Déclaration du pointeur
// Demande à l'utilisateur la taille du tableau
do {
printf("Entrez la dimension du tableau (max 50) : ");
scanf("%d", &N);
} while (N <= 0 || N > MAX);
// Saisie des éléments du tableau
printf("Entrez les %d éléments du tableau :\n", N);
for (p = T; p < T + N; p++) {
scanf("%d", p); // Utilisation du pointeur pour remplir le tableau
}
// Affichage du tableau
printf("Tableau saisi : ");
for (p = T; p < T + N; p++) {
printf("%d ", *p); // Utilisation du pointeur pour afficher
}
printf("\n");
// Calcul de la somme des éléments du tableau avec un pointeur
for (p = T; p < T + N; p++) {
somme += *p;
}
// Affichage de la somme des éléments du tableau
printf("Somme des éléments du tableau : %d\n", somme);
return 0;
}