Corrigé TP 1

Pour la première question, il est question de l'étude sommaire de printf, scanf. La structure d'un programme est supposée connue.

◊ Ecrivez un programme qui demande à l'utilisateur de saisir deux valeurs entières relatives puis affiche leur somme.

Solution proposée :

E1_1.c

Remarquer que l'on peut calculer une somme, de manière générale on peut effectuer une opération quelconque, dans un printf.

◊ Ecrivez un programme qui demande à l'utilisateur de saisir deux valeurs entières relatives A et B puis affiche leur différence.

Complétez ce programme pour qu'il affiche l'un des trois messages suivant le cas :

"La différence A - B est plus grande que A" 

"La différence A - B est plus petite que A" 

"La différence A - B est nulle".

Solution proposée :

E1_2.c

Ne pas oublier le double égal pour la comparaison, voir la structure de l'instruction if (ici, pas de else, ni d'accolades vu que dans chaque cas il n'y a qu'une instruction à réaliser).

◊ Complétez le programme précédent pour qu'il saisisse des valeurs réelles. L'affichage des valeurs dans les trois messages se fera alors sur 8 caractères et 3 décimales.

Solution proposée :

E1_3.c

Peu de différences avec le programme précédent hormis le type des variables. On nous demande d'afficher sur au moins 8 caractères dont 3 réservées  à la partie décimale d'où le %8.3f. Revoyez l'instruction printf pour plus de détail sur les formats. 

◊ Ecrivez un programme qui saisisse deux valeurs puis demande l'opération à effectuer : les réponses possibles seront +, -, * ou /. Vous utiliserez d'abord une série de test puis un switch pour choisir le type de calcul à effectuer.

Solution proposée : (sans swicth)

E1_4.c

Pas de remarques très particulières. Toutefois, il faut noter l'espace devant le %c dans le scanf(" %c", &choix). Cet espace sert à demander au système de supprimer les caractères présents dans le tampon d'entrée du clavier avant de procéder à la saisie. 

Ici, cela éviter de récupérer le caractère correspondant à la frappe de la touche entrée ayant validé la saisie de B. Sans cet espace, le programme utilise ce caractère (la touche entrée donc) et passe à la suite sans attendre de saisie.

Noter aussi que char étant un caractère, il faut comparer avec des caractères qui sont notés entre cotes simples.

Le gros défaut de ce programme est que si l'on saisi autre chose que  '+', '-', '*' ou '/' le programme ne retourne pas de message d'erreur.

Noter l'utilisation du format %8.3f pour afficher sur 8 caractères minimum et 3 décimales.

Solution proposée : (avec swicth)

E1_5.c

Ce programme mérite quelques commentaire. 

Tout d'abord sur le switch (allez voir la syntaxe ici). Dans le cas présent, il ne faut pas que l'on exécute les instructions suivantes du bloc, il y a donc un break avant chaque case.

Notez la définition de constantes globales TRUE et FALSE et le test if (ok ). ok est un "drapeau" qui signale si la saisie est valide ou non. ok est positionnée à TRUE, et n'est modifiée que si la valeur de choix conduit le switch à exécuter la partie default.

La syntaxe du if (cf ici) prévoit une expression logique. En C toute valeur différente de 0 est équivalente à TRUE. Donc tester ok, c'est à dire tester sa valeur, revient à tester si ok != 0. Par convention on prend TRUE égal à 1, mais n'importe quelle autre valeur non nulle aurait fait l'affaire.

L3 EEA & ISS 2019-21 / p. castelan