Programmation C++/Les structures de contrôles/Exercices
Exercices sur les structures de contrôle
modifierEXERCICE 1
modifierÉcrire un programme qui demande à l'utilisateur de taper un entier et qui affiche GAGNE si l'entier est entre 56 et 78 bornes incluses PERDU sinon.
Cet exercice a pour but de vérifier les points techniques suivants :
- La notion de variables et leur déclaration.
- L'utilisation de
cin
et decout
. - Le choix d'une structure de contrôle adaptée au problème !
Voici le fichier source :
#include<iostream>
using namespace std;
int main()
{
int a;
cout<<"Tapez un entier : "; cin>>a;
if ((a>=56)&&(a<=78)) cout<<"GAGNE"<<endl; else cout<<"PERDU"<<endl;
return 0;
}
EXERCICE 2
modifierÉcrire un programme qui affiche tous les entiers de 8 jusqu’à 23 (bornes incluses) en utilisant un for.
Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation rudimentaire d'un for.
Voici le fichier source :
#include<iostream>
using namespace std;
int main()
{
int i;
for (i=8;i<=23;i++) cout<<i<<endl;
return 0;
}
EXERCICE 3
modifierMême exercice mais en utilisant un while
.
Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation rudimentaire d'un
while
.
Voici le fichier source :
#include<iostream>
using namespace std;
int main()
{
int i=8;
while(i<=23)
{
cout<<i<<endl;
i++;
}
return 0;
}
EXERCICE 4
modifierÉcrire un programme qui demande à l’utilisateur de taper 10 entiers et qui affiche leur somme.
Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation d'un for.
- Étude d'un algorithme usuel : calcul d'une somme.
Voici le fichier source :
#include<iostream>
using namespace std;
int main()
{
int i, s=0, x;
for(i=0; i<10; i++)
{
cout<<"Tapez un entier : "; cin>>x;
s = s + x;
}
cout<<"La somme vaut : "<<s<<endl;
return 0;
}
EXERCICE 5
modifierÉcrire un programme qui demande à l’utilisateur de taper 10 entiers et qui affiche le plus petit de ces entiers.
Voici le fichier source :
#include<iostream>
using namespace std;
int main()
{
int i, ppt, x;
for(i=0; i<10; i++)
{
cout<<"Tapez un entier : "; cin>>x;
if(i==0) ppt=x; else if(x<ppt) ppt=x;
}
cout<<"Le plus petit vaut : "<< ppt <<endl;
return 0;
}
EXERCICE 6
modifierÉcrire un programme qui demande à l'utilisateur de taper un entier N et qui calcule la somme des cubes de 5^3 à N^3.
Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation simple du for.
- Étude d'un algorithme usuel : calcul d'une somme.
- Modélisation d'un problème simple issu des mathématiques.
Voici le fichier source :
#include<iostream>
using namespace std;
int main()
{
int N,s=0,i;
cout<<"Tapez la valeur de N : "; cin>>N;
for (i=5 ; i<=N ; i++)
s = s + i*i*i;
cout<<"La somme vaut : "<<s<<endl;
return 0;
}
EXERCICE 7
modifierÉcrire un programme qui demande à l'utilisateur de taper un entier N et qui calcule u(N) défini par :
u(0)=3
u(n+1)=3.u(n)+4
Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation simple du for.
- Étude d'un algorithme usuel : calcul des termes d'une suite récurrente.
- Modélisation d'un problème issu des mathématiques.
Voici le fichier source :
#include<iostream>
using namespace std;
int main()
{
int i, u=3, N;
cout<<"Tapez N : "; cin>>N;
for(i=0; i<N; i++)
u=u*3+4;
cout << "u(" << N << ")=" << u << endl;
return 0;
}
EXERCICE 8
modifierÉcrire un programme qui demande à l'utilisateur de taper un entier N et qui calcule u(N) défini par :
u(0)=1
u(1)=1
u(n+1)=u(n)+u(n-1)
Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation simple du for.
- Étude d'un algorithme usuel : calcul d'une suite récurrente.
- Modélisation d'un problème simple issu des mathématiques.
Voici le fichier source :
#include<iostream>
using namespace std;
int main()
{
int nmax;
double un=1,unp1=1,unp2;
cout << " Entrez n_max " ; cin >> nmax;
cout << "La valeur de u(" << 0 <<") = " << un << endl;
cout << "La valeur de u(" << 1 <<") = " << unp1 << endl;
for(int n=2; n<nmax+1; n++)
{
unp2 = un + unp1;
cout << "La valeur de u(" << n <<") = " << unp2 << endl;
un = unp1;
unp1 = unp2;
}
return 0;
}
EXERCICE 9
modifierÉcrire un programme qui demande à l’utilisateur de taper un entier N entre 0 et 20 bornes incluses et qui affiche N+17. Si on tape une valeur erronée, il faut afficher "erreur" et demander de saisir à nouveau l'entier.
Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation simple du
while
. - Validation des données saisies par l'utilisateur.
Voici le fichier source :
#include<iostream>
using namespace std;
int main()
{
int N;
bool ok;
do {
cout<<"Tapez N entre 0 et 20 :"; cin>>N;
ok = (N<=20 && N>=0);
if(!ok)cout<<"ERREUR RECOMMENCEZ"<<endl;
}while(!ok);
N = N + 17;
cout<<"La valeur finale est : "<<N<<endl;
return 0;
}
EXERCICE 10
modifierÉcrire un programme qui permet de faire des opérations sur un entier (valeur initiale à 0). Le programme affiche la valeur de l'entier puis affiche le menu suivant :
1. Ajouter 1
2. Multiplier par 2
3. Soustraire 4
4. Quitter
Le programme demande alors de taper un entier entre 1 et 4. Si l'utilisateur tape une valeur entre 1 et 3, on effectue l'opération, on affiche la nouvelle valeur de l'entier puis on réaffiche le menu et ainsi de suite jusqu'à ce qu'on tape 4. Lorsqu'on tape 4, le programme se termine.
Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation du
while
. - Utilisation du
switch
. - Gestion d'un programme à l'aide d'un menu.
- Modélisation d'un problème simple sous forme informatique.
Voici le fichier source :
#include<iostream>
using namespace std;
int main()
{
int x=0,choix;
cout<<"La valeur initale vaut "<< x << endl;
do{
cout << "---- Menu ----" << endl;
cout<<"1 : Ajouter 1"<<endl;
cout<<"2 : Multiplier par 2"<<endl;
cout<<"3 : Soustraire 4"<<endl;
cout<<"4 : Quitter"<<endl;
cout<<"Quel est votre choix : "; cin>>choix;
switch(choix)
{
case 1: cout << x << " + 1 = ";
x++; break;
case 2: cout << x << " * 2 = ";
x=x*2; break;
case 3: cout << x << " - 4 = ";
x=x-4; break;
default:
cout << "Ce n'est pas un option valide" << endl;
cout << " on a toujours x = ";
}
cout << x << endl;
} while(choix!=4);
cout<<"La valeur finale de x vaut : "<<x<<endl;
return 0;
}
EXERCICE 11
modifierÉcrire un programme qui demande à l'utilisateur de taper des entiers strictement positifs et qui affiche leur moyenne. Lorsqu'on tape une valeur négative, le programme affiche ERREUR et demande de retaper une valeur. Lorsqu'on tape 0, cela signifie que le dernier entier a été tapé. On affiche alors la moyenne. Si le nombre d'entiers tapés est égal à 0, on affiche PAS DE MOYENNE.
Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation d'un
while
de difficulté moyenne. - Étude d'un algorithme usuel : calcul d'une moyenne.
Voici le fichier source :
#include<iostream>
using namespace std;
int main()
{ int cmpt = 0;
double moy=0,entree;
do
{
cout << "Entrez une valeur positif (0 pour sortir) "; cin >> entree;
if(entree > 0) {moy = moy + entree; cmpt++;}
else if(entree < 0) cout << "Erreur! valeur positif !" << endl;
} while(entree != 0);
if(cmpt==0) cout << "Pas de moyenne " << endl;
else
{
moy = moy / cmpt;
cout << "La moyenne des " << cmpt << " valeurs = " << moy << endl;
}
return 0;
}
EXERCICE 12
modifierÉcrire un programme qui demande à l'utilisateur de taper un entier N et qui calcule u(N) défini par :
u(0)=3
u(1)=2
u(n)=n.u(n-1)+(n+1).u(n-2)+n
Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation d'un
for
. - Étude d'un algorithme usuel : calcul d'une suite récurrente assez difficile.
- Modélisation d'un problème issu des mathématiques.
Voici le fichier source :
#include<iostream>
int main()
{ int N, n=0;
double unm2, unm1, un;
cout<<"Tapez la valeur de N : "; cin>>N;
unm2 = 3;
unm1 = 2;
if (N==0) un=unm2;
else if (N==1) un=unm1;
else for (n=2; n <= N; n++)
{ un=n*unm1+(n+1)*unm2+n; unm2=unm1; unm1=un;
cout<<"u("<< n << ")="<< un <<endl;
}
cout<<"u("<< N <<")=" << un << endl;
return 0;
}
EXERCICE 13
modifierÉcrire un programme qui demande de saisir 10 entiers et qui affiche le nombre d'occurrences de la note la plus haute.
Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation d'un for.
- Étude d'un algorithme usuel de difficulté moyenne : calcul du nombre d’occurrence d'une valeur.
Voici le fichier source :
#include<iostream>
using namespace std;
int main()
{ const int N=10;
int cmpt=1,entree,maxi;
cout << " Entree un entier "; cin >> entree;
maxi = entree;
for(int i=0; i < N; i++)
{
cout << " Entree un entier "; cin >> entree;
if(entree == maxi) cmpt++;
else if(entree > maxi) {maxi=entree;cmpt=1;}
}
cout << "La plus grande des " << N << " valeurs = " << maxi
<< " avec une occurrence de " << cmpt << " fois " << endl;
return 0;
}
EXERCICE 14
modifierÉcrire un programme qui demande de saisir un entier N et qui affiche N!.
Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation du for.
- Étude d'un algorithme usuel : calcul d'une factorielle.
- Modélisation d'un problème issu des mathématiques.
Voici le fichier source :
#include<iostream>
using namespace std;
int main()
{
int n ;
double fact = 1;
cout << "Tapez un entier : "; cin>>n;
for(int i=2; i<=n; i++) fact=fact*i;
cout << "Le factoriel " << n << "! = " << fact <<endl;
return 0;
}
EXERCICE 15
modifierÉcrire un programme qui demande de saisir un entier et qui indique si cet entier est premier ou non.
Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation d'un while de difficulté moyenne.
- Étude d'un algorithme usuel assez difficile : primarité d'un entier.
- Modélisation d'un problème issu des mathématiques.
Voici le fichier source :
#include<iostream>
using namespace std;
int main()
{
int n;
bool premier = true;
int d = 2;
cout<<"Veuillez saisir un entier : "; cin>>n;
if (n<=1) premier = false;
else {
while(premier==true && d*d<=n)
if(n%d==0) premier=false; else d=d+1;
}
if(premier) cout<<n<<" est premier"<<endl;
else cout<<n<<" n'est pas premier"<<endl;
return 0;
}
EXERCICE 16
modifierÉcrire un programme qui demande à l'utilisateur de saisir un entier N et qui affiche le nombre de nombres premiers inférieurs ou égaux à N.
Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation des boucles
for
etwhile
. - Imbrication de boucles.
- Lire précisément un énoncé.
- Modélisation assez complexe d'un problème issu des mathématiques.
Voici le fichier source :
#include<iostream>
using namespace std;
int main()
{
int N, i, nb=0, d;
bool est_premier;
cout<<"Tapez la valeur de N : "; cin>>N;
for(i=2;i<=N;i++)
{
/* ecrire un programme qui teste si i est premier */
est_premier=true;
d=2;
while(est_premier && d*d<=i)
if(i%d==0) est_premier=false; else d++;
if(est_premier==true) nb++;
}
cout<<"Le nombre de nombre premiers inférieurs ou égaux à "
<<N<<" est "<<nb<<endl;
return 0;
}
EXERCICE 17
modifierÉcrire un programme qui demande à l'utilisateur de saisir un entier N et qui affiche le N-ième nombre premier.
Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation des boucles
for
etwhile
. - Imbrication de boucles assez complexe.
- Lire précisément un énoncé.
- Modélisation assez complexe d'un problème issu des mathématiques.
Voici le fichier source :
#include<iostream>
using namespace std;
int main()
{
int N, i=1, nb=0, d;
bool est_premier;
cout<<"Tapez la valeur de N : "; cin>>N;
while(nb<N)
{
i++;
est_premier=true;
d=2;
while(est_premier && d*d<=i)
if(i%d==0)est_premier=false; else d++;
if(est_premier==true) nb++;
}
cout<<"Le N-ième nombre premier est "<<i<<endl;
return 0;
}
EXERCICE 18
modifierÉcrire un programme qui demande à l'utilisateur de saisir un entier N et qui affiche la figure suivante.
N=1 * N=2 ** * N=3 *** ** *
et ainsi de suite
Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation des boucles
for
. - Imbrication de boucles assez complexe.
Voici le fichier source :
#include<iostream>
using namespace std;
int main()
{
int N;
cout<<"Tapez la valeur de N : "; cin>>N;
for(int i=1;i<=N;i++)
{
for(int j=1; j<=N+1-i; j++) cout<<"*";
cout<<endl;
}
return 0;
}
EXERCICE 19
modifierÉcrire un programme qui demande à l'utilisateur de saisir un entier N et qui affiche la figure suivante.
N=1 * N=2 ** * N=3 *** ** *
et ainsi de suite.
Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation des boucles
for
. - Imbrication de boucles.
- Voici le fichier source :
#include<iostream>
using namespace std;
int main()
{
int N;
cout<<"Tapez la valeur de N : "; cin>>N;
for(int i=1; i<=N; i++)
{
for(int j=1; j<i; j++) cout<<" ";
for(int j=1; j<=N+1-i; j++) cout<<"*";
cout<<endl;
}
return 0;
}
EXERCICE 20
modifierOn considère la suite hongroise :
u(0)=a (a entier)
si u(n) pair alors u(n+1)=u(n)/2 sinon u(n+1)=3*u(n)+1
Pour toutes les valeurs a, il existe un entier N tel que u(N)=1 (conjecture admise).
a) Écrire un programme qui demande à l'utilisateur de taper a et qui affiche toutes les valeurs de u(n) de n=1 à n=N.
Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation du
while
. - Lire précisément un énoncé.
- Modélisation assez complexe d'un problème issu des mathématiques.
Voici le fichier source :
#include<iostream>
using namespace std;
int main()
{
int a, n, u;
cout<<"Tapez la valeur de a : "; cin>>a;
n = 0;
u = a;
while(u!=1)
{
if(u%2==0) u=u/2; else u=3*u+1;
n++;
cout<<"u("<<n<<")="<<u<<endl;
}
return 0;
}
b) Écrire un programme qui demande à l'utilisateur de taper un entier M puis qui cherche la valeur de a comprise entre 2 et M qui maximise la valeur de N. On appelle A cette valeur. Le programme doit afficher la valeur A et la valeur N correspondante.
Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation du
while
et dufor
. - Imbrication de boucles.
- Lire précisément un énoncé.
- Modélisation assez complexe d'un problème issu des mathématiques.
Voici le fichier source :
#include<iostream>
using namespace std;
int main()
{
int a,n,u,M, amax,nmax;
cout<<"Tapez la valeur de M : "; cin>>M;
amax = 2;
nmax = 2;
for(a=3; a<=M; a++)
{
n = 0;
u = a;
while (u!=1)
{
if(u%2==0) u=u/2; else u=3*u+1;
n++;
}
if (n>nmax) { amax=a; nmax=n; }
}
cout<<"La valeur de A est :"<< amax <<endl;
cout<<"La valeur de N correspondante est :"<< nmax <<endl;
return 0;
}