|
|
| Chapitre 4: LIRE ET ÉCRIRE DES DONNÉES | |
| | Auteur | Message |
---|
Djallilus Admin
Nombre de messages : 1334 Age : 36 Localisation : Mostaganem Emploi/loisirs : Demasquer les faux Humeur : g pas trouver une fixe Réputation : 5 Points : 1650 Date d'inscription : 24/09/2008
| Sujet: Chapitre 4: LIRE ET ÉCRIRE DES DONNÉES Jeu 25 Déc - 19:34 | |
| Chapitre 4: LIRE ET ÉCRIRE DES DONNÉESLa bibliothèque standard <stdio> contient un ensemble de fonctions qui assurent la communication de la machine avec le monde extérieur. Dans ce chapitre, nous allons en discuter les plus importantes: | printf() | écriture formatée de données | | scanf() | lecture formatée de données | | putchar() | écriture d'un caractère | | getchar() | lecture d'un caractère | 4.1. Écriture formatée de donnéesprintf()La fonction printf est utilisée pour transférer du texte, des valeurs de variables ou des résultats d'expressions vers le fichier de sortie standard stdout
(par défaut l'écran). Ecriture formatée en langage algorithmique écrire <Expression1>,<Expression2>, ... Ecriture formatée en C printf("<format>",<Expr1>,<Expr2>, ... ) | "<format>" | : | format de représentation | | <Expr1>,... | : | variables et expressions dont les valeurs sont à représenter | La partie " <format>" est en fait une chaîne de caractères qui peut contenir: * du texte * des séquences d'échappement * des spécificateurs de format * Les spécificateurs de format indiquent la manière dont les valeurs des expressions <Expr1..N> sont imprimées. * La partie "<format>" contient exactement unspécificateur de format pour chaque expression <Expr1..N>. * Les spécificateurs de format commencent toujours par le symbole %et se terminent par un ou deux caractères qui indiquent le format d'impression. | |
| | | Djallilus Admin
Nombre de messages : 1334 Age : 36 Localisation : Mostaganem Emploi/loisirs : Demasquer les faux Humeur : g pas trouver une fixe Réputation : 5 Points : 1650 Date d'inscription : 24/09/2008
| Sujet: Re: Chapitre 4: LIRE ET ÉCRIRE DES DONNÉES Jeu 25 Déc - 19:35 | |
| * Les spécificateurs de format impliquent une conversion d'un nombre en chaîne de caractères. Ils sont encore appelés symboles de conversion.Exemple 1La suite d'instructions: int A = 1234; int B = 567; printf("%i fois %i est %li\n", A, B, (long)A*B);va afficher sur l'écran: 1234 fois 567 est 699678Les arguments de printfsont | - | la partie format | "%i fois %i est %li" | | - | la variable | A | | - | la variable | B | | - | l'expression | (long)A*B | Le 1er | spécificateur (%i) indique que la valeur de A | | | sera imprimée comme entier relatif | ==>1234 | Le 2e | spécificateur (%i) indique que la valeur de B | | | sera imprimée comme entier relatif | ==> 567 | Le 3e | spécificateur (%li) indique que la valeur de (long)A*Bsera imprimée comme entier relatif long | ==> 699678 | Exemple 2La suite d'instructions: char B = 'A'; printf("Le caractère %c a le code %i !\n", B, B);va afficher sur l'écran: Le caractère A a le code 65 !La valeur de B est donc affichée sous deux formats différents: | %c | comme caractère: | A | | %i | comme entier relatif: | 65 | Spécificateurs de format pour printf | |
| | | Djallilus Admin
Nombre de messages : 1334 Age : 36 Localisation : Mostaganem Emploi/loisirs : Demasquer les faux Humeur : g pas trouver une fixe Réputation : 5 Points : 1650 Date d'inscription : 24/09/2008
| Sujet: Re: Chapitre 4: LIRE ET ÉCRIRE DES DONNÉES Jeu 25 Déc - 19:35 | |
| SYMBOLE | TYPE | IMPRESSION COMME | %d ou %i | int | entier relatif | %u | int | entier naturel (unsigned) | %o | int | entier exprimé en octal | %x | int | entier exprimé en hexadécimal | %c | int | caractère | %f | double | rationnel en notation décimale | %e | double | rationnel en notation scientifique | %s | char* | chaîne de caractères | 1. Arguments du type longLes spécificateurs %d, %i, %u, %o, %x peuvent seulement représenter des valeurs du type intou unsigned int. Une valeur trop grande pour être codée dans deux octets est coupée sans avertissement si nous utilisons %d. Pour pouvoir traiter correctement les arguments du type long, il faut utiliser les spécificateurs %ld, %li, %lu, %lo, %lx. Exemple long N = 1500000; | | printf("%ld, %lx", N, N); | ==> 1500000, 16e360 | printf("%x, %x" , N); | ==> e360, 16 | printf("%d, %d" , N); | ==> -7328, 22 | 2. Arguments rationnelsLes spécificateurs %f et %epeuvent être utilisés pour représenter des arguments du type float ou double. La mantisse des nombres représentés par %e contient exactement un chiffre (non nul) devant le point décimal. Cette représentation s'appelle la notation scientifique des rationnels. Pour pouvoir traiter correctement les arguments du type long double, il faut utiliser les spécificateurs %Lf et %Le. Exemple float N = 12.1234; | | double M = 12.123456789; | | long double P = 15.5; | | printf("%f", N); | ==> 12.123400 | printf("%f", M); | ==> 12.123457 | printf("%e", N); | ==> 1.212340e+01 | printf("%e", M); | ==> 1.212346e+01 | printf("%Le", P); | ==> 1.550000e+01 | | |
| | | Djallilus Admin
Nombre de messages : 1334 Age : 36 Localisation : Mostaganem Emploi/loisirs : Demasquer les faux Humeur : g pas trouver une fixe Réputation : 5 Points : 1650 Date d'inscription : 24/09/2008
| Sujet: Re: Chapitre 4: LIRE ET ÉCRIRE DES DONNÉES Jeu 25 Déc - 19:36 | |
| 3. Largeur minimale pour les entiersPour les entiers, nous pouvons indiquer la largeur minimale de la valeur à afficher. Dans le champ ainsi réservé, les nombres sont justifiés à droite. Exemples( _ <=> position libre) printf("%4d", 123); | ==> | _123 | printf("%4d", 1234); | ==> | 1234 | printf("%4d", 12345); | ==> | 12345 | printf("%4u", 0); | ==> | ___0 | printf("%4X", 123); | ==> | __7B | printf("%4x", 123); | ==> | __7b | Largeur minimale et précision pour les rationnels4. Pour les rationnels, nous pouvons indiquer la largeur minimale de la valeur à afficher et la précision du nombre à afficher. La précision par défaut est fixée à six décimales. Les positions décimales sont arrondies à la valeur la plus proche. Exemples printf("%f", 100.123); | ==> | 100.123000 | printf("%12f", 100.123); | ==> | __100.123000 | printf("%.2f", 100.123); | ==> | 100.12 | printf("%5.0f", 100.123); | ==> | __100 | printf("%10.3f", 100.123); | ==> | ___100.123 | printf("%.4f", 1.23456); | ==> | 1.2346 | | |
| | | Djallilus Admin
Nombre de messages : 1334 Age : 36 Localisation : Mostaganem Emploi/loisirs : Demasquer les faux Humeur : g pas trouver une fixe Réputation : 5 Points : 1650 Date d'inscription : 24/09/2008
| Sujet: Re: Chapitre 4: LIRE ET ÉCRIRE DES DONNÉES Jeu 25 Déc - 19:36 | |
| Exercice 4.1
#include <stdio.h>main(){ int N=10, P=5, Q=10, R; char C='S'; N = 5; P = 2; Q = N++ > P || P++ != 3; printf ("C : N=%d P=%d Q=%d\n", N, P, Q); N = 5; P = 2; Q = N++ < P || P++ != 3; printf ("D : N=%d P=%d Q=%d\n", N, P, Q); N = 5; P = 2; Q = ++N == 3 && ++P == 3; printf ("E : N=%d P=%d Q=%d\n", N, P, Q); N=5; P=2; Q = ++N == 6 && ++P == 3; printf ("F : N=%d P=%d Q=%d\n", N, P, Q); N=C; printf ("G : %c %c\n", C, N); printf ("H : %d %d\n", C, N); printf ("I : %x %x\n", C, N); return 0;}
a) Sans utiliser l'ordinateur, trouvez et notez les résultats du programme ci-dessus.
b) Vérifiez vos résultats à l'aide de l'ordinateur.
4.2. Lecture formatée de données
scanf()
La fonction scanf est la fonction symétrique à printf; elle nous offre pratiquement les mêmes conversions que printf, mais en sens inverse.
Lecture formatée en langage algorithmique
lire <NomVariable1>,<NomVariable2>, ... | |
| | | Djallilus Admin
Nombre de messages : 1334 Age : 36 Localisation : Mostaganem Emploi/loisirs : Demasquer les faux Humeur : g pas trouver une fixe Réputation : 5 Points : 1650 Date d'inscription : 24/09/2008
| Sujet: Re: Chapitre 4: LIRE ET ÉCRIRE DES DONNÉES Jeu 25 Déc - 19:37 | |
| Lecture formatée en C scanf("<format>",<AdrVar1>,<AdrVar2>, ...) | "<format>" | : | format de lecture des données | | <AdrVar1>,... | : | adresses des variables auxquelles les données seront attribuées | * La fonction scanf reçoit ses données à partir du fichier d'entrée standard stdin (par défaut le clavier). * La chaîne de format détermine comment les données reçues doivent être interprétées. * Les données reçues correctement sont mémorisées successivement aux adressesindiquées par <AdrVar1>,... . * L'adresse d'une variable est indiquée par le nom de la variable précédé du signe &. ExempleLa suite d'instructions: int JOUR, MOIS, ANNEE; scanf("%i %i %i", &JOUR, &MOIS, &ANNEE);lit trois entiers relatifs, séparés par des espaces, tabulations ou interlignes. Les valeurs sont attribuées respectivement aux trois variables JOUR, MOIS et ANNEE. * scanf retourne comme résultat le nombre de données correctement reçues (type int). Spécificateurs de format pour scanf SYMBOLE | LECTURE D'UN(E) | TYPE | %d ou %i | entier relatif | int* | %u | entier naturel (unsigned) | int* | %o | entier exprimé en octal | int* | %b | entier exprimé en hexadécimal | int* | %c | caractère | char* | %s | chaîne de caractères | char* | %f ou %e | rationnel en notation décimale ou exponentielle (scientifique) | float* | Le symbole * indique que l'argument n'est pas une variable, mais l' adressed'une variable de ce type (c.-à-d.: un pointeur sur une variable - voir chapitre 9 'Les pointeurs'). | |
| | | Djallilus Admin
Nombre de messages : 1334 Age : 36 Localisation : Mostaganem Emploi/loisirs : Demasquer les faux Humeur : g pas trouver une fixe Réputation : 5 Points : 1650 Date d'inscription : 24/09/2008
| Sujet: Re: Chapitre 4: LIRE ET ÉCRIRE DES DONNÉES Jeu 25 Déc - 19:37 | |
| 1. Le type long
Si nous voulons lire une donnée du type long, nous devons utiliser les spécificateurs %ld, %li, %lu, %lo, %lx. (Sinon, le nombre est simplement coupé à la taille de int).
2. Le type double
Si nous voulons lire une donnée du type double, nous devons utiliser les spécificateurs %le ou %lf.
3. Le type long double
Si nous voulons lire une donnée du type long double, nous devons utiliser les spécificateurs %Le ou %Lf.
4. Indication de la largeur maximale
Pour tous les spécificateurs, nous pouvons indiquer la largeur maximale du champ à évaluer pour une donnée. Les chiffres qui passent au-delà du champ défini sont attribués à la prochaine variable qui sera lue !
Exemple
Soient les instructions:
int A,B; scanf("%4d %2d", &A, &B);
Si nous entrons le nombre 1234567, nous obtiendrons les affectations suivantes:
A=1234 B=56
le chiffre 7 sera gardé pour la prochaine instruction de lecture.
5. Les signes d'espacement
Lors de l'entrée des données, une suite de signes d'espacement (espaces, tabulateurs, interlignes) est évaluée comme un seul espace. Dans la chaîne de format, les symboles \t, \n, \r ont le même effet qu'un simple espace.
Exemple
Pour la suite d'instructions
int JOUR, MOIS, ANNEE; scanf("%i %i %i", &JOUR, &MOIS, &ANNEE);
les entrées suivantes sont correctes et équivalentes:
12 4 1980 ou 12 004 1980 ou 12 4 1980 | |
| | | Djallilus Admin
Nombre de messages : 1334 Age : 36 Localisation : Mostaganem Emploi/loisirs : Demasquer les faux Humeur : g pas trouver une fixe Réputation : 5 Points : 1650 Date d'inscription : 24/09/2008
| Sujet: Re: Chapitre 4: LIRE ET ÉCRIRE DES DONNÉES Jeu 25 Déc - 19:37 | |
| 6. Formats 'spéciaux'Si la chaîne de format contient aussi d'autres caractères que des signes d'espacement, alors ces symboles doivent être introduits exactement dans l'ordre indiqué. ExempleLa suite d'instructions int JOUR, MOIS, ANNEE; scanf("%i/%i/%i", &JOUR, &MOIS, &ANNEE); accepte les entrées: | rejette les entrées: | 12/4/1980 |
12 ... | 12/04/01980 | 12 /4 /1980 | 7. Nombre de valeurs luesLors de l'évaluation des données, scanf s'arrête si la chaîne de format a été travaillée jusqu'à la fin ou si une donnée ne correspond pas au format indiqué. scanf retourne comme résultat le nombre d'arguments correctement reçus et affectés. ExempleLa suite d'instructions int JOUR, MOIS, ANNEE, RECU; RECU = scanf("%i %i %i", &JOUR, &MOIS, &ANNEE);réagit de la façon suivante ( - valeur indéfinie): Introduit: | | RECU | JOUR | MOIS | ANNEE | 12 ... | ==> | 3 | 12 | 4 | 1980 | 12/4/1980 | ==> | 1 | 12 | - | - | 12.4 1980 | ==> | 1 | 12 | - | - | 12 4 19.80 | ==> | 3 | 12 | 4 | 19 | | |
| | | Djallilus Admin
Nombre de messages : 1334 Age : 36 Localisation : Mostaganem Emploi/loisirs : Demasquer les faux Humeur : g pas trouver une fixe Réputation : 5 Points : 1650 Date d'inscription : 24/09/2008
| Sujet: Re: Chapitre 4: LIRE ET ÉCRIRE DES DONNÉES Jeu 25 Déc - 19:38 | |
| Exercice 4.2
En vous référant aux exemples du chapitre 4.2, écrivez un programme qui lit la date du clavier et écrit les données ainsi que le nombre de données correctement reçues sur l'écran.
Exemple:
Introduisez la date (jour mois année): 11 11 1991 données reçues : 3 jour : 11 mois : 11 année : 1991
* Testez les réactions du programme à vos entrées. Essayez d'introduire des nombres de différents formats et différentes grandeurs.
* Changez la partie format du programme de façon à séparer les différentes données par le symbole '-' .
4.3. Écriture d'un caractère
La commande,
putchar('a');
transfère le caractère a vers le fichier standard de sortie stdout. Les arguments de la fonction putchar sont ou bien des caractères (c.-à-d. des nombres entiers entre 0 et 255) ou bien le symbole EOF (End Of File).
EOF est une constante définie dans <stdio> qui marque la fin d'un fichier. La commande putchar(EOF); est utilisée dans le cas où stdout est dévié vers un fichier.
Type de l'argument
Pour ne pas être confondue avec un caractère, la constanteEOF doit nécessairement avoir une valeur qui sort du domaine des caractères (en général EOF a la valeur -1). Ainsi, les arguments de putchar sont par définition du type int et toutes les valeurs traitées par putchar (même celles du type char) sont d'abord converties en int.
Exemples
char A = 225; char B = '\a'; int C = '\a'; putchar('x'); /* afficher la lettre x */ putchar('?'); /* afficher le symbole ? */ putchar('\n'); /* retour à la ligne */ | |
| | | Djallilus Admin
Nombre de messages : 1334 Age : 36 Localisation : Mostaganem Emploi/loisirs : Demasquer les faux Humeur : g pas trouver une fixe Réputation : 5 Points : 1650 Date d'inscription : 24/09/2008
| Sujet: Re: Chapitre 4: LIRE ET ÉCRIRE DES DONNÉES Jeu 25 Déc - 19:38 | |
| 4.4. Lecture d'un caractère
Une fonction plus souvent utilisée que putchar est la fonction getchar, qui lit le prochain caractère du fichier d'entrée standard stdin.
Type du résultat
Les valeurs retournées par getchar sont ou bien des caractères (0 - 255) ou bien le symbole EOF. Comme la valeur du symbole EOF sort du domaine des caractères, le type résultat de getchar est int. En général, getchar est utilisé dans une affectation:
int C; C = getchar();
getchar lit les données de la zone tampon de stdin et fournit les données seulement après confirmation par 'Enter'. La bibliothèque <conio> contient une fonction du nom getch qui fournit immédiatement le prochain caractère entré au clavier.
La fonction getch n'est pas compatible avec ANSI-C et elle peut seulement être utilisée sous MS-DOS.
Exercice 4.3
Ecrire un programme qui lit un caractère au clavier et affiche le caractère ainsi que son code numérique:
a) en employant getchar et printf,
b) en employant getch et printf. | |
| | | Djallilus Admin
Nombre de messages : 1334 Age : 36 Localisation : Mostaganem Emploi/loisirs : Demasquer les faux Humeur : g pas trouver une fixe Réputation : 5 Points : 1650 Date d'inscription : 24/09/2008
| Sujet: Re: Chapitre 4: LIRE ET ÉCRIRE DES DONNÉES Jeu 25 Déc - 19:39 | |
| 4.5. Exercices d'application
Exercice 4.4
Ecrire un programme qui permute et affiche les valeurs de trois variables A, B, C de type entier qui sont entrées au clavier :
A ==> B , B ==> C , C ==> A
Exercice 4.5
Ecrire un programme qui affiche le quotient et le reste de la division entière de deux nombres entiers entrés au clavier ainsi que le quotient rationnel de ces nombres.
Exercice 4.6
Ecrire un programme qui affiche la résistance équivalente à trois résistances R1, R2, R3 (type double),
- si les résistances sont branchées en série:
Rsér = R1+R2+R3
- si les résistances sont branchées en parallèle:
Exercice 4.7
Ecrire un programme qui calcule et affiche l'aire d'un triangle dont il faut entrer les longueurs des trois côtés. Utilisez la formule :
S2 = P(P-A)(P-B)(P-C)
où A, B, C sont les longueurs des trois côtés (type int) et P le demi-périmètre du triangle.
Exercice 4.8
Ecrire un programme qui calcule la somme de quatre nombres du type int entrés au clavier,
a) en se servant de 5 variables (mémorisation des valeurs entrées) | |
| | | Djallilus Admin
Nombre de messages : 1334 Age : 36 Localisation : Mostaganem Emploi/loisirs : Demasquer les faux Humeur : g pas trouver une fixe Réputation : 5 Points : 1650 Date d'inscription : 24/09/2008
| Sujet: Re: Chapitre 4: LIRE ET ÉCRIRE DES DONNÉES Jeu 25 Déc - 19:39 | |
| b) en se servant de 2 variables (perte des valeurs entrées)
Exercice 4.9
a) Ecrire un programme qui calcule le prix TTC (type double) d'un article à partir du prix net (type int) et du pourcentage de TVA (type int) à ajouter. Utilisez la formule suivante en faisant attention aux priorités et aux conversions automatiques de type:
b) Ecrire un programme qui calcule le prix net d'un article (type double) à partir du prix TTC (type double) et du pourcentage de TVA (type int) qui a été ajoutée.
(Déduisez la formule du calcul de celle indiquée ci-dessus)
Exercice 4.10
Ecrire un programme qui calcule et affiche la distance DIST (type double) entre deux points A et B du plan dont les coordonnées (XA, YA) et (XB, YB) sont entrées au clavier comme entiers. | |
| | | Contenu sponsorisé
| Sujet: Re: Chapitre 4: LIRE ET ÉCRIRE DES DONNÉES | |
| |
| | | | Chapitre 4: LIRE ET ÉCRIRE DES DONNÉES | |
|
Sujets similaires | |
|
Sujets similaires | |
| |
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
|
|
|