I am keeping this page for archival purposes in the hope that the material will be useful to others, but my teaching pages are not actively maintained and external links may break. I do not teach at the Villetaneuse IUT or at Université Sorbonne Paris Nord any longer; please see the home page for my current situation.

Luca Saiu : Introduction à la programmation en C

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.


Introduction

Ce cours introduit les éléments basiques de la programmation en utilisant le langage C.


Évaluation

On aura un contrôle écrit.


Séances

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é.


Exercices

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


Suggestions pratiques

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.


Télécharger un exemple dans un répertoire fraîche et l'ouvrir

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).


Compilation

Ligne de commande conseillée pour la compilation:

gcc -O2 -Wall -o exécutable source.c

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.


Autres ressources

Vous trouvez ici des autres ressources mises à disposition des étudiants. L'utilisation de ces ressources est optionnelle, mais conseillée.

Tutoriels sur la programmation en C

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.

Code écrit en 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.


Me contacter

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.



[hacker emblem]

Luca Saiu — IUT de Villetaneuse, Département Réseaux et Télécommunications
Mis à jour le 13 juillet 2019.