Programmation C
Structuration du code - Exercices
Cours Exercices Correction des exercices

Exercice 1 Exercice 2 Exercice 3 Exercice 4
Exercice 5 Exercice 6 Exercice 7 Exercice 8

Exercice 1 (while)

  • Rappels
    • La fonction int rand(void); retourne un nombre aléatoire entier compris entre 0 et RAND_MAX inclus.
    • La fonction void srand(unsigned int germe); initialise le générateur de nombres aléatoires avec la valeur germe passée en paramètre.
    • Les fonctions rand et srand sont des fonctions de l'API standard stdlib (fichier header stdlib.h). La constante RAND_MAX fait elle aussi partie de l'API stdlib.
  • Développer un programme principal réalisant les traitements suivants
    • Affichage de la valeur RAND_MAX
    • Calcul et affichage de combien il faut générer de nombres aléatoires au moyen de la fonction rand avant de toucher le nombre 0

Exercice 2 (while)

  • Développer un programme principal réalisant les traitements suivants
    • Tirage au sort et affichage d'un caractère alphabétique minuscule
    • Tirage au sort et affichage d'un caractère alphabétique minuscule différent du premier caractère
    • Tirage au sort et affichage d'un caractère alphabétique minuscule différent des deux premiers

Exercice 3 (do while)

  • Le nombre π (3.141592653589793116) est un nombre irrationel c'est à dire qu'il n'est pas possible de trouver deux nombres entiers v1 et v2 tels que v1/v2 = π. En revanche, on peut rechercher les couples de valeurs entières (v1,v2) tels que v1/v2 se rapproche de π. Exemple : 22/7 = 3.142857142857142794 est très proche de π avec une différence de seulement 0.001264489267349678.
  • Développer un programme principal réalisant le traitement suivant
    • Calcul et affichage du premier couple (v1,v2) au delà de (22,7) tel que v1/v2 est plus proche de π que 22/7

Exercice 4 (for)

  • Calcul de π selon la formule de Leibniz-Grégory : π = 4/1 - 4/3 + 4/5 - 4/7 + 4/9 - 4/11...
  • Calcul de π selon la formule de Nilakantha : π = 3 + 4/(2*3*4) - 4/(4*5*6) + 4/(6*7*8) - 4/(8*9*10) + 4/(10*11*12)...
  • Implanter un programme principal permettant de comparer les valeurs trouvées pour π en utilisant des deux formules pour les mêmes valeurs de n (n = nombre de facteurs fractionnaires)
    • pour n de 1 à 9 par pas de 1
    • pour n de 10 à 90 par pas de 10
    • pour n de 100 à 900 par pas de 100
    • pour n de 1000 à 10000 par pas de 1000

Exercice 5 (if)

  • Développer un programme principal réalisant les traitements suivants
    • Tirage au sort et affichage d'un nombre entier inclus dans l'intervalle [0,255]
    • Affichage de ce nombre en héxadécimal (base 16) en utilisant les chiffres 0, 1, 2, 3, ..., 9, A, B, C, D, E et F)
    • Tirage au sort et affichage d'un nombre entier inclus dans l'intervalle [10000,99999]
    • Test du fait que ce nombre soit palindromique c'est à dire que les deux conditions suivantes soient vérifiées
      • Chiffre des unités = chiffre des dizaines de milliers
      • Chiffre des dizaines = chiffre des milliers

Exercice 6 (switch)

  • Développer un programme principal réalisant les traitements suivants
    • Tirage au sort d'une opération (notée § ci-dessous) à réaliser parmi addition, soustraction, division, multiplication et modulo
    • Tirage au sort de deux nombres entiers v1 et v2 inclus dans l'intervalle [10,999] pour le premier, [10,99] pour le second
    • Suivant l'opération tirée au sort calculer et afficher le résultat de v1 § v2 sous la forme "v1 § v2 = ..." en remplaçant v1 par sa valeur, § par son signe habituel, v2 par sa valeur et les points de suspension par le résultat numérique

Exercice 7 (fonctions)

  • Développer une fonction permettant de tirer au sort un nombre entier dans l'intervalle [bi,bf]
  • Développer un programme principal permettant de tester cette fonction en tirant au sort 6 millions de nombres entiers dans l'intervalle [5,10] et en calculant à mesure des tirages et affichant à la fin des tirages combien de 5, de 6, de 7, de 8, de 9 et de 10 ont été obtenus
  • Quelle est votre conclusion concernant la qualité de la répartition des nombres tirés au sort ?
  • Compléter le programme principal précédent par un test consistant à tirer au sort 3 millions de nombres entiers dans l'intervalle [0, 29999] et à calculer et afficher combien de ces nombres sont compris dans les intervalles [0,9999], [10000,19999] et [20000,29999]
  • Quelle est votre conclusion concernant la qualité de la répartition des nombres tirés au sort ?
  • Développer une fonction int myRand(void) tirant au sort un entier dans l'intervalle [0,RAND_MAX2-1]
    Indication : la fonction rand tire au sort des nombres entre 0 et RAND_MAX. On obtient un nombre obligatoirement inclus dans l'intervalle souhaité en tirant au sort deux nombres aléatoires a1 et a2 et en calculant a1*(RAND_MAX+1)*a2.
  • Utiliser la fonction myRand() pour refaire les tests
  • Quelle est votre conclusion concernant la qualité de la répartition des nombres tirés au sort ?
  • Utiliser la fonction myRand() en tant que fonction utilitaire employée pour développer une fonction double rand01(void) qui retourne un double tiré au sort dans l'intervalle [0.0,1.0[
  • Compléter le programme principal par un test de la fonction rand01 consistant à générer n nombres inclus dans l'intervalle [0.0,1.0[ et à calculer les proportions de ces nombres qui appartiennent aux quatres intervalles [0.0,0.25[, [0.25,0.5[, [0.5,0.75[ et [0.75,1.0[.

Exercice 8 (fonctions)

  • Développer une fonction permettant de résoudre le problème du calcul des racines d'une équation du second degré
  • On rappelle les points suivants
    • Une équation du second degré est une équation en x du type f(x) = ax2+bx+c où a, b et c sont des coefficients numériques réels constant (a différent de 0.0).
    • Les racines sont les valeurs x telles que f(x) = 0.0.
    • Une équation du second degré admet zéro, une ou deux racines suivant les valeurs du "déterminant" delta calculé à partir des coefficients a, b et c : delta = b2-4ac
      • Si delta < 0.0, zéro racine
      • Si delta = 0.0, une racine x = -b/2a
      • Si delta > 0.0, deux racines x1 = (-b-sqrt(delta))/2a, x2 = (-b+sqrt(delta)/2a
  • Développer un programme principal permettant de tester (affichage du nombre de racines et, le cas échéant, de sa valeur ou de leurs valeurs) la fonction de résolution avec les paramètres suivants
    • a = 2.0, b = -3.1, c = 2.1
    • a = 2.0, b = 4.0, c = 2.0
    • a = -2.0, b = 5.0, c = -2.0