Exercices corrigés sur les bases de la programmation
Cette série d'exercices vous permettra de maîtriser les concepts fondamentaux de la programmation : boucles, conditions, calculs de suites, gestion de dates, etc.
Min, Max, Somme et Moyenne
Ecrire un programme qui permet de saisir une série de nombres entiers positifs et qui après saisie, affiche les valeurs du plus petit et du plus grand nombre saisi ainsi que la somme et la moyenne des nombres.
#include <stdio.h>
int main(void)
{
int N, Petit, Grand, S, val;
printf("Saisir N - ");
scanf("%d", &N);
S = 0;
Petit = 34234234; // Une grande valeur initiale
Grand = -1; // Une petite valeur initiale
for (int i = 0; i < N; i++)
{
printf("Saisir une valeur - ");
scanf("%d", &val);
S += val;
if (i == 0)
{
Petit = val;
Grand = val;
}
else
{
if (val > Grand)
Grand = val;
if (val < Petit)
Petit = val;
}
}
printf("le nombre le plus petit est %d \n", Petit);
printf("le nombre le plus grand est %d\n", Grand);
printf("la somme est %d\n", S);
printf("la moyenne est %f\n", (float)S / N);
return 0;
}N = int(input("Saisir N : "))
S = 0
Petit = 34234234
Grand = -1
for i in range(N):
Nb = int(input("saisir un nombre: "))
S += Nb
if i == 0:
Petit = Nb
Grand = Nb
else:
if Nb > Grand:
Grand = Nb
if Nb < Petit:
Petit = Nb
print("le nombre le plus petit est", Petit)
print("le nombre le plus grand est", Grand)
print("la somme est ", S)
print("la moyenne est", S/N)Saisir N - 3 Saisir une valeur - 10 Saisir une valeur - 11 Saisir une valeur - 12 le nombre le plus petit est 10 le nombre le plus grand est 12 la somme est 33 la moyenne est 11.000000
Calcul de sommes particulières
Ecrire un programme qui permet de calculer S1, S2, S3 et S4 tel que:
- \(S1 = 1 + 1/2 + 1/3 + ... + 1/N\)
- \(S2 = 1 + 1/2 + 1/4 + ... + 1/(2N)\)
- \(S3 = 1 - 1/2 + 1/4 - ... + 1/(2N)\)
- <\(S4 = 1 + x + x^2 + ... + x^N\)
#include <stdio.h>
#include <math.h>
int main(void)
{
int N, sign, i;
float S1 = 1, S2 = 1, S3 = 1, S4 = 1, x;
printf("Saisir N - ");
scanf("%d", &N);
// S1 = 1 + 1/2 + 1/3 + ... + 1/N
for (int i = 2; i < N + 1; i++)
S1 += 1.0 / i;
printf("la somme S1 est %f\n", S1);
// S2 = 1 + 1/2 + 1/4 + ... + 1/(2N)
for (i = 2; i < 2 * N + 1; i += 2)
{
S2 += 1.0 / i;
}
printf("la somme S2 est %f\n", S2);
// S3 = 1 - 1/2 + 1/4 - ... + 1/(2N)
sign = -1.0;
for (i = 2; i < 2 * N + 1; i += 2)
{
S3 += sign * (1.0 / i);
sign *= (-1);
}
printf("la somme S3 est %f \n", S3);
// S4 = 1 + x + x^2 + ... + x^N
printf("Saisir x - ");
scanf("%f", &x);
for (i = 1; i < N + 1; i++)
S4 += pow(x, i);
printf("la somme S4 est %f \n", S4);
return 0;
}N = int(input("Saisir N : "))
S1, S2, S3, S4 = 1, 1, 1, 1
# S1 = 1 + 1/2 + 1/3 + ... + 1/N
for i in range(2, N+1):
S1 += 1/i
print("la somme S1 est", S1)
# S2 = 1 + 1/2 + 1/4 + ... + 1/(2N)
for i in range(2, 2*N+1, 2):
S2 += 1/i
print("la somme S2 est", S2)
# S3 = 1 - 1/2 + 1/4 - ... + 1/(2N)
signe = -1
for i in range(2, 2*N+1, 2):
S3 += signe * (1/i)
signe *= (-1)
print("la somme S3 est", S3)
# S4 = 1 + x + x^2 + ... + x^N
x = int(input("saisir x : "))
for i in range(1, N+1):
S4 += x**i
print("la somme S4 est", S4)Saisir N 5 la somme S1 est 2.283333333333333 la somme S2 est 2.141666666666667 la somme S3 est 0.6083333333333334 saisir x 3 la somme S4 est 364
Suite définie par récurrence (20ème terme)
Ecrire un programme qui détermine le 20ème terme d'une suite définie par :
- S₀ = 2
- S₁ = 3
- Sₙ = Sₙ₋₁ + (-1)ⁿ × Sₙ₋₂
#include <stdio.h>
#include <math.h>
int main(void)
{
int S0, S1, Sn, i;
S0 = 2;
S1 = 3;
for (i = 2; i < 20; i++)
{
Sn = S1 + (pow((-1), i)) * S0;
S0 = S1;
S1 = Sn;
}
printf("le 20eme terme de la suite est %d", S1);
return 0;
}S0 = 2
S1 = 3
for i in range(2, 20):
Sn = S1 + ((-1)**i) * S0
S0 = S1
S1 = Sn
print("le 20eme terme de la suite est", S1)le 20eme terme de la suite est 131
Suite définie par récurrence (N-ième terme)
Ecrire un programme qui détermine le N-ième terme d'une suite (N est fourni par l'utilisateur) définie par :
- S₀ = 2
- S₁ = 3
- S₂ = -2
- Sₙ = Sₙ₋₃ + (-1)ⁿ × Sₙ₋₁
#include <stdio.h>
#include <math.h>
int main(void)
{
int S0, S1, S2, Sn, N, i;
printf("Saisir N - ");
scanf("%d", &N);
S0 = 2;
S1 = 3;
S2 = -2;
for (i = 3; i < N; i++)
{
Sn = S0 + (pow((-1), i)) * S2;
S0 = S1;
S1 = S2;
S2 = Sn;
}
printf("le %d ième terme de la suite est %d", N, S2);
return 0;
}N = int(input("Saisir N - "))
S0 = 2
S1 = 3
S2 = -2
for i in range(3, N):
Sn = S0 + ((-1)**i) * S2
S0 = S1
S1 = S2
S2 = Sn
print("le", N, "ieme terme de la suite est", S2)Saisir N - 5 le 5 ième terme de la suite est 7
Date du lendemain
Ecrire un programme qui à partir d'une date divisée en ses composantes (J, M, A) affiche la date du lendemain. Tenir compte du cas où la date saisie est la date du dernier jour du mois ou celle du dernier jour de l'année.
Remarque : prendre 28 comme nombre de jours du mois de février.
#include <stdio.h>
int main(void)
{
int A, M, J;
printf("Saisir l'année - ");
scanf("%d", &A);
printf("Saisir le mois - ");
scanf("%d", &M);
printf("Saisir le jour - ");
scanf("%d", &J);
if (M > 12 || J > 31)
printf("la date est invalide");
else
{
if (M == 12) // Dernier mois de l'année
{
if (J < 31)
J += 1;
else
{
J = 1;
M = 1;
A += 1;
}
}
else if (M == 2) // Février (28 jours)
{
if (J > 28)
printf("jour invalide");
else if (J == 28)
{
J = 1;
M += 1;
}
else
J += 1;
}
else
{
// Mois de 31 jours
if (M == 1 || M == 3 || M == 5 || M == 7 || M == 8 || M == 10)
{
if (J == 31)
{
J = 1;
M += 1;
}
else
J += 1;
}
else // Mois de 30 jours
{
if (J == 30)
{
J = 1;
M += 1;
}
else
J += 1;
}
}
}
printf("la date de lendemain est %d-%d-%d", A, M, J);
return 0;
}A = int(input("saisir une annee : "))
M = int(input("saisir le mois : "))
J = int(input("saisir le jour : "))
if M > 12 or J > 31:
print("la date est invalide")
else:
if M == 12:
if J < 31:
J += 1
else:
J = 1
M = 1
A += 1
elif M == 2:
if J > 28:
print("jour invalide")
elif J == 28:
J = 1
M += 1
else:
J += 1
else:
if M in [1, 3, 5, 7, 8, 10]:
if J == 31:
J = 1
M += 1
else:
J += 1
else:
if J == 30:
J = 1
M += 1
else:
J += 1
print("la date de lendemain est", A, "-", M, "-", J)Saisir l'année - 2019 Saisir le mois - 5 Saisir le jour - 31 la date de lendemain est 2019-6-1
Moyenne d'un étudiant
Pour calculer les moyennes de ses étudiants, un professeur calcule deux moyennes ; la moyenne arithmétique et la moyenne de la mauvaise et la meilleure des notes de trois notes. Il choisira par la suite la meilleure des deux moyennes calculées.
Ecrire un programme qui saisit les trois notes d'un étudiant et affiche la moyenne finale accordée.
Exemple :
Si les trois notes d'un étudiant sont : 12, 8, 14 alors :
- Moyenne arithmétique = (12+8+14)/3 = 34/3 = 11,34
- Moyenne de la mauvaise et de la meilleure : (14+8)/2 = 22/2 = 11
Le professeur choisira la première moyenne.
#include <stdio.h>
int main(void)
{
float N1, N2, N3, M1, M2;
printf("Saisir la note 1 - ");
scanf("%f", &N1);
printf("Saisir la note 2 - ");
scanf("%f", &N2);
printf("Saisir la note 3 - ");
scanf("%f", &N3);
M1 = (N1 + N2 + N3) / 3;
M2 = 0;
// Identifier la note médiane pour calculer la moyenne des extrêmes
if (((N1 <= N2) && (N2 <= N3)) || ((N3 <= N2) && (N2 <= N1)))
M2 = (N1 + N3) / 2;
else if (((N2 <= N1) && (N1 <= N3)) || ((N3 <= N1) && (N1 <= N2)))
M2 = (N3 + N2) / 2;
else
M2 = (N1 + N2) / 2;
if (M1 > M2)
printf("la meilleure note est : %f", M1);
else
printf("la meilleure note est : %f", M2);
return 0;
}N1 = float(input("saisir la premiere note : "))
N2 = float(input("saisir la deuxieme note : "))
N3 = float(input("saisir la troisieme note : "))
M1 = (N1 + N2 + N3) / 3
M2 = 0
if N1 <= N2 <= N3 or N3 <= N2 <= N1:
M2 = (N1 + N3) / 2
elif N2 <= N1 <= N3 or N3 <= N1 <= N2:
M2 = (N3 + N2) / 2
else:
M2 = (N1 + N2) / 2
if M1 > M2:
print("la meilleure note est :", M1)
else:
print("la meilleure note est :", M2)Saisir la note 1 - 14 Saisir la note 2 - 12 Saisir la note 3 - 17 la meilleure note est : 14.500000
Tri de trois valeurs
Ecrivez un programme qui lit trois valeurs entières (A, B et C) au clavier. Triez les valeurs A, B et C par échanges successifs de manière à obtenir A, B et C dans cet ordre, et affichez le résultat.
#include <stdio.h>
int main(void)
{
int A, B, C, aux;
printf("Saisir A - ");
scanf("%d", &A);
printf("Saisir B - ");
scanf("%d", &B);
printf("Saisir C - ");
scanf("%d", &C);
// Trier A, B, C par ordre croissant
if (A <= C && C <= B)
{
aux = C;
C = B;
B = aux;
}
else if (B <= C && C <= A)
{
aux = A;
A = B;
B = C;
C = aux;
}
else if (C <= A && A <= B)
{
aux = A;
A = C;
C = B;
B = aux;
}
else if (B <= A && A <= C)
{
aux = A;
A = B;
B = aux;
}
else if (C <= B && B <= A)
{
aux = A;
A = C;
C = aux;
}
printf("voici les valeurs triées : %d - %d - %d", A, B, C);
return 0;
}A = int(input("saisir A : "))
B = int(input("saisir B : "))
C = int(input("saisir C : "))
# Trier A, B, C par ordre croissant
if A <= C <= B:
A, B, C = A, C, B
elif B <= C <= A:
A, B, C = B, C, A
elif C <= A <= B:
A, B, C = C, A, B
elif B <= A <= C:
A, B, C = B, A, C
elif C <= B <= A:
A, B, C = C, B, A
print("voici les valeurs triees :", A, ";", B, ";", C)Saisir A - 45 Saisir B - 13 Saisir C - 15 voici les valeurs triées : 13 - 15 - 4
- Les boucles
foretwhilesont essentielles pour les calculs itératifs. - Les structures conditionnelles
if/elsepermettent de gérer différents cas. - Pour les suites récurrentes, on utilise des variables temporaires pour conserver les valeurs précédentes.
- La gestion des dates nécessite de connaître le nombre de jours par mois.
- Le tri de petites séquences peut se faire par comparaisons successives.
Discussion (0)
Soyez le premier à laisser un commentaire !
Laisser un commentaire
Votre commentaire sera visible après modération.