Ch. 0-1 — Bases du langage C
La matière R2.04 en bref, un langage compilé et impératif : gcc versus ijava, structure d'un programme, types, structures de contrôle, tableaux à taille fixe, chaînes terminées par le caractère nul et fonctions.
La matière en un coup d'œil
R2.04 se compose de 3 h de cours (1 h par semaine pendant 3 semaines), 12 h de TP (3 h par semaine pendant 4 semaines) et 1 h 30 de contrôle de TP. Au programme : découvrir le langage C — que vous réutiliserez dès le S3 — apprendre à manipuler la mémoire et à utiliser les pointeurs. À la fin, vous devez savoir comprendre le processus de compilation, utiliser entiers, flottants, tableaux et chaînes de caractères, écrire des structures, découper en fonctions, et gérer la mémoire.
Un langage compilé
Le C a été développé par Dennis Ritchie et Kenneth Thompson dans les années 70, historiquement pour écrire le noyau UNIX ; la norme ANSI (C89) est définie par le livre de référence The C Programming Language (Kernighan et Ritchie, 1988). C'est l'ancêtre du Java (et donc du ijava) : vous retrouverez de nombreuses similitudes.
La chaîne de compilation se compare directement à celle du ijava :
| ijava | C |
|---|---|
écrire Hello.java | écrire main.c |
ijavac Hello.java | gcc -Wall -o hello main.c |
produit Hello.class | produit l'exécutable hello (grâce à -o) |
ijava Hello | ./hello |
gcc -Wall -o hello main.c # -Wall : tous les avertissements, toujours
./helloUn langage impératif et permissif
À la question « est-ce qu'en C je peux écrire ceci ? », la réponse sera très souvent « OUI vous pouvez » — suivie de près par « mais vous n'avez pas envie ! ». Les conseils du cours : écrire du code propre, lisible et que vous comprenez ; ne pas chercher à optimiser tant que le langage et l'algorithmique ne sont pas maîtrisés ; se préoccuper d'abord de faire du code qui fonctionne, et de savoir pourquoi. Le cours ne présente qu'un sous-ensemble du C — utilisez-le.
Structure d'un programme C
Un programme C est constitué des appels aux bibliothèques standards (#include <stdio.h>),
puis de la fonction main, la première fonction exécutée. Dans main — comme dans toutes
les fonctions — on trouve, dans cet ordre : la déclaration des variables, leur
initialisation, le corps de la fonction, puis le retour de la valeur. Toute instruction finit
par un point-virgule.
Variables et types
Chaque variable a un type ; en R2.04, on se limite à int, float et char. Toute variable
est déclarée en début de fonction, par son type suivi de son nom ; l'affectation se fait
avec le signe =. La notation usuelle variable++; remplace variable = variable + 1;.
Structures de contrôle et comparaisons
On retrouve if, do...while, while et for, avec la même syntaxe qu'en Java. Pour
comparer deux entiers a et b : a == b (égal), a != b (différent), a < b,
a <= b, a > b, a >= b.
Tableaux et chaînes de caractères
À l'initialisation d'un tableau, on déclare le type des éléments et la taille, qui doit être une constante :
int tableau[6] = {4, 2, 6, 8, 3, 1};Les cases d'un tableau de taille 6 sont numérotées de 0 à 5. On peut aussi déclarer le tableau puis l'initialiser les cases une à une — souvent préférable.
Une chaîne de caractères est un tableau de char finissant par le caractère nul '\0' —
et ce terminateur n'a pas besoin d'être dans la dernière case du tableau. La chaîne se
modifie case par case :
char chaine[] = "j'aime les fleurs";
chaine[4] = 'd'; /* la chaîne devient "j'aide les fleurs" */Les fonctions
Les fonctions partitionnent le code — une fonctionnalité capitale pour la lisibilité. En
C, on déclare toutes ses fonctions au début du fichier, après les #include (seul main
a un statut particulier), puis on écrit chaque fonction. Dans une fonction : annoncer le type
des arguments, annoncer le type de la valeur de retour, et retourner effectivement une valeur
de ce type.
#include <stdio.h>
int plus_un (int n);
int main (void)
{
printf("plus_un(2) = %d\n", plus_un(2));
return 0;
}
int plus_un (int n)
{
return n + 1;
}Le même fichier sert de squelette type : inclusion, prototypes, main, puis les définitions.
A retenir
- le C est compilé :
gcc -Wall -o hello main.cproduit un exécutable, lancé par./hello; - langage impératif et permissif : tout est possible, mais visez du code propre et compréhensible ;
- structure imposée :
#include, prototypes déclarés au début,int main(void); dans une fonction — déclarations, initialisations, corps,return— et un;par instruction ; - types du cours :
int,float,char; contrôle (if,while,do...while,for) et comparaisons identiques à Java ; - tableau à taille constante, indices de 0 à n−1 ; chaîne = tableau de
charterminé par'\0'; fonctions déclarées avant d'être définies.
Cours 00.pdf
R2.04 · Cours 0 — Présentation de la matière · 4 pages
Chargement du document…
Cours 01.pdf
R2.04 · Cours 1 — Bases du langage C · 15 pages
Chargement du document…
Dernière mise à jour le