Cette page web est la page web officielle du cours.
Vous trouvez des ressources plus en bas. Si vous avez besoin de me contacter ou vous devez m'envoyer du code, cette page explique comment.
Ce cours introduit les éléments basiques de la programmation en utilisant le langage C.
On aura un contrôle écrit.
Vous trouvez ici, pour chaque séance, les mêmes transparents que j'utilise en classe, potentiellement avec des corrections et des intégrations. J'ai également gardé un énoncé compact des exercices pratiques sur lesquels les étudiants ont travaillé.
- valeur absolue - test de parité d'un nombre non négatif (deux versions: reste de la division par deux, et bit à bit) - élimination des conditionnelles redondantes dans les solutions à l'exercice précedent.
- minimum entre deux nombres - boucle infinie - afficher tout nombre naturel - afficher les nombres naturels dans [0, 1000] - Algorithme d'Euclide (par soustractions, sans module)
- Fonction moyenne (entre deux entiers, résultat flottant) - Factorielle (impératif, boucle for) - Test de primalité (résultat booléen) - Afficher tout nombre premier - Factoriser les exemples existants - euclide - ... - ...
Ces exercices sont des problèmes de programmation orientés aux débutants. Il faut les résoudre en utilisant des boucles et des fonctions.
Les lettres et les chiffres identifiant chaque problème n'ont aucun signifié particulier. C'est juste un système que j'utilise pour reconnaître les exercices typiques que je propose en tout langage. Pas tous sont adapté au langage C, donc la numérotation n'est pas séquentielle.
B.1. Affichier 3 astérisques dans des lignes séparées, comme ça, en utilisant une boucle for : * * * B.2. Affichier 3 astérisques dans des lignes séparées, comme ça, en utilisant une boucle while : * * * B.3. Affichier ces lignes d'astérisques en utilisant une boucle for et la multiplication entre une chaîne de caractères et un nombre : * ** *** B.4. Affichier ces lignes d'astérisques en utilisant une boucle for, la multiplication entre une chaîne de caractères et un nombre, et la somme entre chaînes de caractères. Suggestion : on a combien d'espaces et combien d'astérisques dans chaque ligne ? Dans la ligne i-ème en général ? * ** *** B.5. Généralisez chacun des programmes précédentes pour afficher une ligne ou un triangle d'hauteur n, où n est le paramètre formel d'une fonction. C.-2. Étant donné la durée d'un film en heures, minutes et secondes, calculez la même durée en secondes (nombre entier) et en heures (nombre flottant : par exemple une heure et demie sera 1.5). C.1. Votre programme stockera dans une variable un nombre secret, entier. Il peut être en réalité une constante choisie par vous, ou un nombre aléatoire si vous savez le faire. Le programme demande à l'utilisateur de deviner le nombre secret, et termine juste quand l'utilisateur a deviné correctement. C.2. Une variante de C.1, où après chaque tentative incorrecte le programme dit à l'utilisateur si sa dernière entrée est majeure ou mineur par rapport à la solution. Z.1. Affichiez une table de multiplication similaire à la suivante (sans « ... »), jusqu'à une limite donnée comme paramètre. 1 * 0 = 0 1 * 1 = 1 1 * 2 = 2 1 * 3 = 3 ... 1 * 10 = 10 2 * 0 = 0 2 * 1 = 2 2 * 2 = 4 2 * 3 = 6 ... 2 * 10 = 20 3 * 0 = 0 3 * 1 = 3 3 * 2 = 6 ... 9 * 10 = 90
J'inclus ici quelques rappels sur la ligne de commande Unix. Un bon tutoriel pour maîtriser vraiment la ligne de commande est Introduction to the command line.
Faites toujours attention aux espaces et à la différence entre minuscules et majuscules.
Créez un nouveau répertoire et y allez; dans cet exemple j'utiliserai un répertoire nommé cprogramming directement contenu dans votre répertoire personnel. Vous pouvez télécharger un programme source d'exemple écrit en C à partir de cette page web, directement dans la ligne de commande sans passer par un navigateur web:
mkdir ~/cprogramming cd ~/cprogramming wget http://ageinghacker.net/teaching/programming-c/code-en-direct/skeleton.c
À ce point la commande
ls
devrait montrer le fichier téléchargé.
Ouvrez le fichier que vous avez téléchargé avec un éditeur, en mettant l'éditeur en background (par &) pour pouvoir continuer à utiliser le même terminal :
gedit skeleton.c &
À ce point, sauvegardez le fichier ouvert avec un autre nom en utilisant la commande « Save As... » (en français « Enregistrer sous... » ou similaire) de l'éditeur. Vous allez travailler sur votre copie renommée.
Gardez les deux fenêtres du terminal et de l'éditeur visibles au même temps sur l'écran, sans couvrir une avec l'autre. Vous allez passer de l'une à l'autre tout le temps, et ce passage doit être rapide pour vous : apprenez comment le faire sans utiliser la souris (sur les installations de l'IUT c'est par Ctrl+Tab ; sur des autres systèmes la combination de touches peut être différente).
Ligne de commande conseillée pour la compilation:
gcc -O2 -Wall -o exécutable source.c
où exécutable est le fichier exécutable à générer et source.c est votre fichier source écrit en C. Le « O » dans « -O2 » est une lettre, et non le chiffre zéro.
Si vous avez des warnings à propos du résultat de scanf que vous n'avez pas utilisé (je n'ai pas expliqué ce résultat, donc c'est normal si vous ne l'utilisez pas) et ces warnings vous dérangent, vous pouvez les supprimer (en gardant les autres) en compilant de la façon suivante :
gcc -O2 -Wall -Wno-unused-result -o exécutable source.c
Assurez-vous que les fichiers exécutable et source.c soient vraiment les deux fichiers sur lesquels vous êtes en train de travailler ; c'est très facile de faire une erreur de distraction et tester, par hasarde, des fichiers différents.
Je conseille aux débutants de travailler dans le répertoire contenant source.c, et de générer exécutable dans le même répertoire. Les programmeurs plus expérimentés travailleront sur des programmes plus complexes, en utilisant des répertoires séparés pour les sources et les exécutables.
Pour exécuter votre fichier exécutable, si le compilateur n'a pas donné des erreurs,
./exécutable
Appuyez Ctrl+C pour interrompre un programme en train de s'exécuter, par exemple si dans une boucle infinie.
Vous trouvez ici des autres ressources mises à disposition des étudiants. L'utilisation de ces ressources est optionnelle, mais conseillée.
On trouve facilement plein de tutoriels sur le langage C. Je trouve la qualité de la documentation en anglais supérieure aux alternatives en français, comme toujours dans la documentation technique.
La solution la plus facile pour mes étudiants est demander à moi personnellement en cas de doutes concrets. Je ne vais pas pénaliser un étudiant pour la naïveté d'une question.
Je ne vais pas (probablement) présenter les extensions GNU dans ce cours, ou des autres extensions non standard. Si voue utilisez un tutoriel présentant des extensions aussi, faites attention à distinguer la partie standard et la partie non portable.
Si vous avez besoin d'un tutoriel vous pouvez regardes ces dans cette liste, ou en chercher des autres. Faites attention en tout cas, que nous utilisons le langage C, et non le langage C++. C++ est un langage différent, largement compatible avec C mais beaucoup plus complexe, et avec des différences importantes. Vous pouvez apprendre C++ aussi, mais je ne le conseille pas aux débutants—et en tout cas le code C++ n'est pas accepté dans ce cours.
Le code que j'écris en classe sur mon ordinateur en tant qu'exemple, en parlant, n'est pas nécessairement propre et n'est presque jamais bien commenté, car je donne mes commentaires oralement ; quand même les étudiants me demandent souvent une copie.
Vous trouvez le code écrit en classe pour ce cours ici.
La page principale de mes enseignements explique comment me contacter et comment m'envoyer du code.
N'utilisez pas l'ENT pour me soumettre des projets, des fichiers ou des messages.
Luca Saiu — IUT de Villetaneuse, Département Réseaux et Télécommunications
Mis à jour le 13 juillet 2019.