• Aucun résultat trouvé

Rappel : Le corrig´ e n’a d’int´ erˆ et que si l’exercice a ´ et´ e cherch´ e.

N/A
N/A
Protected

Academic year: 2022

Partager "Rappel : Le corrig´ e n’a d’int´ erˆ et que si l’exercice a ´ et´ e cherch´ e."

Copied!
5
0
0

Texte intégral

(1)

Universit´e Cadi Ayyad Ann´ee 2019−2020

Facult´e polydisciplinaire Langage C et Matlab

Safi SMC (S4)

S´ erie 1

Exercice 1

1. Les commentaires ont-ils une influence sur le d´eroulement du programme ? 2. Quelle est la diff´erence entre une instruction et un bloc ?

3. Pourquoi ne pas toujours utiliser les variables long int qui peuvent contenir de grands nombres plutˆot que des variables int ?

4. Que se passera-t-il si j’essaye de stocker un nombre d´ecimal dans un entier ?

5. Que se passera-t-il si j’essaye de stocker un nombre dans un type trop petit pour le recevoir ? 6. Que se passera-t-il si je mets un nombre n´egatif dans une variable non sign´ee (=variable≥0 ) ? Exercice 2

Lesquels des identificateurs suivants sont accept´es par C ?

Fonction-1 limite inf MOYENNE du MOIS lim-sup´erieure Ondelette break

Exercice 3

Soient les d´eclarations:

char c=’E’;// le nombre entier associ´e a la lettreE est 69.

short int p=2;

Quels sont le type et la valeur de chacune des expressions suivantes:

1. p+5 2. c+1 3. p+c 4. 2*c+ 3*p

Exercice 4

Eliminer les parenth`eses non n´ecessaires dans les expressions suivantes:

1. a=(x+5) 2. a=(x=y)+2 3. a=(x==y) 4. (a<b) && (c<d) 5. (i++)*(n+p)

(2)

Exercice 5

Soient les d´eclarations:

char c=’♣’;// Le nombre entier associ´e a ♣est 5.

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:

1. n+c+p 2. 2*x+c 3. (char) n+c 4. (float) z+n/2

Exercice 6

Soient les d´eclarations:

int n=5, p=9;

int q;

float x;

Quelle est la valeur affect´ee aux diff´erentes variables concern´ees par chacune des instructions suivantes:

1. q=n<p;

2. q=n==p;

3. q = p % n + p>n ; 4. x = p / n ;

5. x = (float) p / n ; 6. x = (p + 0.5) / n ; 7. x = (int) (p + 0.5) / n ; 8. q = n * (p>n ? n : p) ; 9. q = n * (p<n ? n : p) ;

0.0.1 Rappel

Les op´erateurs conditionnels:

<expr1>?<expr2> : <expr3>

Si <expr1> fournit une valeur diff´erente de z´ero, alors la valeur de <expr2> est fournie comme r´esultat. Si

<expr1> fournit la valeur z´ero, alors la valeur de <expr3>est fournie comme r´esultat.

Les r`egles de conversion de types s’appliquent aussi aux op´erateurs conditionnels ? : Ainsi, pour un entier N du type int et un rationnel F du type float, l’expression

(N>0) ? N : F

va toujours fournir un r´esultat du type float, n’importe si N est plus grand ou plus petit que z´ero.

(3)

Correction

Rappel : Le corrig´ e n’a d’int´ erˆ et que si l’exercice a ´ et´ e cherch´ e.

Exercice 1

1. Les commentaires sont destin´es aux programmeurs. Lorsque le compilateur converti le code source en code objet, il supprime tous les blancs et commentaires. Ils n’ont donc aucune influence sur l’´ex´ecution du programme. Les blancs et commentaires permettent simplement de clarifier le code source pour faciliter la lecture et la maintenance du programme.

2. Un bloc est constitu´e d’un groupe d’instructions entre accolades ({}).

3. Une variable long int peut ˆetre plus gourmande en m´emoire. Cela ne fait pas de diff´erence dans un petit programme, mais plus il sera gros, plus il deviendra important de bien g´erer la m´emoire utilis´ee.

4. On peut stocker un nombre avec une d´ecimale dans une variable int. Mais La valeur stock´ee va perdre sa partie d´ecimale. Par exemple, si on affecte la valeur 3.14 `a la variable enti`ere pi, pi ne contiendra que la valeur 3.

5. Lorsqu’on affecte un nombre dans un type trop petit pour le recevoir, il y a une perte d’information et le compilateur ne signale pas cette erreur, il faut faire attention.

6. Rappel: Un type entier non sign´e est un type entier qui n’accepte que des valeurs positives ou nulles : il ne peut pas stocker de valeurs n´egatives. Pour d´eclarer des variables d’un type non sign´e, il suffit de faire pr´ec´eder le nom du type entier du mot-cl´eunsigned.

Comme pour la question pr´ec´edente, le compilateur ne signalera pas cette erreur et l’information sera p´erdu.

Exercice 2

Nom de la variable Validit´e

Fonction-1 Incorrect: contient le caract`ere sp´ecial -

limite inf Correct

MOYENNE du MOIS Incorrect: contient espace lim-sup´erieure Incorrect: contient le caract`ere sp´ecial -

Ondelette Correct, mais d´econseill´e break Incorrect : break est un mot cl´e

Exercice 3

On rappelle i¸ci les R`egles de conversions automatiques lors d’une op´eration avec,

• deux entiers:

D’abord, les types char et short sont convertis en int. Ensuite, l’ordinateur choisit le plus large des deux types dans l’´echelle suivante:

int, unsigned int, long, unsigned long

• un entier et un rationnel: Le type entier est converti dans le type du rationnel.

• deux rationnels:

L’ordinateur choisit le plus large des deux types selon l’´echelle suivante:

float, double, long double

(4)

• affectations et op´erateurs d’affectation:

Lors d’une affectation, le r´esultat est toujours converti dans le type de la destination. Si ce type est plus faible, il peut y avoir une perte de pr´ecision.

1. p est d’abord soumis `a la conversion implicite short−→int, avant d’ˆetere ajouter `a 5 (int). Le r´esultat 7 est de type int.

2. c est d’abord soumis `a la conversion implicite char−→int ce qui aboutit `a la valeur 69(int) avant d’ˆetre ajout´e `a la valeur 1(int). Le r´esultat 70 est de type int.

3. p est d’abord soumis `a la conversion implicite (automatique) short−→int, tandis que c est soumis `a la conversion sys´ematique char−→int; les r´esultats sont alors additionn´es pour aboutir `a la valeur 71 de type int.

4. p et c sont d’abord automatiquement en int; le r´esulat 144 est de type int.

Remarque: Le code minimale qui permet d’afficher le nombre entier associ´e `a la lettre ’E’ est:

#include<stdio.h>

main() {

printf(”%d”,’E’) ; }

Exercice 4

1. a=x+5 car l’op´erateur + est prioritaire sur l’op´erateur d’affectation =.

2. a=(x=y)+2 ici l’op´erateur + ´etant prioritaire sur =, les parenth`eses sont indispensables.

3. a=x==y car l’op´erteur == est prioritaire sur =.

4. a<b&&c<d ici l’op´erateur && est priotaire sur l’op´erateur <.

5. i++*(n+p) en effet l’op´erateur ++ est prioritaire sur *; en revanche, * est prioritaire sur +; de sorte qu’on ne peut ´eliminer les derni`eres parenth`eses.

Exercice 5

1. c est tout d’abord converti en int, avant d’ˆetre ajout´e `a n. Le r´esultat (10), de type int, est alors converti en long, avant d’ˆetre ajout´e `a p. On obtient finalement la valeur 1010, de type long.

2. On ´evalue d’abord la valeur de 2*x, en convetissant 2(int) en float, ce qui fournit la valeur 2.5 (de type float). Par ailleurs, c est conveti en int (convertion automatique). Pour effectuer l’addition, on convertit la enti`ere 5 de c en float, avant de l’ajouter au r´esultat pr´ec´edent. On obtient finalement la valeur 7.75, de type float.

3. n est tout d’abord convertit en char (`a cause de l’op´erateur de ”cast”), tandis que c est converti (conversion implicite) en int. Puis pour proc´eder `a l’addition, il est n´ecessaire de reconvertir la valeur de (char) n en int. Finalement, on obtient la valeur 10, de ce type int.

4. z est d’abord convertit en float, ce qui fournit la valeur 5.5. Par ailleurs, on proc`ede `a la division enti`ere de n par 2, ce qui fournit la valeur enti`ere 2. Cette derni`ere est ensuite convertie en float. Avant d’ˆetre ajout´ee `a 5.5, ce qui fournit la r´esultat 7.5, de type float.

(5)

Exercice 6

1. 1 2. 0

3. 5 (p%n vaut 4, tandis que p>n vaut 1).

4. 1 (p/n est d’abord ´evalu´e en int, ce qui fournit 1; puis le r´esultat est converti en float, avant d’ˆetre affect´e

` a x).

5. 1.8 (p est converti en float, avant d’ˆetre divis´e par le r´esultat de la conversion de n en float).

6. 1.9 (p est converti en float, avant d’ˆetre ajout´e `a 0.5; le r´esultat le r´esultat est divis´e par le r´esultat de la conversion de n en float).

7. 1 (p est convertit en float, avant d’ˆetre ajout´e `a 0.5; le r´esultat (5.5) est alors converti en int avant d’ˆetre divis´e par n).

8. 25 9. 45

Références

Documents relatifs

Si l’une des famille ci-dessus est libre mais n’est pas une base de R 3 , la compl´ eter en une base de R 3.. D´ eterminer une base et

After elementarily studying the above mentioned class of Heegner points, upon imposing certain conditions (see Theorem 2.3 and Proposition 2.4), given a complex elliptic curve E,

Proc´ edure Trier(L : pointeur(TMaillon)) ; permettant de trier la liste d’entiers L en utilisant la m´ ethode par

Pour ne pas perdre de la pr´ ecision lors de la division et pour ´ eviter un d´ epassage du domaine lors du calcul du produit, il faut forcer l’utilisation du type double. En

D’autre part, elle permet d’int´ egrer tr` es confortablement l’initialisation et l’incr´ ementation des variables dans la structure..

3 ◦ ) Probl` eme: On dispose de deux tableaux A et B (de dimensions respectives N et M), tri´ es par ordre croissant. Fusionner les ´ el´ ements de A et B dans un troisi` eme

4 ◦ ) ´ Ecrire une fonction C qui d´ etermine le signe de la d´ eriv´ ee seconde de f en fonction

La syntaxe g´en´erale des fonctions utilis´ees peut ˆetre obtenue au moyen de l’aide en ligne, en faisant pr´ec´eder le nom de la fonction par un point d’interrogation.