• Aucun résultat trouvé

Université de Xidian Université de Xidian

N/A
N/A
Protected

Academic year: 2022

Partager "Université de Xidian Université de Xidian"

Copied!
2
0
0

Texte intégral

(1)

Université de Xidian Université de Xidian

Polytech’Sophia 2019–2020

Examen de Langage C

(V. Granet)

Durée : 1h30 Aucun document autorisé Mobiles interdits

I1. Écrivez la structure compteursqui contient deux champs de type int appelésnbLettreset nbChiffres.

s t r u c t compteurs { i n t nbLettres ; i n t nbChiffres ; };

. . . . I2. En utilisant uniquement la notation de pointeur, écrivez la fonction compterqui renvoie une structure de typecompteursqui contient le nombre de lettres et de chiffres contenus dans la chaîne de caractères passée en paramètres. Vous pourrez utiliser les fonctionsisalphaetisdigit. /*

* Rôle : renvoie le nombre de lettres et de chiffres contenus

* dans la chaîne de caractères s

*/

s t r u c t compteurs compter (c o n s t char *s) { s t r u c t compteurs res = {0 ,0};

w h i l e (*s) {

i f ( isalpha (*s)) res. nbLettres ++;

e l s e

i f ( isdigit (*s)) res. nbChiffres ++;

} s++;

r e t u r n res;

}

. . . . I3. En utilisant la fonctioncompterprécédente, écrivez en C le programmemyprogqui affiche sur la sortie standard le nombre de lettres et de chiffres d’une chaîne de caractères passée en para- mètre au programme par l’intermédiaire deargcetargv. Vous ferez les vérification nécessaires des paramètres. Par exemple, les exécutions du programme myprog suivantes donneront :

./myprog toto123+-xx9 6 4./myprog

Error! Usage : myprog string

i n t main (i n t argc , char * argv []) { i f ( argc !=2) {

fprintf (stderr , " Usage : compter str\n");

r e t u r n EXIT_FAILURE ;

1

}s t r u c t compteurs r = compter ( argv [1]);

printf ("%d %d\n", r. nbLettres , r. nbChiffres );

r e t u r n EXIT_SUCCESS ; }

. . . . I 4. Un fichier contient une suite de réelsdouble(attention ce n’est pas un fichier de caractères).

À partir de ce fichier, on veut fabriquer une liste chaînée dedouble. La liste est définie par la déclaration de type suivante :

t y p e d e f s t r u c t noeud { double elt;

s t r u c t noeud * suivant ; } * listeD ;

Écrivez la procédurecreerListeDqui crée une liste de réelsdoubleà partir d’un fichier de double. Le nom du fichier est passé en paramètre. Vous vérifierez la validité de l’ouverture du fichier. Pensez à insérer chaque nouveau réeldoublelu en tête de liste. L’en-tête de cette procédure (que vous devez respecter) est le suivant :

/*

* Rôle : crée la liste de double l à partir du fichier

* de double de nom f

*

void*/ creerListeD (c o n s t char *f, listeD *l) {

/*

* Rôle : insère en tête de liste l le réel double x void*/ insererEnTete (c o n s t double x, listeD *l) {

s t r u c t noeud *n = malloc (s i z e o f(s t r u c t noeud ));

n->elt = x;

n-> suivant = *l;

*l = n;

} /*

* Rôle : crée la liste de double l à partir du fichier

* de double de nom f

*

void*/ creerListeD (c o n s t char *f, listeD *l) { FILE *fd = fopen (f, "r");

double x;

*l= NULL ;

w h i l e ( fread (&x, s i z e o f(double), 1, fd ) >0) insererEnTete (x, l);

fclose (fd );

}

. . . . I 5. Écrivez la procédureprintListeDqui affiche sur la sortie standard tous les réelsdoublede la

liste. Cette procédure possède l’en-tête suivant : /*

2

(2)

* Rôle : écrit sur la sortie standard les réels double

* contenus dans la liste l void*/ printListeD ( listeD l) {

/*

* Rôle : écrit sur la sortie standard les réels double

* contenus dans la liste l void*/ printListeD ( listeD l) {

w h i l e (l!= NULL ) { printf ("%f ", l->elt );

l=l-> suivant ; }printf ("\n");

}

. . . .

3

Références

Documents relatifs

En utilisant la fonction compter précédente, écrivez en C le programme myprog qui affiche sur la sortie standard le nombre de lettres et de chiffres d’une chaîne de caractères

Écrivez la fonction main dans laquelle vous déclarerez une variable jour de type lesJours et à laquelle vous affecterez la valeur samedi..

Écrivez la fonction lireJour qui lit sur l’entrée standard un entier (∈ [0; 6]) et qui renvoie la valeur correspondante dans le type lesJours. Écrivez la fonction main dans

Écrivez la fonction lireReel qui lit sur l’entrée standard caractère à caractère (uniquement à l’aide de la fonction scanf("%c",...) , à l’exclusion de toute

Écrivez la fonction lireReel qui lit sur l’entrée standard caractère à caractère (uniquement à l’aide de la fonction scanf("%c",...) , à l’exclusion de toute

Écrivez un programme C qui lit un grade sur l’entrée standard, et qui écrit sur la sortie standard l’avis correspondant.. Vous utiliserez

Écrivez un programme C qui lit un grade sur l’entrée standard, et qui écrit sur la sortie standard l’avis correspondant. Vous utiliserez

Sachant que l’entier le plus grand sur le type long est donné par la constante LONG_MAX , écrivez un programme qui détermine le plus grand entier n dont on peut calculer n!. sur le