table des matières
  1. Premier programme C
  2. Manipulation de variables
    1. Permutation de 2 variables
  3. Manipulation des Entrées/sorties
    1. Programme “Age Étudiant”
    2. Déclarer et afficher
    3. La calculatrice 4 opérations
    4. Par ici la monnaie!
    5. Prix TTC
  4. Conditions et alternatives
    1. Positif?
    2. Valeur absolue
    3. Voyelle ou consonne?
    4. Solution d’une équation du second degré.
    5. Année bissextile
    6. Photocopies
  5. Les boucles itératives
    1. Do/While/For
    2. Factorielle
    3. xn
    4. Dessin
    5. Distributeur de café
  6. Les fonctions
    1. Factorielle
    2. xn
    3. Passage de paramètres par adresse
      1. Échange de variables
  7. Les tableaux
    1. Tableau - Déclarer et afficher
    2. Tableau - Somme et moyenne
    3. Tableau de caractères
    4. Reverse!
    5. Full tableau
    6. Crible d’Eratosthène
  8. Allocation dynamique
    1. Allocation d’un entier
    2. Allocation d’un tableau d’entiers.
    3. Les tableaux de tailles variables VLA
    4. Crible d’Erathosthene avec une allocation dynamique.

Vous trouverez sur cette page les corrections des exercices proposées concernant la maîtrise des fondamentaux du langage C en première année du BTS CIEL-IR.

Les exercices couvrent :

  • La manipulation de variables (déclaration, types et affectation)
  • La manipulation des Entrées/sorties
  • Les structures de contrôle
    • Tests et alternatives
    • Boucles itératives
  • Les fonctions
  • Les tableaux

Premier programme C

Squelette général d’un programme en C

Manipulation de variables

Permutation de 2 variables

Écrire un programme permettant d’échanger les valeurs de 2 variables entières a et b

Corrigé de l’exercice

Gdb- Permutation de deux variables

Manipulation des Entrées/sorties

Programme “Age Étudiant”

Écrire un programme qui :

  • Demande l’âge de l’utilisateur
  • Affiche cet âge à l’écran
Corrigé de l’exercice

Gdb- Age etudiant

Déclarer et afficher

Déclarer des variables avec les valeurs 70, 82, 'c' et 30.56
Afficher le contenu de ces variables :

  • Sur une ligne
  • Une variable par ligne
Corrigé de l’exercice

Gdb- Déclarer et afficher

La calculatrice 4 opérations

Écrire un programme de calculatrice qui :

  • Demande des chiffres à l’utilisateur
  • Affiche le résultat des quatre opérations (addition/soustraction/multiplication/division)

Attention : Il n’y a pas de test pour une division par zéro. La division de deux entiers est un entier. Ce programme ne gère pas la conversion de type ni les décimaux.

Corrigé de l’exercice

Gdb- Calculatrice simple

Par ici la monnaie!

Écrire un programme qui donne le nombre de billets de 50€, 20€ et 10€ à partir d’une somme saisie par l’utilisateur.

Corrigé de l’exercice

Gdb- Par ici la monnaie

Prix TTC

Écrire un programme qui demande le prix HT d’un article ainsi que le nombre d’articles et qui fournit le prix total TTC correspondant.

Corrigé de l’exercice

Gdb- Prix TTC

Conditions et alternatives

Positif?

Écrire un programme qui :

  • Demande une variable de type entier à l’utilisateur.
  • Indique à l’utilisateur si celle-ci est strictement positive, strictement négative ou nulle.
Corrigé de l’exercice

Gdb- Positif ?

Valeur absolue

Écrire un programme qui :

  • Donne la valeur absolue d’un entier n.
Corrigé de l’exercice

Gdb- Valeur absolue

Voyelle ou consonne?

Écrire un programme qui :

  • Demande une variable de type caractère à l’utilisateur.
  • Indique à l’utilisateur si celle-ci est une voyelle ou une consonne.
    (On considérera que le caractère saisi est en minuscule. Notez que si le caractère saisi n’est pas une voyelle, c’est nécessairement une consonne.)
Corrigé de l’exercice

Gdb- Voyelle ou consonne ?

Solution d’une équation du second degré.

Écrire un programme qui calcule les valeurs x1 et x2 d’une équation du second degré (Delta positif ou nul)

Corrigé de l’exercice

Gdb- Second degré

Année bissextile

Écrire un programme pour déterminer si une année est bissextile ou non.

Information

Depuis l’instauration du calendrier grégorien, sont bissextiles les années :

  • n divisibles par 4 mais non divisibles par 100
  • n divisibles par 400

Ainsi, 2008 est bissextile. L’an 2004 était bissextile suivant la première règle. L’an 1900 n’était pas bissextile, car divisible par 100, ce qui va à l’encontre de la première règle, et non divisible par 400, ce qui va à l’encontre de la seconde. L’an 2000 était bissextile car divisible par 400.

Corrigé de l’exercice

Gdb- Année bissextile

Photocopies

Un magasin de reprographie facture 0,10€ les 10 premières photocopies, 0,09€ les 20 suivantes et 0,08€ au-delà.
Écrire un programme qui demande à l’utilisateur le nombre de photocopies effectuées et qui affiche la facture correspondante.

Corrigé de l’exercice

Gdb- Photocopies

Les boucles itératives

Do/While/For

Écrire un programme qui affiche

  i = 0 
  i = 1
  i = 2
  i = 3
  i = 4

en utilisant les 3 types de boucles.

Corrigé de l’exercice

Gdb- Do…While()/While()/For()

Factorielle

Écrire 3 programmes utilisant chacune des structures itératives pour calculer la factorielle.

Rappel !
5! est égale à 5 x 4 x 3 x 2 x 1

Corrigé de l’exercice

Gdb- Factorielle

xn

Écrire un programme qui calcule pour 2 variables données x et n, x à la puissance n. x et n > 0, n entier.

Corrigé de l’exercice

Gdb- Puissance

Dessin

Écrire un programme qui affiche le dessin ci-dessous à l’écran. (Il faudra utiliser une double boucle…)

  *
  * *
  * * *
  * * * *
  * * * * *
Corrigé de l’exercice

Gdb- Dessin

Distributeur de café

Créer un programme simulant un distributeur de café.
Le café coûte 1 euro.
L’utilisateur peut insérer des pièces de 5, 10, 20, 50 centimes et 1 euro.
Tant que la somme insérée par l’utilisateur n’est pas égale ou supérieure à 1 euro, il doit insérer encore des pièces.
Le distributeur rend ensuite la monnaie eventuelle.

Corrigé de l’exercice

Gdb- Distributeur de café

Les fonctions

Factorielle

Reprendre l’exercice «factorielle» et écrire la fonction factorielle La fonction factorielle() a le prototype suivant :

  @param int nb : Le nombre pour lequel on veut calculer la factorielle
  @return int : La factorielle du nombre
  int factorielle (int nb);
Corrigé de l’exercice

Gdb- Fonction factorielle

xn

Reprendre l’exercice xn et écrire la fonction puissanceN()
La fonction puissanceN() a le prototype suivant :

  @param int x : Le nombre pour lequel on veut calculer la puissance
  @param int n : La puissance à laquelle on veut élever le nombre
  @return int : Le nombre élevé à la puissance donnée
  int puissanceN(int x, int n);
Corrigé de l’exercice

Gdb- Fonction puissance

Passage de paramètres par adresse

Échange de variables

Écrire un programme qui échange la valeur de deux variables nb1 et nb2 en utilisant un passage de paramètre par adresse La fonction echange() a le prototype suivant :

  @param int *pi : premier nombre à échanger
  @param int *pj : second nombre à échanger
  @return void
  void puissanceN(int x, int n);
Corrigé de l’exercice

Gdb- Fonction echange

Les tableaux

Tableau - Déclarer et afficher

15 11 10 14 18 5

Déclarer et initialiser le tableau ci-dessus.
Afficher (sur une seule ligne) le contenu du tableau

Corrigé de l’exercice

Gdb- Tableau - Déclarer et afficher

Tableau - Somme et moyenne

Calculer la somme de toutes les valeurs du tableau de l’exercice précédent Calculer la moyenne des valeurs du tableau de l’exercice précédent

Corrigé de l’exercice

Gdb- Tableau - Somme et moyenne

Tableau de caractères

Déclarer et initialiser un tableau avec votre prénom. (attention à la taille) Afficher le tableau contenant votre nom:

  • Sur une ligne
  • Un caractère par ligne
Corrigé de l’exercice

Gdb- Tableau de caractères 1

Reverse!

Mettre en majuscule chacun des caractères du tableau précédent.
Afficher votre nom à l’envers. (en commençant par le dernier caractère)

Corrigé de l’exercice

Gdb- Tableau de caractères 2

Full tableau

Le tableau notes contient la note de chacun des 28 étudiants de votre groupe au prochain test de programmation.
On souhaite en déterminer les éléments suivants :

  • les notes min et max,
  • la moyenne,
  • l’écart-type
  • la médiane.

Compléter l’exercice à partir du fichier suivant Full tableau

Corrigé de l’exercice

Gdb- Full tableau

Crible d’Eratosthène

On désire rechercher tous les nombres premiers jusqu’à n = 120, selon le programme du crible d’Eratosthène.
Le crible est la structure qui contient la suite d’entiers. Il est habituellement représenté par un tableau de booléens.

Écrire le programme qui affiche les nombres premiers parmi n.
Vous utiliserez un tableau à une dimension.

  • Vous pourrez utiliser la fonction sqrt() de la bibliothèque <math.h>
  • Vous pouvez aussi utiliser la bibliothèque <stdbool.h> pour définir un tableau de booléen.
Corrigé de l’exercice

Gdb- crible d’Eratosthène

Allocation dynamique

En C, il est possible d’allouer dynamiquement de la mémoire à l’exécution d’un programme. Les exemples ci-après sont proposés à partir de la page de Zeste de savoir consacrée à l’allocation dynamique.

Le schéma ci-dessous rappelle l’organisation des différentes zones pour les variables.

Heap and Stack

Grâce au site CTutor, nous pouvons visualiser facilement l’allocation sur le tas (heap).

Allocation d’un entier

Écrire un programme en C pour allouer dynamiquement en entier avec la fonction malloc(). Vous n’oublierez pas de libérer la mémoire avec free()

Corrigé de l’exercice

Allocation d’un entier

Allocation d’un tableau d’entiers.

Écrire un programme en C pour allouer dynamiquement un tableau de 10 entiers avec la fonction malloc(). Vous n’oublierez pas de libérer la mémoire avec free()

Corrigé de l’exercice

Allocation d’un tableau de 10 entiers

Les tableaux de tailles variables VLA

On peut aussi créer depuis C99 des tableaux de tailles variables, c’est à dire dont la taille est déterminée à l’exécution.

Écrire un programme qui permet d’allouer dynamiquement un tableau en utilisant les VLA ou tableaux de longueurs variables.

Corrigé de l’exercice

Allocation d’un tableau VLA

Dans le cas d’un VLA, le tableau est alloué sur la pile, dont la taille dépend du système d’exploitation.

Sous linux, on peut visualiser la taille de la pile avec ulimit.

ulimit -a
stack size                  (kbytes, -s) 8192

Crible d’Erathosthene avec une allocation dynamique.

Reprendre l’exercice de la crible d’Erathosthene en allouant le tableau dynamiquement.
Vérifier les limites de la pile et du tas.

Corrigé de l’exercice

Crible Erathosthene dynamique

Attention : Problème avec sqrt() sous Qt.

Si vous travaillez avec Qt, il y a peut-être une erreur à la compilation. (link et librairie math.h).
Vous pouvez compiler votre programme avec la ligne de code suivante :

gcc main.c  -o main -lm