Les programmes que nous avons écrits jusqu'ici s'exécutent de manière séquentielle. Dans le monde réel, on a souvent besoin d'exécuter certaines instructions uniquement quand des conditions sont remplies. C'est le rôle des instructions de contrôle.
>, <, ==, !=, >=, <=) et les opérateurs logiques (&& / and, || / or, ! / not).if (condition1) {
/* bloc exécuté si condition1 est vraie */
} else if (condition2) {
/* bloc exécuté si condition2 est vraie */
} else {
/* bloc exécuté si aucune condition n'est vraie */
}Exercice 1 — Maximum de trois nombres
Trouver le maximum parmi trois nombres
Écrire un programme qui lit trois entiers et affiche le plus grand des trois, en utilisant des if-else imbriqués.
- Arbre de décision : si
num1 > num2, comparernum1ànum3; sinon comparernum2ànum3. - On utilise des if imbriqués : un if à l'intérieur d'un autre if.
- Alternative plus concise en Python :
max(num1, num2, num3)— fonction native.
#include <stdio.h>
int main()
{
int num1, num2, num3, max;
printf("Saisir 3 nombres : ");
scanf("%d %d %d", &num1, &num2, &num3);
if (num1 > num2)
{
if (num1 > num3)
max = num1; /* num1 est le plus grand */
else
max = num3; /* num3 est le plus grand */
}
else
{
if (num2 > num3)
max = num2; /* num2 est le plus grand */
else
max = num3; /* num3 est le plus grand */
}
printf("Le maximum est : %d\n", max);
return 0;
}num1 = int(input("Saisir le nombre 1 : "))
num2 = int(input("Saisir le nombre 2 : "))
num3 = int(input("Saisir le nombre 3 : "))
# Méthode avec if imbriqués
if num1 > num2:
if num1 > num3:
max_val = num1
else:
max_val = num3
else:
if num2 > num3:
max_val = num2
else:
max_val = num3
print("Le maximum est :", max_val)
# Méthode concise Python
# print("Le maximum est :", max(num1, num2, num3))import java.util.Scanner;
public class Maximum {
public static void main(String[] args) {
Scanner clavier = new Scanner(System.in);
System.out.print("Saisir le nombre 1 : ");
int num1 = clavier.nextInt();
System.out.print("Saisir le nombre 2 : ");
int num2 = clavier.nextInt();
System.out.print("Saisir le nombre 3 : ");
int num3 = clavier.nextInt();
int max;
if (num1 > num2) {
max = (num1 > num3) ? num1 : num3;
} else {
max = (num2 > num3) ? num2 : num3;
}
System.out.println("Le maximum est : " + max);
clavier.close();
}
}max = (a > b) ? a : b; comme raccourci d'un if-else à une seule expression.Le maximum est : 17
17 12 16
Le maximum est : 17
Exercice 2 — Divisibilité par 3 et 13
Vérifier la divisibilité par 3 et 13
Écrire un programme qui lit un entier et vérifie s'il est divisible à la fois par 3 et par 13.
- Un nombre est divisible par n si
nombre % n == 0(le reste vaut 0). - On combine les deux conditions avec l'opérateur logique
&&(ET logique) : les deux doivent être vraies simultanément.
a % b donne le reste de la division entière de a par b.Exemple :
117 % 3 = 0 (117 = 39 × 3) et 117 % 13 = 0 (117 = 9 × 13).#include <stdio.h>
int main()
{
int nb;
printf("Saisir un nombre : ");
scanf("%d", &nb);
if ((nb % 3 == 0) && (nb % 13 == 0))
printf("%d est divisible par 3 et 13\n", nb);
else
printf("%d n'est pas divisible par 3 et 13\n", nb);
return 0;
}nb = int(input("Saisir un nombre : "))
if (nb % 3 == 0) and (nb % 13 == 0):
print(f"{nb} est divisible par 3 et 13")
else:
print(f"{nb} n'est pas divisible par 3 et 13")import java.util.Scanner;
public class Divisibilite {
public static void main(String[] args) {
Scanner clavier = new Scanner(System.in);
System.out.print("Saisir un nombre : ");
int nb = clavier.nextInt();
if ((nb % 3 == 0) && (nb % 13 == 0))
System.out.println(nb + " est divisible par 3 et 13");
else
System.out.println(nb + " n'est pas divisible par 3 et 13");
clavier.close();
}
}117 est divisible par 3 et 13
117
117 est divisible par 3 et 13
Exercice 3 — Nombre pair ou impair
Vérifier si un nombre est pair ou impair
Écrire un programme qui lit un entier et détermine s'il est pair ou impair.
- Un nombre est pair si et seulement si son reste par 2 est égal à 0 :
nb % 2 == 0. - Sinon, il est impair (la seule autre possibilité — pas besoin de
else if).
if / else suffit.#include <stdio.h>
int main()
{
int nb;
printf("Saisir un nombre : ");
scanf("%d", &nb);
if (nb % 2 == 0)
printf("%d est un nombre pair.\n", nb);
else
printf("%d est un nombre impair.\n", nb);
return 0;
}nb = int(input("Saisir un nombre : "))
if nb % 2 == 0:
print(f"{nb} est un nombre pair.")
else:
print(f"{nb} est un nombre impair.")import java.util.Scanner;
public class PairImpair {
public static void main(String[] args) {
Scanner clavier = new Scanner(System.in);
System.out.print("Saisir un nombre : ");
int nb = clavier.nextInt();
if (nb % 2 == 0)
System.out.println(nb + " est un nombre pair.");
else
System.out.println(nb + " est un nombre impair.");
clavier.close();
}
}14 est un nombre pair.
14
14 est un nombre pair.
Exercice 4 — Voyelle ou consonne
Identifier voyelle, consonne ou caractère spécial
Écrire un programme qui lit un caractère et détermine s'il s'agit d'une voyelle, d'une consonne ou d'un caractère spécial.
Les voyelles sont : a, e, i, o, u (minuscules et majuscules).
- Cas 1 — Voyelle : tester si
chappartient à'a','e','i','o','u','A','E','I','O','U'avec l'opérateur||(OU logique). - Cas 2 — Consonne : tester si
chest une lettre (entre 'a'-'z' ou 'A'-'Z') mais n'est pas une voyelle. - Cas 3 — Caractère spécial : tous les autres cas (chiffres, symboles…).
ch.lower() in 'aeiou', ce qui élimine le besoin de tester séparément minuscules et majuscules.#include <stdio.h>
int main()
{
char ch;
printf("Saisir un caractère : ");
scanf(" %c", &ch); /* espace avant %c pour ignorer le '\n' résiduel */
if (ch=='a' || ch=='e' || ch=='i' || ch=='o' || ch=='u' ||
ch=='A' || ch=='E' || ch=='I' || ch=='O' || ch=='U')
{
printf("'%c' est une voyelle.\n", ch);
}
else if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
{
printf("'%c' est une consonne.\n", ch);
}
else
{
printf("'%c' est un caractère spécial.\n", ch);
}
return 0;
}ch=(input("Saisir un nombre : "))[0]
if(ch=='a' or ch=='e' or ch=='i' or ch=='o' or ch=='u' or ch=='A' or ch=='E' or ch=='I' or ch=='O' or ch=='U'):
print(ch,"est voyelle.")
elif((ch >= 'a' and ch <= 'z') or (ch >= 'A' and ch <= 'Z')):
# consonnes */
print(ch, " consonnes.")
else:
# Ni voyelle ni consonne
print(ch," est un caractère spécial.")import java.util.Scanner;
public class VoyelleConsonne {
public static void main(String[] args) {
Scanner clavier = new Scanner(System.in);
System.out.print("Saisir un caractère : ");
char ch = clavier.next().charAt(0);
String voyelles = "aeiouAEIOU";
if (voyelles.indexOf(ch) != -1) {
System.out.println("'" + ch + "' est une voyelle.");
} else if (Character.isLetter(ch)) {
System.out.println("'" + ch + "' est une consonne.");
} else {
System.out.println("'" + ch + "' est un caractère spécial.");
}
clavier.close();
}
}'e' est une voyelle.
e
'e' est une voyelle.
b
'b' est une consonne.
Exercice 5 — Jour de la semaine
Afficher le nom du jour selon son numéro (1–7)
Écrire un programme qui lit un entier entre 1 et 7 et affiche le nom du jour correspondant. Tout autre entier est une entrée invalide.
- Utiliser une chaîne de
if / else if / elsepour tester chaque valeur de 1 à 7. - Le dernier
elsegère les entrées invalides (validation des données). - Alternative : en Python on peut utiliser un dictionnaire ; en Java/C, l'instruction
switchest plus adaptée pour ce type de multi-branchement.
else (ou default dans un switch) pour gérer les valeurs inattendues. C'est une règle fondamentale de robustesse.#include <stdio.h>
int main()
{
int jour;
printf("Saisir le numéro du jour (1-7) : ");
scanf("%d", &jour);
if (jour == 1) printf("Lundi\n");
else if (jour == 2) printf("Mardi\n");
else if (jour == 3) printf("Mercredi\n");
else if (jour == 4) printf("Jeudi\n");
else if (jour == 5) printf("Vendredi\n");
else if (jour == 6) printf("Samedi\n");
else if (jour == 7) printf("Dimanche\n");
else printf("Entrée invalide ! Saisir un numéro entre 1 et 7.\n");
return 0;
}jour=int(input("Saisir le numéro du jour : "))
if(jour == 1):
print("Lundi")
elif(jour == 2):
print("Mardi")
elif(jour == 3):
print("Mercredi")
elif(jour == 4):
print("Jeudi")
elif(jour == 5):
print("Vendredi")
elif(jour == 6):
print("Samedi")
elif(jour == 7):
print("Dimanche")
else:
print("Entrée invalide! Veuillez saisir le numéro de jour entre 1 et 7.")import java.util.Scanner;
public class JourSemaine {
public static void main(String[] args) {
Scanner clavier = new Scanner(System.in);
System.out.print("Saisir le numéro du jour (1-7) : ");
int jour = clavier.nextInt();
// switch — recommandé pour les multi-branchements sur valeur exacte
switch (jour) {
case 1: System.out.println("Lundi"); break;
case 2: System.out.println("Mardi"); break;
case 3: System.out.println("Mercredi"); break;
case 4: System.out.println("Jeudi"); break;
case 5: System.out.println("Vendredi"); break;
case 6: System.out.println("Samedi"); break;
case 7: System.out.println("Dimanche"); break;
default: System.out.println("Entrée invalide !");
}
clavier.close();
}
}Mercredi
3
Mercredi
- 1 ≤ numéro ≤ 7
Exercice 6 — Nombre de jours dans un mois
Afficher le nombre de jours d'un mois (1–12)
Écrire un programme qui lit un numéro de mois (1–12) et affiche le nombre de jours correspondant selon le tableau ci-dessous.
| Mois | Nombre de jours |
|---|---|
| Janvier, Mars, Mai, Juillet, Août, Octobre, Décembre | 31 jours |
| Février | 28 ou 29 jours |
| Avril, Juin, Septembre, Novembre | 30 jours |
- Regrouper les mois à 31 jours : 1, 3, 5, 7, 8, 10, 12. En C/Java, le
switchavec fall-through (pas debreak) est idéal. - Mois à 30 jours : 4, 6, 9, 11.
- Février (mois 2) : 28 jours en année simple, 29 en année bissextile.
#include <stdio.h>
int main()
{
int mois;
printf("Saisir le numéro du mois (1-12) : ");
scanf("%d", &mois);
switch (mois)
{
case 1: case 3: case 5: case 7:
case 8: case 10: case 12:
printf("31 jours\n"); break;
case 4: case 6: case 9: case 11:
printf("30 jours\n"); break;
case 2:
printf("28 ou 29 jours\n"); break;
default:
printf("Entrée invalide ! (1-12)\n");
}
return 0;
}mois=int(input("Saisir le numéro du mois : "))
if(mois == 1):
print("31 jours")
elif(mois == 2):
print("28 ou 29 jours")
elif(mois == 3):
print("31 jours")
elif(mois == 4):
print("30 jours")
elif(mois == 5):
print("31 jours")
elif(mois == 6):
print("30 jours")
elif(mois == 7):
print("31 jours")
elif(mois == 8):
print("31 jours")
elif(mois == 9):
print("30 jours")
elif(mois == 10):
print("31 jours")
elif(mois == 11):
print("30 jours")
elif(mois == 12):
print("31 jours")
else:
printf("Entrée invalide! Veuillez saisir le numéro du mois entre (1-12).")import java.util.Scanner;
public class JoursMois {
public static void main(String[] args) {
Scanner clavier = new Scanner(System.in);
System.out.print("Saisir le numéro du mois (1-12) : ");
int mois = clavier.nextInt();
switch (mois) {
case 1: case 3: case 5: case 7:
case 8: case 10: case 12:
System.out.println("31 jours"); break;
case 4: case 6: case 9: case 11:
System.out.println("30 jours"); break;
case 2:
System.out.println("28 ou 29 jours"); break;
default:
System.out.println("Entrée invalide !");
}
clavier.close();
}
}case mènent au même bloc, on les empile sans break entre eux : c'est le fall-through. En Python, on utilise une liste et l'opérateur in.31 jours
7
31 jours
Exercice 7 — Racines d'une équation quadratique
Résoudre ax² + bx + c = 0
Écrire un programme qui lit les coefficients a, b, c d'une équation quadratique \(ax^2 + bx + c = 0\) et affiche ses racines.
Le discriminant est : \(\Delta = b^2 - 4ac\)
- Si \(\Delta > 0\) : deux racines réelles distinctes \(\dfrac{-b \pm \sqrt{\Delta}}{2a}\)
- Si \(\Delta = 0\) : une racine double \(\dfrac{-b}{2a}\)
- Si \(\Delta < 0\) : deux racines complexes \(\dfrac{-b}{2a} \pm i\,\dfrac{\sqrt{-\Delta}}{2a}\)
— \(\Delta > 0\) : 2 racines réelles distinctes
— \(\Delta = 0\) : 1 racine double (racine répétée)
— \(\Delta < 0\) : 2 racines complexes conjuguées
- Calculer
discriminant = b*b - 4*a*c. - Tester le signe du discriminant avec
if / else if / else. - Utiliser
sqrt()— uniquement sur valeur positive, doncsqrt(-discriminant)pour le cas complexe.
#include <stdio.h>
#include <math.h>
int main()
{
float a, b, c;
double r1, r2, imag, discriminant;
printf("Saisir a, b, c (aX^2 + bX + c = 0) : ");
scanf("%f %f %f", &a, &b, &c);
discriminant = (double)(b*b) - 4.0*a*c;
if (discriminant > 0)
{
r1 = (-b + sqrt(discriminant)) / (2*a);
r2 = (-b - sqrt(discriminant)) / (2*a);
printf("Deux racines réelles distinctes : %.4f et %.4f\n", r1, r2);
}
else if (discriminant == 0)
{
r1 = -b / (2.0*a);
printf("Une racine double : %.4f\n", r1);
}
else
{
r1 = -b / (2.0*a);
imag = sqrt(-discriminant) / (2.0*a);
printf("Deux racines complexes : %.4f + i*%.4f et %.4f - i*%.4f\n",
r1, imag, r1, imag);
}
return 0;
}import math
a = float(input("Saisir a : "))
b = float(input("Saisir b : "))
c = float(input("Saisir c : "))
discriminant = b**2 - 4*a*c
if discriminant > 0:
r1 = (-b + math.sqrt(discriminant)) / (2*a)
r2 = (-b - math.sqrt(discriminant)) / (2*a)
print(f"Deux racines réelles distinctes : {r1:.4f} et {r2:.4f}")
elif discriminant == 0:
r1 = -b / (2*a)
print(f"Une racine double : {r1:.4f}")
else:
partie_reelle = -b / (2*a)
partie_imag = math.sqrt(-discriminant) / (2*a)
print(f"Deux racines complexes : {partie_reelle:.4f} + i*{partie_imag:.4f}"
f" et {partie_reelle:.4f} - i*{partie_imag:.4f}")import java.util.Scanner;
public class EquationQuadratique {
public static void main(String[] args) {
Scanner clavier = new Scanner(System.in);
System.out.print("Saisir a : "); double a = clavier.nextDouble();
System.out.print("Saisir b : "); double b = clavier.nextDouble();
System.out.print("Saisir c : "); double c = clavier.nextDouble();
double discriminant = b*b - 4*a*c;
if (discriminant > 0) {
double r1 = (-b + Math.sqrt(discriminant)) / (2*a);
double r2 = (-b - Math.sqrt(discriminant)) / (2*a);
System.out.printf("Deux racines réelles : %.4f et %.4f%n", r1, r2);
} else if (discriminant == 0) {
double r1 = -b / (2*a);
System.out.printf("Une racine double : %.4f%n", r1);
} else {
double re = -b / (2*a);
double imag = Math.sqrt(-discriminant) / (2*a);
System.out.printf("Deux racines complexes : %.4f + i*%.4f et %.4f - i*%.4f%n",
re, imag, re, imag);
}
clavier.close();
}
}Deux racines complexes : -0.7500 + i*0.6614 et -0.7500 - i*0.6614
1 -5 6
Deux racines réelles distinctes : 3.0000 et 2.0000
2 3 2
Deux racines complexes : -0.7500 + i*0.6614 et -0.7500 - i*0.6614
Exercice 8 — Profit ou perte
Calculer le profit ou la perte d'une vente
Écrire un programme qui lit le prix de fabrication et le prix de vente d'un produit, puis affiche le profit, la perte ou l'équilibre.
- Si prix de vente > prix de fabrication → Profit
- Si prix de fabrication > prix de vente → Perte
- Sinon → Ni profit ni perte
- Profit = prix_vente − prix_fabrication (si positif).
- Perte = prix_fabrication − prix_vente (si négatif).
- Trois cas mutuellement exclusifs :
if / else if / else.
#include <stdio.h>
int main()
{
double pf, pv, montant;
printf("Prix de fabrication : ");
scanf("%lf", &pf);
printf("Prix de vente : ");
scanf("%lf", &pv);
if (pv > pf) {
montant = pv - pf;
printf("Profit = %.2f\n", montant);
} else if (pf > pv) {
montant = pf - pv;
printf("Perte = %.2f\n", montant);
} else {
printf("Ni profit ni perte.\n");
}
return 0;
}pf = float(input("Prix de fabrication : "))
pv = float(input("Prix de vente : "))
if pv > pf:
print(f"Profit = {pv - pf:.2f}")
elif pf > pv:
print(f"Perte = {pf - pv:.2f}")
else:
print("Ni profit ni perte.")import java.util.Scanner;
public class ProfitPerte {
public static void main(String[] args) {
Scanner clavier = new Scanner(System.in);
System.out.print("Prix de fabrication : ");
double pf = clavier.nextDouble();
System.out.print("Prix de vente : ");
double pv = clavier.nextDouble();
if (pv > pf)
System.out.printf("Profit = %.2f%n", pv - pf);
else if (pf > pv)
System.out.printf("Perte = %.2f%n", pf - pv);
else
System.out.println("Ni profit ni perte.");
clavier.close();
}
}Perte = 2.00
13 11
Perte = 2.00
Exercice 9 — Année bissextile
Vérifier si une année est bissextile
Écrire un programme qui lit une année et détermine si elle est bissextile (366 jours) ou non (365 jours).
— elle est divisible par 4 ET non divisible par 100,
— OU elle est divisible par 400.
En logique :
(annee % 4 == 0 && annee % 100 != 0) || (annee % 400 == 0)- 1900 : divisible par 4 ET par 100 mais pas par 400 → non bissextile.
- 2000 : divisible par 400 → bissextile.
- 2020 : divisible par 4, non par 100 → bissextile.
#include <stdio.h>
int main()
{
int annee;
printf("Saisir une année : ");
scanf("%d", &annee);
if (((annee % 4 == 0) && (annee % 100 != 0)) || (annee % 400 == 0))
printf("%d est une année bissextile (366 jours).\n", annee);
else
printf("%d est une année ordinaire (365 jours).\n", annee);
return 0;
}annee = int(input("Saisir une année : "))
if (annee % 4 == 0 and annee % 100 != 0) or (annee % 400 == 0):
print(f"{annee} est une année bissextile (366 jours).")
else:
print(f"{annee} est une année ordinaire (365 jours).")import java.util.Scanner;
public class AnneeBissextile {
public static void main(String[] args) {
Scanner clavier = new Scanner(System.in);
System.out.print("Saisir une année : ");
int annee = clavier.nextInt();
if (((annee % 4 == 0) && (annee % 100 != 0)) || (annee % 400 == 0))
System.out.println(annee + " est une année bissextile (366 jours).");
else
System.out.println(annee + " est une année ordinaire (365 jours).");
clavier.close();
}
}2020 est une année bissextile (366 jours).
2020
2020 est une année bissextile (366 jours).
Exercice 10 — Type d'un caractère
Lettre, chiffre ou caractère spécial ?
Écrire un programme qui lit un caractère et détermine s'il s'agit d'une :
- Lettre : entre a–z ou A–Z
- Chiffre : entre 0–9
- Caractère spécial : tout autre caractère
- En C, les caractères sont représentés par leur code ASCII. On peut les comparer directement :
'a' <= ch <= 'z'(mais en C il faut écrirech >= 'a' && ch <= 'z'). - Python fournit les méthodes
str.isalpha()etstr.isdigit()qui simplifient les tests. - Java fournit
Character.isLetter(ch)etCharacter.isDigit(ch).
isalpha(), isdigit(), Character.isLetter()…) aux comparaisons manuelles : elles gèrent aussi les caractères accentués et Unicode.#include <stdio.h>
int main()
{
char ch;
printf("Saisir un caractère : ");
scanf(" %c", &ch);
if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
printf("'%c' est une lettre.\n", ch);
else if (ch >= '0' && ch <= '9')
printf("'%c' est un chiffre.\n", ch);
else
printf("'%c' est un caractère spécial.\n", ch);
return 0;
}ch=(input("Saisir un caractère : "))[0]
# si ch est une lettre */
if((ch >= 'a' and ch <= 'z') or (ch >= 'A' and ch <= 'Z')):
print(ch," est une lettre.")
elif(ch >= '0' and ch <= '9'):
print(ch," est un chiffre.")
else:
print(ch," est un caractère spéciale.")import java.util.Scanner;
public class TypeCaractere {
public static void main(String[] args) {
Scanner clavier = new Scanner(System.in);
System.out.print("Saisir un caractère : ");
char ch = clavier.next().charAt(0);
if (Character.isLetter(ch))
System.out.println("'" + ch + "' est une lettre.");
else if (Character.isDigit(ch))
System.out.println("'" + ch + "' est un chiffre.");
else
System.out.println("'" + ch + "' est un caractère spécial.");
clavier.close();
}
}'4' est un chiffre.
4
'4' est un chiffre.
@
'@' est un caractère spécial.
Récapitulatif — Opérateurs utilisés
| Opérateur | Signification | C / Java | Python | Exemple |
|---|---|---|---|---|
| Égalité | a est égal à b | a == b | a == b | nb == 0 |
| Différence | a différent de b | a != b | a != b | nb != 0 |
| ET logique | les deux conditions vraies | && | and | a>0 && b>0 |
| OU logique | au moins une condition vraie | || | or | a==1 || a==7 |
| NON logique | inverse la condition | ! | not | !(a == b) |
| Modulo | reste de la division | % | % | nb % 2 == 0 |
Discussion (0)
Soyez le premier à laisser un commentaire !
Laisser un commentaire
Votre commentaire sera visible après modération.