Module ISUP-2019sept TD 2 – page 1/2
TD : Programmation en C — semaine 2
4 Octobre 2019
Objectif(s)
O Premi`eres bases de programmation : variables, et structures de contrˆole (conditionnel, boucle).
O Gestion des entr´ees/sorties clavier.
Attention :le manuel (accessible avec la commandeman) contient aussi des informations sur les fonctions C de la biblioth`eque standard. Par exemple,man printfpermet de se renseigner sur l’utilisation de la fonction Cprintf.
De plus, vous ferez attention `a rendre le code que vous ´ecrirez lisible pour une autre personne : par exemple en don- nant des noms explicites `a vos variables, en indentant correctement votre code1, ainsi qu’en ajoutant des commentaires pour d´ecrire le fonctionnement de tout ce qui n’est pas ´evident.
Exercice 1 – Pr´eliminaires
1. T´el´echarger le fichierready.csur le site des TDs, et en console, effectuer les ´etapes suivantes :
— Cr´eer un dossier avec votre nom, un sous-dossiertd2et placer le fichierready.cdans ce r´epertoire.
— Vous pouvez compiler le fichier avecgccet l’ex´ecuter avec./ready: gcc ready.c -o ready
./ready
Il y a un certain nombre d’options que l’on doit fournir `agcc2, la commande compl`ete que nous utiliserons pour tous nos programmes sera :
gcc ready.c -o ready -Wall -ansi -pedantic -Wall -Werror -std=c99
Pour ne pas retaper cette longue ligne `a chaque fois, vous pouvez r´ecup´erer le scriptrun.sh, le mettre dans le mˆeme r´epertoire queready.cet taper :
./run.sh ready
Rappel : Pour rendre un script ex´ecutable il faut taperchmod +x run.sh. Si vous remplacez “ready” par un autre nom de programme, le scriptrun.shmarchera tout aussi bien !
2. Lisez les deux fichiers que vous avez t´el´echargez. Que fait le programmeready.c?
Exercice 2 – `A votre tour
Tous les programmes suivants seront stock´es dans des fichiers diff´erents, pour d´emarrer n’h´esitez pas `a vous inspirez de ready.c.
1. Affichez “Bonjour Monde” `a l’´ecran.
2. ´Ecrivez un programme qui demande deux r´eels `a l’utilisateur et affiche lequel est le plus petit et lequel est le plus grand.
Pour cela, nous utiliserons la fonctionscanfde la biblioth`eque standard, telle quescanf("%f", &v);attend que l’utilisateur entre une valeur (%findique qu’il s’agit d’un nombreflottant) et l’enregistre dans la variable v (d´eclar´ee avec le typefloat)3. L’affichage du contenu devse fera avec l’instruction suivante :printf("%f", v);.
3. Demandez `a l’utilisateur la notenqu’il a obtenu au dernier examen et affichez sa mention sachant que :
1. cf. la ”golden rule” de l’indentation :https://www2.cs.arizona.edu/˜mccann/indent_c.html 2. Vous savez comment regarder `a quoi elles correspondent
3. Attention `a ne pas oublier le symbole ’&’ devant le nom de la variable. Nous verrons dans les semaines qui suivent le sens pr´ecis de ce symbole.
Sorbonne Universit´e/Master d’Informatique/ISUP-2019sept 4 Octobre 2019
Module ISUP-2019sept TD 2 – page 2/2
— n <10= Echec
— 10≤n <12= Peut mieux faire
— 12≤n <14= Assez bien
— 14≤n <16= Bien
— 16≤n= Tr`es bien
4. Demandez un entiern`a l’utilisateur. Affichez tous les entiers de1 `an(un par ligne).
5. Demandez deux entiersnetm`a l’utilisateur. Affichez un rectanglen×muniquement compos´e d’´etoiles (*).
6. Demandez un entiern`a l’utilisateur. Affichez le suite desnpremiers termes de la suite de Fibonacci. Expliquer le comportement apparaissant quandn∼50.
Exercice 3 – Un mini-jeuC’est plus, c’est moins
On g´en`ere un nombre al´eatoirercompris entre 0 (inclus) etn(exclus) avec la fonctionrand: int r = rand() % n;
Cette fonction est inclue dans la biblioth`eque standard : vous devez ajouter #include <stdlib.h>au d´ebut de votre programme.
1. G´en´erez un entier al´eatoirex∈[0; 1000[.
Demandez ensuite un nombre entier `a l‘utilisateur :
— Si il est au dessus, dites le lui et redemandez ;
— Si il est en dessous, dites le lui et redemandez ;
— Si il trouve, c’est gagn´e !
2. Inversez le fonctionnement du jeu pour que cette fois le joueur choisisse le nombre `a deviner, et que ce soit l’ordina- teur qui devine.
Exercice 4 – Challenges
1. Vous avez trois challenges de programmation `a r´esoudre. Les sujets sont les suivants (par ordre - subjectif - de difficult´e) :
— Parking -https://uva.onlinejudge.org/external/113/11364.pdf
— Division of Nlogonia -https://uva.onlinejudge.org/external/114/11498.pdf
— Combination Lock -https://uva.onlinejudge.org/external/105/10550.pdf Voici quelques informations suppl´ementaires surscanfqui vous seront utiles :
— scanfignore les espaces, si vous ´ecrivezscanf("%d", &v)et rentrez “ 12”, pas de soucis.
— Pour r´ecup´erer deux ´el´ements de l’utilisateur d’affil´ee, vous pouvez ´ecrirescanf("%d %d", &v1, &v2) ou simplement faire deuxscanf`a la suite.
— Mettez l’exemple du probl`eme dans un fichierinput.txt, vous pouvez tester votre programme avec : ./snail < input.txt
(Rappelez-vous, <redirige le contenu du fichier vers l’entr´ee standard du programme, par cons´equent on peut lire le contenu du fichier avecscanf.)
Sorbonne Universit´e/Master d’Informatique/ISUP-2019sept 4 Octobre 2019