Langage_C_Exo_20C_FR_01

 

Partie 01

Correction des Exercices

Correction des Exercices

Exercice 1 :

Énoncé : Compléter le programme généré initialement par Code::Blocks afin de lire une suite de caractères sur la même ligne via la fonction getchar. Chaque caractère lu sera simplement affiché via putchar. La suite s'arrêtera dans le cas où la touche 'Entrée' est pressée.

Solution :

#include <stdio.h>

int main() {
    char c;
    printf("Entrez une suite de caractères (appuyez sur Entrée pour arrêter) :\n");
    
    // Utiliser getchar pour lire les caractères jusqu'à ce que la touche Entrée soit pressée
    while ((c = getchar()) != '\n') {
        // Afficher chaque caractère avec putchar
        putchar(c);
    }
    
    return 0;
}
    

Explication :

getchar() est utilisé pour lire chaque caractère saisi par l'utilisateur. putchar(c) affiche le caractère lu. La boucle continue jusqu'à ce que l'utilisateur appuie sur 'Entrée', représenté par le caractère de nouvelle ligne \n.

Exercice 2 :

Énoncé : Compléter le programme afin de remplir les caractères lus au clavier selon le même principe, mais en remplaçant une suite de plusieurs espaces par un seul espace.

Solution :

#include <stdio.h>

int main() {
    char c, previous = 0;
    printf("Entrez une suite de caractères (appuyez sur Entrée pour arrêter) :\n");

    while ((c = getchar()) != '\n') {
        if (c != ' ' || (c == ' ' && previous != ' ')) {
            putchar(c);
        }
        previous = c;
    }

    return 0;
}
    

Explication :

Une variable previous est utilisée pour conserver le caractère précédent. Si le caractère actuel c est un espace ' ' et que le caractère précédent n'était pas un espace, alors il est affiché. Sinon, si c'est le premier espace après un autre espace, il est ignoré. Cela permet de remplacer une suite d'espaces par un seul espace.

Exercice 3 :

Énoncé : Ajouter le code permettant cette fois de remplir à l'écran les mots extraits de la suite de caractères lus. Un mot est défini comme une séquence de caractères ne comprenant ni blanc (' '), ni saut de ligne ('\n') ni tabulation ('\t').

Solution :

#include <stdio.h>

int main() {
    char c;
    printf("Entrez une suite de caractères (appuyez sur Entrée pour arrêter) :\n");

    while ((c = getchar()) != '\n') {
        // Vérifier si c n'est pas un espace, un saut de ligne ou une tabulation
        if (c != ' ' && c != '\t') {
            putchar(c);
        } else {
            // Afficher un saut de ligne pour séparer les mots
            putchar('\n');
        }
    }

    return 0;
}
    

Explication :

Le programme lit chaque caractère et l'affiche tant que ce n'est pas un espace, une tabulation ou un saut de ligne. Lorsqu'un espace ou une tabulation est rencontré, il affiche un saut de ligne pour séparer les mots.

Partie 02

Correction des Exercices 4 à 7

Correction des Exercices 4 à 7

Exercice 4 :

Énoncé : Dans le programme, en considérant toujours la saisie d'une suite de caractères avec le même principe, écrire le code permettant de déterminer le nombre d'occurrences du caractère e, ainsi que le nombre d'occurrences total des caractères a, e, i, o, u. Les deux résultats seront affichés en utilisant la fonction printf.

Solution :

#include <stdio.h>

int main() {
    char c;
    int count_e = 0, count_vowels = 0;
    
    printf("Entrez une suite de caractères (appuyez sur Entrée pour arrêter) :\n");
    
    while ((c = getchar()) != '\n') {
        if (c == 'e') {
            count_e++;
        }
        if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') {
            count_vowels++;
        }
    }
    
    printf("Nombre d'occurrences de 'e' : %d\n", count_e);
    printf("Nombre total de voyelles (a, e, i, o, u) : %d\n", count_vowels);
    
    return 0;
}
    

Explication :

Le programme utilise une boucle pour lire chaque caractère de la chaîne saisie. Un compteur count_e est incrémenté chaque fois que le caractère e est rencontré. Un autre compteur count_vowels est incrémenté chaque fois que l'une des voyelles a, e, i, o, u est rencontrée. Les résultats sont ensuite affichés à l'aide de printf.

Exercice 5 :

Énoncé : Recopier les instructions suivantes dans votre programme, puis compiler et tester pour comprendre ce qu'il affiche.

int i;
for (i = 0; i <= 3; i++)
    printf("%c\n", 'a' + i);
printf("%c\n", 'a' + i + 1);
    

Explication :

Le programme utilise une boucle for pour itérer de i = 0 à i = 3. À chaque itération, il affiche un caractère en ajoutant i à la valeur ASCII de 'a', ce qui affiche les lettres de 'a' à 'd'. Après la boucle, il affiche la lettre 'f' car 'a' + i + 1 correspond à 'f'.

Sortie attendue :

a
b
c
d
f
    

Exercice 6 :

Énoncé : Écrire les instructions permettant d'effectuer les opérations suivantes :

  1. Inviter l'utilisateur à entrer une lettre minuscule.
  2. Obtenir la valeur saisie.
  3. Afficher le nombre de lignes qui sépare la lettre de la lettre 'C' à gauche et de la lettre 'D' à droite.

Solution :

#include <stdio.h>

int main() {
    char letter;
    
    printf("Entrez une lettre minuscule : ");
    scanf("%c", &letter);
    
    int distance_from_C = letter - 'C';
    int distance_from_D = 'D' - letter;
    
    printf("Distance de 'C' : %d\n", distance_from_C);
    printf("Distance de 'D' : %d\n", distance_from_D);
    
    return 0;
}
    

Explication :

Le programme demande à l'utilisateur d'entrer une lettre minuscule. Il calcule ensuite la distance entre la lettre saisie et la lettre 'C', ainsi qu'entre la lettre saisie et la lettre 'D'. Les résultats sont affichés, montrant combien de lettres séparent la lettre saisie de 'C' et 'D'.

Exercice 7 :

Énoncé : On veut dessiner à l'écran un 'L' ou un 'H' sur plusieurs lignes à l'aide du caractère '*' comme dans les exemples ci-dessous. Écrire les instructions permettant de faire le dessin en question avec des boucles dans le programme. La largeur (qui doit être impaire) et la hauteur de la lettre seront fixées dans le programme via la déclaration de deux constantes.

Solution :

#include <stdio.h>

#define HEIGHT 5
#define WIDTH 3

void draw_L() {
    for (int i = 0; i < HEIGHT - 1; i++) {
        printf("*\n");
    }
    for (int j = 0; j < WIDTH; j++) {
        printf("*");
    }
    printf("\n");
}

void draw_H() {
    for (int i = 0; i < HEIGHT; i++) {
        for (int j = 0; j < WIDTH; j++) {
            if (j == 0 || j == WIDTH - 1 || i == HEIGHT / 2) {
                printf("*");
            } else {
                printf(" ");
            }
        }
        printf("\n");
    }
}

int main() {
    printf("Dessiner un 'L' :\n");
    draw_L();
    
    printf("\nDessiner un 'H' :\n");
    draw_H();
    
    return 0;
}
    

Explication :

Pour le 'L' : Le programme affiche un * pour chaque ligne sauf la dernière. Pour la dernière ligne, il affiche * autant de fois que la largeur.

Pour le 'H' : Le programme utilise deux boucles imbriquées pour dessiner le 'H'. Il affiche * sur les colonnes de gauche et de droite, ainsi que sur la ligne centrale.

 
1 vote. Moyenne 5 sur 5.

Ajouter un commentaire

Anti-spam