BIENVENUE SUR VOTRE BLOG D'EXERCICES DE L'UNIVERSITE VIRTUELLE

Exercices corrigé en langage c++




EXOS 1
Éliminer les parenthèses superflues dans les expressions suivantes :
a = (x+5)                /*1  */
a = (x=y) + 2         /*  2 */
a = (x==y)             /*  3 */
    /*  4*/

(i++) * (n+p)        /*  5 */


EXOS 2


Soient les déclarations :
char c = '\x05' ;
int n = 5 ;
long p = 1000 ;
float x = 1.25 ;
double z = 5.5 ;
Quels sont le type et la valeur de chacune des expressions suivantes :
n + c + p                 /* 1 */
2 * x + c                /* 2 */
(char) n + c           /* 3 */
(float) z + n / 2      /* 4 */



EXOS 3
Soient les déclarations :
char c = '\x01' ;
short int p = 10 ;
Quels sont le type et la valeur de chacune des expressions suivantes :
1. p + 3 
2. c + 1 
3. p + c 
4. 3 * p + 5 * c


EXOS 4


Soient les déclarations suivantes :
int n = 5, p = 9 ;
int q ;
float x ;
Quelle est la valeur affectée aux différentes variables concernées par chacune des instructions
suivantes ?
q = n < p ;                         /* 1 */
q = n == p ;                      /* 2 */
q = p % n + p > n ;           /* 3 */
x = p / n ;                         /* 4 */
x = (float) p / n ;              /* 5 */
x = (p + 0.5) / n ;             /* 6 */
x = (int) (p + 0.5) / n ;     /* 7 */
q = n * (p > n ? n : p) ;    /* 8 */
q = n * (p < n ? n : p) ;    /* 9 */


EXOS 5

Quels résultats fournit le programme suivant :
#include
using namespace std ;
main ()
{
int i, j, n ;
i = 0 ; n = i++ ;
cout << "A : i = " << i << " n = " << n << "\n" ;
i = 10 ; n = ++ i ;
cout << "B : i = " << i << " n = " << n << "\n" ;
i = 20 ; j = 5 ; n = i++ * ++ j ;
cout << "C : i = " << i << " j = " << j << " n = " << n << "\n" ;
i = 15 ; n = i += 3 ;
cout << "D : i = " << i << " n = " << n << "\n" ;
i = 3 ; j = 5 ; n = i *= --j ;
cout << "E : i = " << i << " j = " << j << " n = " << n << "\n" ;
}


EXOS 6

Quels résultats fournira ce programme :
#include
using namespace std ;
main()
{
int n=10, p=5, q=10, r ;
r = n == (p = q) ;
cout << "A : n = " << n << " p = " << p << " q = " << q
<< " r = " << r << "\n" ;
n = p = q = 5 ;
n += p += q ;
cout << "B : n = " << n << " p = " << p << " q = " << q << "\n" ;
q = n < p ? n++ : p++ ;
cout << "C : n = " << n << " p = " << p << " q = " << q << "\n" ;
q = n > p ? n++ : p++ ;
cout << "D : n = " << n << " p = " << p << " q = " << q << "\n" ;
}


EXOS 7


Quels résultats fournira ce programme :
#include
using namespace std ;
main()
{ int n, p, q ;
n = 5 ; p = 2 ;                                                                 /* cas 1 */
q = n++ >p || p++ != 3 ;
cout << "A : n = " << n << " p = " << p << " q = " << q << "\n" ;
n = 5 ; p = 2 ;                                                                   /* cas 2 */
q = n++
cout << "B : n = " << n << " p = " << p << " q = " << q << "\n" ;
n = 5 ; p = 2 ;                                                                 /* cas 3 */
q = ++n == 3 && ++p == 3 ;
cout << "C : n = " << n << " p = " << p << " q = " << q << "\n" ;
n = 5 ; p = 2 ;                                                                 /* cas 4 */
q = ++n == 6 && ++p == 3 ;
cout << "D : n = " << n << " p = " << p << " q = " << q << "\n" ;
}



SOLUTION



EXOS 1

1.  a = x+5 /
L’opérateur + est prioritaire sur l’opérateur d’affectation =.

2.  a = (x=y) + 2

Ici, l’opérateur + étant prioritaire sur =, les parenthèses sont indispensables.
3.  a = x==y 
L’opérateur == est prioritaire sur =.
4. 
L’opérateur && est prioritaire sur l’opérateur <.
5.  i++ * (n+p) 
L’opérateur ++ est prioritaire sur * ; en revanche, * est prioritaire sur +, de sorte qu’on ne
peut éliminer les dernières parenthèses

EXOS 2

1- c est tout d’abord converti en int, avant d’être ajouté à n. Le résultat (10), de type int,
est alors converti en long, avant d’être ajouté à p. On obtient finalement la valeur 1010,
de type long.

2- On évalue d’abord la valeur de 2*x, en convertissant 2 (int) en float, ce qui fournit la
valeur 2.5 (de type float). Par ailleurs, c est converti en int (conversion systématique).
On évalue ensuite la valeur de 2*x, en convertissant 2 (int) en float, ce qui
fournit la valeur 2.5 (de type float). Pour effectuer l’addition, on convertit alors la
valeur entière 5 (c) en float, avant de l’ajouter au résultat précédent. On obtient finalement
la valeur 7.75, de type float.

3.-n est tout d’abord converti en char (à cause de l’opérateur de « cast »), tandis que c'est converti (conversion systématique) en int. Puis, pour procéder à l’addition, il est nécessaire
de reconvertir la valeur de (char) n en int. Finalement, on obtient la valeur 10,
de type int.

4. -z est d’abord converti en float, ce qui fournit la valeur 5.5 (approximative, car, en fait, on obtient une valeur un peu moins précise que ne le serait 5.5 exprimé en double). Par
ailleurs, on procède à la division entière de n par 2, ce qui fournit la valeur entière 2. Cette dernière est ensuite convertie en float, avant d’être ajoutée à 5.5, ce qui fournit le résultat
7.5, de type float.



EXOS 3

1. p est d’abord soumis à la conversion « systématique » short -> int, avant d’être
ajouté à la valeur 3 (int). Le résultat 13 est de type int.
2. c est d’abord soumis à la conversion « systématique » char -> int (ce qui aboutit à la
valeur 1), avant d’être ajouté à la valeur 1 (int). Le résultat 2 est de type int.
3. p est d’abord soumis à la conversion systématique short -> int, tandis que c est soumis
à la conversion systématique char -> int ; les résultats sont alors additionnés
pour aboutir à la valeur 11 de type int.
4. p et c sont d’abord soumis aux mêmes conversions systématiques que ci-dessus ; le résultat
35 est de type int.

EXOS 4


1. 1
2. 0
3. 5 (p%n vaut 4, tandis que p>n vaut 1).
4. 1 (p/n est d’abord évalué en int, ce qui fournit 1 ; puis le résultat est converti en
float, avant d’être affecté à x).
5. 1.8 (p est converti en float, avant d’être divisé par le résultat de la conversion de n en
float).
6. 1.9 (p est converti en float, avant d’être ajouté à 0.5 ; le résultat est divisé par le
résultat de la conversion de n en float).
7. 1 (p est converti en float, avant d’être ajouté à 0.5 ; le résultat (5.5) est alors converti
en int avant d’être divisé par n).
8. 25
9. 45


EXOS 5


A : i = 1 n = 0
B : i = 11 n = 11
C : i = 21 j = 6 n = 120
D : i = 18 n = 18
E : i = 12 j = 4 n = 12


EXOS 6


A : n = 10 p = 10 q = 10 r = 1
B : n = 15 p = 10 q = 5
C : n = 15 p = 11 q = 10
D : n = 16 p = 11 q = 15


EXOS 7

Il ne faut pas oublier que les opérateurs && et || n’évaluent leur second opérande que lorsque
cela est nécessaire. Ainsi, ici, il n’est pas évalué dans les cas 1 et 3. Voici les résultats fournis
par ce programme :
A : n = 6 p = 2 q = 1
B : n = 6 p = 3 q = 1
C : n = 6 p = 2 q = 0
D : n = 6 p = 3 q = 1


Télécharger ici








Aucun commentaire:

Selection

Exercices sur Les factorielles

EXOS 1 3 ! = ................................. 1 ! = ................................. 5 ! = ...................................

Autres articles du blog