Résumé des Bases du Langage C
1 Concepts de base
Le langage C est un langage de programmation bas niveau, connu pour
sa rapidité et sa puissance. Voici quelques notions fondamentales :
Structure d’un programme en C
Un programme en C suit une structure bien définie :
— Inclusion des bibliothèques (ex. : stdio.h pour les entrées et sorties).
— La fonction main() comme point d’entrée du programme.
— Les instructions exécutées séquentiellement.
Voici un exemple de programme minimal en C :
Entrée utilisateur
Pour lire une entrée utilisateur, on utilise la fonction scanf() :
1
Types de données
Le langage C supporte plusieurs types de données de base, notamment :
— int : pour les entiers (exemple : int a = 10;).
— float : pour les nombres décimaux (exemple : float pi = 3.14;).
— char : pour les caractères (exemple : char lettre = ’A’;).
— double : pour les nombres décimaux avec plus de précision.
Voici un exemple illustrant leur utilisation :
2 Les tableaux
Les tableaux sont des structures de données permettant de stocker une
collection de valeurs du même type. En C, un tableau est défini avec une
taille fixe lors de sa déclaration.
Déclaration et initialisation
Un tableau peut être déclaré de la manière suivante :
— int tableau[5]; : Déclare un tableau de 5 entiers non initialisés.
— int tableau[5] = {1, 2, 3, 4, 5}; : Déclare et initialise un ta-
bleau avec des valeurs.
— float tableau[] = {1.1, 2.2, 3.3}; : Laisse le compilateur dé-
terminer la taille.
2
Exemple : Parcourir un tableau
Voici un exemple de programme qui parcourt un tableau et affiche ses
éléments :
Tableau à deux dimensions
Les tableaux peuvent aussi être multidimensionnels. Par exemple, un
tableau à deux dimensions est utile pour représenter une matrice :
Limites et précautions
— Les indices d’un tableau commencent toujours à 0 en C.
— L’accès à un indice en dehors des limites du tableau peut provoquer
un comportement imprévisible (erreur de segmentation).
— Les tableaux en C n’ont pas de méthode intégrée pour connaître leur
taille, il faut la gérer manuellement.
Exemple : Somme des éléments d’un tableau
Calculer la somme de tous les éléments d’un tableau :
3
3 Les pointeurs
Un pointeur est une variable qui contient l’adresse mémoire d’une autre
variable. Ils sont essentiels en C pour la gestion dynamique de la mémoire, la
manipulation de tableaux, ou encore le passage par référence aux fonctions.
Déclaration et initialisation
Un pointeur est déclaré en utilisant l’opérateur * :
— int *ptr; : Déclare un pointeur vers un entier.
— ptr = &variable; : Initialise le pointeur avec l’adresse de variable.
Exemple : Manipulation de base
4
Pointeurs et tableaux
Les tableaux sont étroitement liés aux pointeurs. Le nom d’un tableau
(tableau) est l’adresse de son premier élément (&tableau[0]).
Pointeurs et fonctions
Les pointeurs permettent de passer des arguments par référence aux fonc-
tions, ce qui permet à la fonction de modifier directement les variables pas-
sées.
Pointeurs et mémoire dynamique
Avec les pointeurs, il est possible d’allouer dynamiquement de la mémoire
avec les fonctions de la bibliothèque stdlib.h (malloc, calloc, free).
5
Précautions avec les pointeurs
— Toujours initialiser les pointeurs avant utilisation (NULL si nécessaire).
— Libérer la mémoire allouée dynamiquement avec free() pour éviter
les fuites mémoire.
— Ne jamais déréférencer un pointeur NULL.
4 Les chaînes de caractères
En langage C, les chaînes de caractères sont des tableaux de caractères
terminés par un caractère nul (’\0’). Elles sont utilisées pour stocker des
séquences de caractères et manipuler du texte.
Déclaration et initialisation
Les chaînes de caractères sont déclarées comme des tableaux de type
char :
— char chaine[50]; : Déclare un tableau de caractères pouvant conte-
nir jusqu’à 49 caractères plus le caractère nul de fin.
— char chaine[] = "Bonjour"; : Déclare une chaîne de caractères et
l’initialise directement avec une valeur.
Affichage et lecture
Pour afficher une chaîne de caractères, on utilise la fonction printf avec
le format %s :
Pour lire une chaîne de caractères de l’entrée standard, on utilise scanf :
6
Manipulation de chaînes
Les chaînes de caractères peuvent être manipulées avec des fonctions de
la bibliothèque string.h :
— strlen() : Retourne la longueur d’une chaîne.
— strcpy() : Copie une chaîne dans une autre.
— strcat() : Concatène deux chaînes.
— strcmp() : Compare deux chaînes.
Exemple d’utilisation de strcpy() et strcat() :
Précautions et bonnes pratiques
— Toujours s’assurer que la chaîne est suffisamment grande pour conte-
nir le texte plus le caractère nul.
— Utiliser scanf() avec précaution, car il ne gère pas les espaces (utiliser
fgets() pour des chaînes avec des espaces).
— Pour éviter les débordements de tampon, utiliser des fonctions sécu-
risées comme strncpy() et strncat().
7
5 Les fonctions
En langage C, les fonctions permettent de regrouper un ensemble d’ins-
tructions sous un nom, facilitant ainsi la réutilisation du code et la structura-
tion des programmes. Elles permettent de diviser un programme en modules
plus petits et plus compréhensibles.
Déclaration et définition
Une fonction est déclarée par son prototype, puis définie par son corps.
Voici la syntaxe :
— Prototype : type nom_fonction(paramètres);
— Définition : type nom_fonction(paramètres) { instructions; }
Exemple de déclaration et de définition :
8
Les paramètres et les valeurs de retour
Les fonctions peuvent accepter des paramètres (arguments) et retourner
une valeur :
— Les paramètres peuvent être de tout type de données (int, float, char,
etc.).
— La valeur de retour peut être utilisée pour renvoyer un résultat de la
fonction à l’appelant.
Exemple de fonction qui retourne un float :
Fonctions récursives
Une fonction est dite récursive lorsqu’elle s’appelle elle-même dans son
corps. La récursivité permet de résoudre des problèmes de manière élégante,
mais il est important de définir un cas de base pour éviter les boucles infinies.
Exemple de fonction récursive pour le calcul de la factorielle :
Fonctions avec des paramètres par référence
Les fonctions peuvent également recevoir des paramètres par référence à
l’aide de pointeurs, permettant ainsi de modifier directement la valeur de la
variable passée.
Exemple de fonction qui modifie une valeur par référence :
Bonnes pratiques
— Donner des noms explicites aux fonctions pour faciliter la compréhen-
sion.
9
— Utiliser des prototypes pour garantir la déclaration correcte des fonc-
tions avant leur utilisation dans le main().
— Éviter les effets de bord inutiles et privilégier les fonctions qui re-
tournent des valeurs au lieu de modifier des variables globales.
10