• 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 2

Exercice 1

1) Pourquoi utiliser puts() alors que printf() est moins restrictive ?

2) Pourquoi faut-il inclure le fichier stdio.h quand on veut utiliser printf(), puts(), ou scanf() ? 3) Que se passe-t-il si j’oublie l’op´erateur d’adresse (&) d’une variable de la fonction scanf() ? Exercice 2

Quels seront les r´esultats fournis par ce programme:

#include<stdio.h>

main() {

int n=543;

int p=5;

float x=34.5678;

printf(”A : %d %f\n”, n, x);

printf(”B : %4d %10f\n”, n, x);

printf(”C : %2d %3f \n”, n, x);

printf(”D : %10.3f %10.3e\n”, x, x);

printf(”E : %-5d %f\n”, n, x);

}

Remarque: Le signe moins (-), plac´e imm´ediatement apr`es le symbole % (comme dans %-4d ou %-10.3 f), demande de cadrer l’affichage `a gauche au lieu de le cadrer (par d´efaut) `a droite ; les ´eventuels espaces suppl´ementaires sont donc plac´es `a droite et non plus `a gauche de l’information affich´ee.

Exercice 3

1) Ecrire un programme qui lit deux nombres au clavier et les affiche `a l’´ecran.

2) Ecrire un programme qui calcule la somme de quatre nombres du type int entr´es au clavier et affiche le r´esultat obtenu.

Exercice 4

Ecrire un programme qui :´

1) lit deux entiers n1 et n2 au clavier ; 2) affiche la partie enti`ere de leur quotient ;

3) affiche la partie fractionnaire frac de leur quotient ;

4) calcule la partie enti`ere du produit de l par frac modulo 256, puis convertit le r´esultat en caract`ere ; 5) affiche le caract`ere obtenu.

Exercice 5

1) Ecrire un programme qui affiche la r´esistance ´equivalente `a trois r´esistances R1,R2,R3 (type double),

(2)

• si les r´esistances sont branch´ees en s´erie:

Rser =R1+R2+R3

• si les r´esistances sont branch´ees en parall`ele:

Rpar = R1R2R3

R1R2+R1R3+R2R3

2) Ecrire un programme qui calcule le prix TTC (type double) d’un article `a partir du prix net (type int) et du pourcentage de TVA (type int) `a ajouter. Utilisez la formule suivante en faisant attention aux priorit´es et aux conversions automatiques de type:

P T T C =P N ET +P N ET ·T V A 100

3) Ecrire un programme qui calcule et affiche la distance DIST (type double) entre deux points A et B du plan dont les coordonn´ees (XA, YA) et (XB, YB) sont entr´ees au clavier comme entiers.

(3)

Correction

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

Exercice 1

1) La fonction printf() ´etant plus compl`ete, elle consomme plus de ressources. Quand vos programmes vont se d´evelopper, les ressources vont devenir pr´ecieuses. Il sera alors avantageux d’utiliser puts() pour du texte.

En r`egle g´en´erale, utilisez plutˆot la ressource disponible la plus simple.

2) Le fichier stdio.h contient le prototype des fonctions standards d’entr´ee/sortie ; printf(), puts() et scanf() en font partie.

3) Si vous oubliez cet op´erateur, le r´esultat est totalement impr´evisible. Au lieu de stocker la valeur re¸cue dans la variable, scanf() va la stocker `a un autre endroit de la m´emoire. Les cons´equences peuvent ´etre insignifi- antes ou entraˆıner l’arrˆet total de l’ordinateur.

Exercice 2 A : 543 34.567799 B : 543 34.567799 C : 543 34.567799

D : 34.568 3.457e+01 E : 543 34.567799

Exercice 3 1)

#include<stdio.h>

main() { int i, j;

printf(”\n donner deux nombre entier\n ”);

puts(”s´epar´es par un espace”);

scanf(”%d %d”, &i, &j);

printf(”Vous avez saisie %d et %d”, i, j);

} 2)

#include<stdio.h>

main() { int i, j, k, l;

printf(”\n donner quatres nombre entier s´epar´es chaqu’une par un espace\n ”);

scanf(”%d %d %d %d”, &i, &j, &k, &l);

printf(”La somme de ces quatres nombres est %d:”, i+j+k+l);

}

Exercice 4

#include<stdio.h>

main()

{ int n1, n2; int quotient; float frac, l; char c; printf(”Entrez deux nombres entiers : ”); scanf(”%d %d”, &n1,

&n2); quotient = n1 / n2; printf(”Partie enti`ere du quotient : %d\n”, quotient);

frac = (n1 / (float) n2) - quotient;

printf(”Partie fractionnaire du quotient : %f\n”, frac);

printf(”Entrez un r´eel : ”);

scanf(”%f”, &l);

c = (char) ((int) (l * frac) % 256);

(4)

printf(”Caract`ere : %c\n”, c);

}

Exercice 5 1)

#include<stdio.h>

main()

{ double R1, R2, R3, RRES;

printf(”Introduisez les valeurs pour R1, R2 et R3 : ”);

scanf(”%f %f %f”, &R1, &R2, &R3);

RRES=R1+R2+R3;

printf(”Resistance resultante serielle : %f\n”, RRES);

RRES=(R1*R2*R3)/(R1*R2+R1*R3+R2*R3);

printf(”Resistance resultante parall`ele : %f\n”, RRES);

} 2)

#include<stdio.h>

main() {

int PNET, TVA;

double PTTC;

printf(”Entrez le prix net de l’article : ”);

scanf(”%d”, &PNET);

printf(”Entrez le taux de la TVA (en %) : ”);

scanf(”%d”, &TVA);

PTTC = PNET+(double)PNET*TVA/100;

printf(”Le prix TTC est %.2lf Francs\n”,PTTC);

}

Lors du calcul de PTTC (type double), nous divisons le produit du PNET (type int) et de la TVA (type int) par 100. 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 utilisant l’op´erateur de la conversion forc´ee, il faut respecter la suite de l’´evaluation de l’expression. Il ne suffirait donc pas d’´ecrire:

PTTC = (double)PNET+PNET*TVA/100;

Parce que la multiplication et la division ont la priorit´e sur l’addition; la conversion se ferait trop tard, c.-`a-d.:

`

a la fin du calcul.

Il existe plusieurs possibilit´es de r´esoudre ce probl`eme:

• utiliser la conversion (double) lors des premi`eres op´erations effectu´ees:

PTTC = PNET+(double)PNET*TVA/100;

• utiliser une constante du type double lors de la division:

PTTC = PNET+PNET*TVA/100.0;

• d´eclarer PNET et/ou TVA comme double :

double PNET, TVA, PTTC;

2)

#include<stdio.h>

#include<math.h>

main()

{ int XA, YA, XB, YB;

(5)

double DIST;

printf(”Entrez les coordonn´ees du point A : XA,YA ”);

scanf(”%d,%d”, &XA, &YA);

printf(”Entrez les coordonn´ees du point B : XB,YB ”);

scanf(”%d,%d”, &XB, &YB);

DIST=sqrt(pow(XA-XB,2)+pow(YA-YB,2));

printf(”La distance entre A(%d,%d) et B(%d, %d) est %.2f\n”, XA, YA, XB, YB, DIST);

}

Références

Documents relatifs

Supposons qu’il existe une relation de r´ ecurrence lin´ eaire non triviale v´ erifi´ ee par

op´ erations arithm´ etiques dans K d’apr` es la question pr´ ec´ edente.. A chaque passage dans la boucle on effectue un produit dans K

Chaque it´ eration coˆ ute O(log p) op´ erations arithm´ etiques dans F p d’apr` es la question 3 ; le coˆ ut de la fonction construction est donc le mˆ eme dans 99 cas

de même que dans les sociétés d'ingénierie, les bureaux d'études et, bien sûr, chez les développeurs de logiciels de calcul scientifique et dans la recherche en informatique.

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´ e unsigned.. Comme pour la question pr´ ec´ edente,

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