Exercices en langage C++/Structures de contrôle
Exercices en langage C++ |
---|
Sommaire |
|
Liens |
Modifier ce modèle |
Structures de contrôle
EXERCICE 1
Écrire un programme qui demande à l'utilisateur de taper un entier et qui affiche GAGNÉ 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>
#include <cstdlib>
using namespace std;
int main()
{
int a;
cout << "Tapez un entier : ";
cin >> a;
if ((a>=56)&&(a<=78)) cout << "GAGNÉ" << endl;
else cout << "PERDU" << endl;
return EXIT_SUCCESS;
}
EXERCICE 2
É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
Mê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
É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
É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 vaut : "<<ppt<<endl;
return 0;
}
EXERCICE 6
É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.h>
using namespace std;
int main()
{
int N;
double somme = 0;
cout << "Entrer un entier : "; cin >> N;
if (N>=5) {
for (int i=5; i<=N; i++) somme += i*i*i;
}
cout << "Somme des cubes de 5^3 a " << N << "^3 = " << somme << endl;
cin.ignore();
cin.get();
return EXIT_SUCCESS;
}
EXERCICE 7
É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
É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 i,u=1,v=1,w,N;
cout<<"Tapez N : ";cin>>N;
w=1;
for(i=2;i<=N;i++)
{
w=u+v;
u=v;
v=w;
}
cout<<"u("<<N<<")="<<w<<endl;
return 0;
}
EXERCICE 9
É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;
}
// meilleur solution sans variable ok
// ni commande continue à la fin de la boucle
#include<iostream>
using namespace std;
int main()
{
int nn;
while (1)
{
cout<<"Entrer un entier entre 0 et 20 inclusif :";
cin >> nn;
if ((nn>=0) && (nn<=20)) break;
cout << " erreur\n";
}
cout << "\n";
cout << nn << " + 17 = " << nn+17 << "\n ^\n";
cin.get();
return 0;
}
EXERCICE 10
É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;
do
{
cout<<"x vaut "<<x<<endl;
cout<<"1 : Ajouter 1"<<endl;
cout<<"2 : Multiplier par 2"<<endl;
cout<<"3 : Soustraire 4"<<endl;
cout<<"4 : Quitter"<<endl;
cout<<"Votre choix : ";cin>>choix;
switch(choix)
{
case 1 : x++;break;
case 2: x=x*2; break;
case 3: x=x-4;break;
}
}while(choix!=4);
cout<<"La valeur finale de x vaut : "<<x<<endl;
return 0;
}
EXERCICE 11
É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 x, s=0,nb=0;
double moyenne;
do{
cout<<"Tapez un entier :";cin>>x;
if(x>0){s=s+x;nb++;}
else if(x<0)cout<<"ERREUR ";
}while(x!=0);
if(nb==0)cout<<"AUCUN ENTIER TAPE "<<endl<<"PAS DE MOYENNE"<<endl;
else {
moyenne=(double)s/nb;
cout<<"La moyenne vaut : "<<moyenne<<endl;
}
return 0;
}
EXERCICE 12
É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,u,v,w;
cout<<"Tapez la valeur de N : ";cin>>N;
u=3;
v=2;
if(N==0)w=u;
else if(N==1)w=v;
else for(int i=2;i<=N;i++){w=i*v+(i+1)*u+i;u=v;v=w;}
cout<<"u("<<N<<")="<<w<<endl;
return 0;
}
EXERCICE 13
É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()
{
int nb,max,x,i;
for (i=0; i<10; i++)
{
cout << "Tapez un entier : ";
cin >> x;
if(i == 0)
{
max = x;
nb = 1;
}
else if (x == max)
nb++;
else if (max < x)
{
max=x;
nb=1;
}
}
cout<< "le nombre d'occurences de "<< max << " est " << nb << endl;
return 0;
}
EXERCICE 14
É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,i,f=1;
cout<<"Tapez un entier : ";cin>>N;
for(i=2;i<=N;i++)f*=i;
cout<<N<<"! vaut "<<f<<endl;
return 0;
}
EXERCICE 15
É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'une boucle
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
É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
É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=2,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
É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=0;
cout<<"Saisissez une valeur pour N: ";
cin>>N;
cout<<endl<<endl;
cout<<"N= "<<N<<endl;
for(int i=0;i<N;i++)
{
for(int j=0;j<(N-i);j++)
{
cout<<"*";
}
cout<<endl;
}
cout << "Appuyez sur une touche pour continuer ..." << endl;
cin.ignore();
cin.get();
return 0;
}
EXERCICE 19
É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 i,j,N;
cout<<"Tapez la valeur de N : ";cin>>N;
for(i=1;i<=N;i++)
{
for(j=1;j<i;j++)cout<<" ";
for(j=1;j<=N+1-i;j++)cout<<"*";
cout<<endl;
}
return 0;
}
EXERCICE 20
On 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. La programme doit afficher la valeur A et la valeur N correspondante.
Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation des boucles
while
etfor
. - 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;
}