Exercices C++

Cours 0.1, 0.2, 2.0 et 2.1




Ex 0
Reprendre l'ensemble des deux premier cours (2.0 et 2.1), être capable de reproduire les étapes de compilation et d'exécution.


Ex1
Observer ce qui suit, et indiquez ce qui est ou n'est pas une déclaration et ce qui est ou n'est pas valide :


Ex2
Donnez les valeurs de chaque variable après chaque instruction.
int valeur=2;
valeur=valeur+1;
valeur=valeur*2;
valeur=valeur%5;


int a=5;
int b=7
a=b;
b=a;


int x=2,y=10,z;
z=x+y;
x=5;
z=z-x;


int valeur=7,chiffre=2,i1,i2;
double f1,f2;

i1=valeur/chiffre;
i2=chiffre/valeur;
f1=(double)(valeur/chiffre);
f2=(double)(valeur/chiffre)+0.5;
i1=(int)f1;
i2=(int)f2;
f1=(double)valeur/(double)chiffre;
f2=(double)valeur/(double)chiffre+0.5;
i1=(int)f1;
i2=(int)f2;



Ex3
Quel affichage va produire le code suivant :
int i=223,j=135;
double a=335.5,b=20.5;
std::cout << "La valeur de i : " << i << "\n";
std::cout << "Pour un montant de " << a << " le total vaut : " << i+j << "\n";
std::cout << "Apres reduction de " << b << "%, vous gagnez : \n";
std::cout << (a*b)/100 << " euros\n";
std::cout << "la variable R= " << R << " et T= " << T);



Ex4
Lisez ce programme. Imaginez la saisie de trois nombres et écrivez le résultat :
#include 
using namespace std;
int main()
	{
	int a,b,c;
	cout << "Entrez trois nombres\n";
	cout << "a : ";
	cin >> a;
	cout << "\nb : ";
	cin >> b;
	cout << "\nc : ";
	cin >> c;

		if(c=(a-b))
		{
		cout << "a:" << a << "moins b:" << b << " egale c:"<< c << "\n";
		}
		else
		{
		cout << "a-b n'egale pas c";
		}
	return 0;
	}	




Ex5
Que produit l'exécution du code suivant :
int main()
	{
	int a;
	double x;
	std::cout << "Valeur de a : "<< a << " valeur de x : " << x << "\n";
	return 0;
	}



Ex6
La réponse précise à cet exercice viendra plus tard dans le cours. Essayez d'interpréter ce qui s'affiche :
#include 

int main()
	{
	int a=5;
	int *b=&a;
	*b=6;
	std::cout << "Valeur de b : "<< b << " valeur de a : " << a << "\n";
	return 0;
	}



Ex7
Implémenter une fonction de calcul de factorielle.

Cours 2.2- Les objets en C++





Ex1
1- Ecrivez une classe Facture avec un attribut nombre unités vendues, un attribut prix unitaire et une méthode de calcul du montant total. La déclaration et la définition de la méthode doivent tenir dans un fichier unique.
2- On fait la meme chose en reportant les instructions de déclaration dans un fichier .hpp auquel on fait référence par un include.

Noter que ce qui a ete présenté dans le cours 0.2 sur le stockage en mémoire pour les variables objet n'est pas vrai pour la création statique des objets présentée dans le cours 2.2, mais correspond à la création dynamique présentée plus loin. Avec la création dynamique, le fonctionnement est similaire à celui des variables primitives. Les deux exercices suivants l'illustrent. Encore une fois, ce mode de déclaration et de manipulation sera moins utilisé dans la suite.





Ex2
Quel affichage produit le code suivant ?

/*Declaration des objets*/
#include 
class F{
public : 
int a,b,c;
void modifA(int val);
F(int valA,int valB,int valC);
void afficheValeurs();
};


/*Le corps des fonctions*/
void modifValeur1(int i,int h)
	{
	i=h;
	}

void modifValeur2(F f,int h)
	{
	f.b=h;
	}

void F::modifA(int val)
	{
	a=val;
	}

F::F(int valA,int valB,int valC)
	{
	a=valA;
	b=valB;
	c=valC;
	}

void F::afficheValeurs()
	{
	std::cout << "Valeurs a:" << a << " b:" << b << " c:" << c << "\n";
	}


/*Declaration des fonctions*/
void modifValeur1(int i,int h);
void modifValeur2(F f,int h);

int main()
	{
	F obj(6,7,8);
	obj.afficheValeurs();
	int y;
	modifValeur1(y,5);
	modifValeur2(obj,10);
	obj.modifA(15);
	obj.afficheValeurs();
	return 0;
	}
Ex3
Quel affichage produit le code suivant ?
#include 
class F{
public : 
int a,b,c;
void modifA(int val);
F(int valA,int valB,int valC);
void afficheValeurs();
};

/*Le corps des fonctions*/
void modifValeur1(int i,int h)
	{
	i=h;
	}

void modifValeur2(F f,int h)
	{
	f.b=h;
	}

void F::modifA(int val)
	{
	a=val;
	}

F::F(int valA,int valB,int valC)
	{
	a=valA;
	b=valB;
	c=valC;
	}

void F::afficheValeurs()
	{
	std::cout << "Valeurs a:" << a << " b:" << b << " c:" << c << "\n";
	}

int main()
	{
	F f1(5,6,7);
	F f2=f1;
	f1.a=10;
	f1.afficheValeurs();
	f2.afficheValeurs();
	return 0;
	}
Changez la fonction main par le code suivant
int main()
	{
	F *f1=new F(5,6,7);
	F *f2=f1;
	f1->a=10;
	*f1.afficheValeurs();
	*f2.afficheValeurs();
	return 0;
	}
commentez l'affichage (ici on n'a fait de la création dynamique, on ne manipule plus des variable de type F, mais des variables de type F * : des pointeurs sur des objets de type F).

Cours 2.3- Les pointeurs en C++


Ex1
Est ce que le code suivant produit une erreur :
#include 

int main()
	{
	int *a;
	*a=7;
	std::cout << *a;
	return 0;
	}

Ex2
Quelle est la valeur affichée après l'exécution de :
#include 

int main()
	{
	int *a;
	int *c;
	int b=7;
	a=&b;
	c=&b;
	*a=5;
	std::cout << b;
	return 0;
	}

Ex3
Qu'est ce que le code suivant va afficher :
#include 
class B{
      public : 
	int t;
};

class A{
      public : 
	B varB;
};

void testModif(A varA);
void testModif2(A *varA);

int main()
	{
	A a;
	testModif(a);
	std::cout << a.varB.t << "\n";
	testModif2(&a);
	std::cout << a.varB.t;
	}

void testModif(A varA)
	{
	varA.varB.t=7;
	} 
	
	
void testModif2(A *varA)
     {
     varA->varB.t=7;
     }