Exercices : Structures conditionnelles et calculs simples
Cette série d'exercices introduit les concepts de base des structures conditionnelles (if, else if, else) à travers des problèmes pratiques comme l'appartenance à un intervalle, le signe d'un produit, le calcul d'heures supplémentaires, l'heure suivante et les mentions.
Appartenance à un intervalle
Écrire un programme qui permet de saisir un nombre puis de déterminer s'il appartient à un intervalle donné, sachant que les extrémités de l'intervalle sont fixées par l'utilisateur.
#include <stdio.h>
int main(void)
{
int a, b, val;
printf("Saisir une valeur pour [a - ");
scanf("%d", &a);
printf("Saisir une valeur pour b] - ");
scanf("%d", &b);
// S'assurer que a <= b
if (a > b)
{
int temp = a;
a = b;
b = temp;
}
printf("Saisir une valeur - ");
scanf("%d", &val);
if (val >= a && val <= b)
{
printf("%d appartient à l'intervalle [%d, %d]\n", val, a, b);
}
else
{
printf("%d n'appartient pas à l'intervalle [%d, %d]\n", val, a, b);
}
return 0;
}
def appartient_intervalle():
"""
Vérifie si un nombre appartient à un intervalle [a,b].
Les bornes a et b sont saisies par l'utilisateur.
"""
a = int(input("Saisir la borne inférieure [a : "))
b = int(input("Saisir la borne supérieure b] : "))
# S'assurer que a <= b
if a > b:
a, b = b, a
print(f"Note : l'intervalle a été inversé en [{a}, {b}]")
val = int(input("Saisir une valeur : "))
if a <= val <= b:
print(f"{val} appartient à l'intervalle [{a}, {b}]")
else:
print(f"{val} n'appartient pas à l'intervalle [{a}, {b}]")
# Test
appartient_intervalle()
Saisir une valeur pour [a - 2 Saisir une valeur pour b] - 7 Saisir une valeur - 4 4 appartient à l'intervalle [2, 7]
a = 2, b = 7, val = 4
4 appartient à l'intervalle [2, 7]
Signe d'un produit (sans calcul)
Écrire un programme qui demande deux nombres à l'utilisateur et l'informe ensuite si leur produit est négatif ou positif. Attention : on ne doit pas calculer le produit des deux nombres.
Indice : Le signe d'un produit dépend du signe des facteurs.
- Le produit de deux nombres de même signe est positif.
- Le produit de deux nombres de signes contraires est négatif.
- Si l'un des deux nombres est nul, le produit est nul.
#include <stdio.h>
int main(void)
{
int a, b;
printf("Saisir une valeur pour a - ");
scanf("%d", &a);
printf("Saisir une valeur pour b - ");
scanf("%d", &b);
if (a == 0 || b == 0)
{
printf("Le produit est nul\n");
}
else if ((a > 0 && b > 0) || (a < 0 && b < 0))
{
printf("Le produit est positif\n");
}
else
{
printf("Le produit est négatif\n");
}
return 0;
}
def signe_produit():
"""
Détermine le signe du produit de deux nombres sans le calculer.
"""
a = int(input("Saisir a : "))
b = int(input("Saisir b : "))
if a == 0 or b == 0:
print("Le produit est nul")
elif (a > 0 and b > 0) or (a < 0 and b < 0):
print("Le produit est positif")
else:
print("Le produit est négatif")
def signe_produit_detail():
"""Version avec explication détaillée."""
a = int(input("Saisir a : "))
b = int(input("Saisir b : "))
print(f"a = {a} ({'positif' if a > 0 else 'négatif' if a < 0 else 'nul'})")
print(f"b = {b} ({'positif' if b > 0 else 'négatif' if b < 0 else 'nul'})")
if a == 0 or b == 0:
print("Le produit est nul")
elif (a > 0 and b > 0) or (a < 0 and b < 0):
print("Le produit est positif (même signe)")
else:
print("Le produit est négatif (signes contraires)")
# Test
signe_produit()
Saisir une valeur pour a - 2 Saisir une valeur pour b - -3 Le produit est négatif
a = 2, b = 3
Le produit est positif
a = -2, b = 3
Le produit est négatif
Calcul d'heures supplémentaires
Écrire un programme qui permet de calculer le montant des heures supplémentaires d'un employé, sachant le prix unitaire d'une heure, selon le barème suivant :
- Les 39 premières heures sans supplément,
- De la 40ème à la 44ème heure sont majorées de 50%,
- De la 45ème à la 49ème heure sont majorées de 75%,
- À partir de la 50ème heure, sont majorées de 100%.
#include <stdio.h>
int main(void)
{
int nbheures;
float prix, montant;
printf("saisir le nombre d'heures - ");
scanf("%d", &nbheures);
printf("saisir le prix unitaire d'une heure - ");
scanf("%f", &prix);
montant = 0;
if (nbheures <= 39)
{
montant = 0;
}
else if (nbheures < 45)
{
// De 40 à 44 : 5 heures max à 50%
montant = (nbheures - 39) * (prix * 1.5);
}
else if (nbheures < 50)
{
// 40-44 : 5h à 50%, puis 45-49 : heures à 75%
montant = (5 * prix * 1.5) + (nbheures - 44) * (prix * 1.75);
}
else
{
// 40-44 : 5h à 50%, 45-49 : 5h à 75%, reste à 100%
montant = (5 * prix * 1.5) + (5 * prix * 1.75) + (nbheures - 49) * (prix * 2);
}
printf("le montant des heures supplementaires est : %f\n", montant);
return 0;
}
def calcul_heures_sup(nb_heures, prix_horaire):
"""
Calcule le montant des heures supplémentaires selon le barème.
Args:
nb_heures: nombre total d'heures travaillées
prix_horaire: prix unitaire d'une heure normale
Returns:
Montant des heures supplémentaires
"""
if nb_heures <= 39:
return 0
montant = 0
# Tranche 40-44 (majoration 50%)
if nb_heures > 39:
heures_tranche1 = min(nb_heures - 39, 5) # max 5 heures
montant += heures_tranche1 * prix_horaire * 1.5
# Tranche 45-49 (majoration 75%)
if nb_heures > 44:
heures_tranche2 = min(nb_heures - 44, 5) # max 5 heures
montant += heures_tranche2 * prix_horaire * 1.75
# Tranche 50+ (majoration 100%)
if nb_heures > 49:
heures_tranche3 = nb_heures - 49
montant += heures_tranche3 * prix_horaire * 2
return montant
def saisie_calcul():
"""Fonction de saisie et d'affichage."""
nb_heures = int(input("saisir le nombre d'heures : "))
prix = float(input("saisir le prix unitaire d'une heure : "))
montant = calcul_heures_sup(nb_heures, prix)
print(f"le montant des heures supplementaires est : {montant:.2f}")
# Tests
saisie_calcul()
saisir le nombre d'heures - 50 saisir le prix unitaire d'une heure - 100 le montant des heures supplementaires est : 1825.000000
nb_heures = 50, prix = 100
le montant des heures supplementaires est : 1825.00
- 5 heures à 50% : 5 × 100 × 1.5 = 750
- 5 heures à 75% : 5 × 100 × 1.75 = 875
- 1 heure à 100% : 1 × 100 × 2 = 200
- Total : 750 + 875 + 200 = 1825
Heure suivante
Écrivez un programme qui lira au clavier l'heure et les minutes, et il affichera l'heure qu'il sera une minute plus tard.
Par exemple, si l'utilisateur tape 21 puis 32, le programme doit répondre : "Dans une minute, il sera 21 heure(s) 33".
NB : on suppose que l'utilisateur entre une heure valide. Pas besoin donc de la vérifier.
#include <stdio.h>
int main(void)
{
int heure, minutes;
printf("saisir l'heure - ");
scanf("%d", &heure);
printf("saisir les minutes - ");
scanf("%d", &minutes);
// Ajouter une minute
minutes++;
// Gérer le passage à l'heure suivante
if (minutes == 60)
{
minutes = 0;
heure++;
// Gérer le passage au jour suivant
if (heure == 24)
{
heure = 0;
}
}
printf("après une minute l'heure est %02d:%02d\n", heure, minutes);
return 0;
}
def heure_suivante(heure, minutes):
"""
Calcule l'heure une minute plus tard.
"""
minutes += 1
if minutes == 60:
minutes = 0
heure += 1
if heure == 24:
heure = 0
return heure, minutes
def format_heure(heure, minutes):
"""Formate l'heure avec deux chiffres."""
return f"{heure:02d}:{minutes:02d}"
def saisie_heure():
"""Fonction de saisie et d'affichage."""
heure = int(input("saisir l'heure : "))
minutes = int(input("saisir les minutes : "))
h, m = heure_suivante(heure, minutes)
print(f"après une minute l'heure est {format_heure(h, m)}")
# Version détaillée
print(f"{heure:02d}:{minutes:02d} → {h:02d}:{m:02d}")
# Tests
saisie_heure()
# Tests supplémentaires
print("\nTests :")
tests = [(23, 59), (12, 30), (0, 0), (14, 59)]
for h, m in tests:
h2, m2 = heure_suivante(h, m)
print(f"{h:02d}:{m:02d} → {h2:02d}:{m2:02d}")
saisir l'heure - 23 saisir les minutes - 59 après une minute l'heure est 00:00 Tests : 23:59 → 00:00 12:30 → 12:31 00:00 → 00:01 14:59 → 15:00
heure = 23, minutes = 59
après une minute l'heure est 00:00
Mentions selon une note
Écrire un programme qui à partir d'une note affiche la mention correspondante.
| Note | Mention |
|---|---|
| moins de 10 | Non admis |
| 10 à 11.99 | Passable |
| 12 à 13.99 | Assez bien |
| 14 à 15.99 | Bien |
| 16 à 20 | Très bien |
#include <stdio.h>
int main(void)
{
float note;
printf("Saisir une note (sur 20) - ");
scanf("%f", ¬e);
if (note < 0 || note > 20)
{
printf("Note invalide !\n");
}
else if (note < 10)
{
printf("Non admis\n");
}
else if (note < 12)
{
printf("Passable\n");
}
else if (note < 14)
{
printf("Assez bien\n");
}
else if (note < 16)
{
printf("Bien\n");
}
else
{
printf("Très bien\n");
}
return 0;
}
def mention(note):
"""
Retourne la mention correspondant à une note.
"""
if note < 0 or note > 20:
return "Note invalide"
elif note < 10:
return "Non admis"
elif note < 12:
return "Passable"
elif note < 14:
return "Assez bien"
elif note < 16:
return "Bien"
else:
return "Très bien"
def mention_switch(note):
"""
Version avec structure conditionnelle (style switch).
"""
match note // 2:
case 0 | 1 | 2 | 3 | 4:
if note < 10:
return "Non admis"
case 5:
return "Passable"
case 6:
return "Assez bien"
case 7:
return "Bien"
case 8 | 9 | 10:
return "Très bien"
return "Note invalide"
def saisie_mention():
"""Fonction de saisie et d'affichage."""
note = float(input("Saisir une note : "))
print(f"Note: {note} - Mention: {mention(note)}")
# Tests
saisie_mention()
print("\nTests de différentes notes:")
for note in [5, 10.5, 12.5, 14.5, 16.5, 21]:
print(f"Note: {note} -> {mention(note)}")
Saisir une note - 13.75 Assez bien Tests de différentes notes: Note: 5 -> Non admis Note: 10.5 -> Passable Note: 12.5 -> Assez bien Note: 14.5 -> Bien Note: 16.5 -> Très bien Note: 21 -> Note invalide
13.75
Assez bien
16.5
Très bien
Récapitulatif
| Exercice | Fonctionnalité | Concepts clés |
|---|---|---|
| 1 - Appartenance à un intervalle | Vérifier si un nombre est dans [a,b] | Comparaisons, condition composée |
| 2 - Signe d'un produit | Déterminer le signe sans calculer | Règle des signes, conditions multiples |
| 3 - Heures supplémentaires | Calcul du montant selon barème | Conditions avec tranches, calculs |
| 4 - Heure suivante | Ajouter une minute à une heure | Gestion des cas limites (59 min, 23h) |
| 5 - Mentions | Afficher la mention selon la note | Structure if/else if/else |
- Les structures conditionnelles permettent d'exécuter différents blocs selon des conditions.
- L'ordre des conditions est important dans une chaîne if/else if.
- Les conditions composées avec && (and) et || (or) permettent des tests complexes.
- Il faut toujours gérer les cas limites (valeurs aux bornes, valeurs spéciales).
- La règle des signes est un exemple classique de logique conditionnelle.
Discussion (0)
Soyez le premier à laisser un commentaire !
Laisser un commentaire
Votre commentaire sera visible après modération.