Cours BUT Info

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 :

ijavaC
écrire Hello.javaécrire main.c
ijavac Hello.javagcc -Wall -o hello main.c
produit Hello.classproduit l'exécutable hello (grâce à -o)
ijava Hello./hello
gcc -Wall -o hello main.c   # -Wall : tous les avertissements, toujours
./hello

Un 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.c produit 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 char terminé 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

Consultation seule — téléchargement désactivé

Chargement du document…

Cours 01.pdf

R2.04 · Cours 1 — Bases du langage C · 15 pages

Consultation seule — téléchargement désactivé

Chargement du document…

Dernière mise à jour le

Sur cette page